Чи може кожен алгоритм, що самовиправляється, змодельований алгоритмом, що не змінюється?


12

Якщо у нас є будь-яка довільна комп'ютерна програма, яка може змінювати її вказівки, чи можна імітувати цю програму програмою, яка не може змінювати її інструкції?


Редагувати:

Я новачок у stackexchange, тому не впевнений, чи мені дозволяють задати НОВЕ запитання тут, але ось так: Добре, тому доказ того, що це можливо, насправді дуже простий, як ви показали, хлопці. Тепер мені цікаво: чи існують проблеми, для яких ефективніше (і в якій мірі) використовувати для вирішення проблеми найефективніший алгоритм самомодифікуючої моди, порівняно з найефективнішим немодомодулюючим алгоритмом введення-виведення?

Відповіді:


29

Так, це можливо. Ви можете імітувати програму, використовуючи інтерпретатор для мови, на якій написано. Тепер програма (інтерпретатор) виправлена, і те, що раніше було самомодифікуючою програмою, тепер є даними перекладача.

Зокрема, ви цілком могли б мати універсальну машину Тюрінга, яка дозволила ТМ, що імітує, змінити власний опис. (Я маю на увазі опис імітованої машини; не UTM.)


11
Вам навіть не потрібен гіпотетичний перекладач. Процесор, що виконує ваш алгоритм, що самозмінюється, - це сама машина, яка виконує фіксований алгоритм (який диктує, як він виконує інструкції)
Олександр - Поновіть Моніку

1
@AlexanderMomchliov існують процесори, які можуть змінювати частини їх набору інструкцій на льоту (але так, ідея та сама - програмована частина - це дані, мікроконтролер, який працює ним, - інтерпретатор - хоча вказує на мікроконтролер всередині комірки FPGA може бути складним)
Джон Дворак

щоб відповісти: "Ви цілком могли б мати універсальну машину Тьюрінга, яка дозволила TM, що імітує, змінити власний опис". Я думаю: чи не викликає це питання? тому що тепер вам ще потрібно довести, що модельована ТМ може насправді моделювати алгоритм самозмінювання, правда? Все ще може бути так, що існує самомодифікуюча програма, яка НЕ ​​сама по собі є Тьюрінговою машиною, тому ми не можемо використовувати повноту Тьюрінга, щоб показати, що її можна імітувати, оскільки повнота Тьюрінга стосується моделювання ТМ та самомодифікуючого algo не є ТМ.
user56834

@ Programmer2134 Це зовсім не задає питання. Який би CPU ви не думали, що запускаєте програму самовиправлення, я можу імітувати цей процесор на машині Тьюрінга. Щоб пояснити це по-іншому, початкова програма - це кінцева послідовність інструкцій, деякі з яких трапляються, змінюють саму програму. Кожна з інструкцій може бути змодельована UTM, кожна з модифікацій може бути змодельована, і кожна з модифікованих інструкцій може бути змодельована. На будь-якій стадії цього процесу нічого, що виходить за межі машин Тьюрінга, не існує.
Девід Річербі

10

Будь-яка обчислювальна модель Тьюрінга, яка не має модифікаційного коду (або "коду"), є доказом цього твердження. Я не знаю , що ні одна зі стандартних моделей (TM, RAM, ...) дійсно є зміни коду, тому ми не повинні виглядати занадто далеко.

Щоб отримати програму будь-якою мовою, яку ви маєте на увазі, компілюйте з такої моделі (і переконайтеся, що компілятор не вводить модифікацію коду).


Це, звичайно, екзистенційний аргумент: є рівнозначна програма. Але ми також знаємо, що між будь-якими двома мовами Тюрінга є рекурсивні (тобто обчислювані) компілятори, тому ви отримуєте програму потрібної форми (читайте: мовою).


4

Щоб додати відповідь Девіда Річербі :

Якби було правдою, що жодні алгоритми, що змінюються самостійно, не можуть бути змодельовані алгоритмами, що не змінюються, тоді ці алгоритми повинні бути виконані на тому, що також самомодифікується. Це повинні були бути черепахи аж донизу.

Як я вже згадував у своєму коментарі, алгоритм самозмінювання може бути виконаний на процесорі, який сам дотримується правил статичного алгоритму (закодованого в його конструкції), який "підказує" йому, як виконувати інструкції на машині.


1
Я думаю, що це може бути цікавою розділовою лінією. Я думаю, що можна стверджувати, що "життя" - це самомоделюючий алгоритм, який неможливо моделювати алгоритмами, що не змінюють себе, але, знову ж таки, "життя" зазвичай не розглядається як алгоритм.
Корт Аммон

2
@CortAmmon: Якщо ми розглядаємо "життя" як алгоритм, то який його вхід та результат? Як можна довести, що будь-який еквівалентний алгоритм (тобто будь-який алгоритм, який видає той самий вихід, коли дається той самий вхід), повинен самовиправлятися?
ruakh

@ruakh Якби я стверджував, що життя - це алгоритм самовидозміни, вхідними даними був би сам, а його результатами - самим собою. Доведення, що його не можна звести до алгоритму, що не змінюється, було б складніше, але я думаю, що це популярна гіпотеза. Зрештою, скільки людей хоче вірити, що їх можна звести до алгоритму, який може працювати на комп'ютері?
Корт Аммон

1
@CortAmmon: я не можу звестись до алгоритму, який працює на комп’ютері, тому що цей алгоритм вже не "я"; Я більше, ніж мої входи та результати. Але якщо ми будемо виходити з припущення , що я буду просто алгоритм, то лавіруючи на «який може працювати на комп'ютері» не змінює нічого. Re: "Якби я стверджував, що життя - це алгоритм самовидозміни, вхід був би сам собою, а його результати були б самим": У такому випадку я думаю, що ви б заглянули навпроти CS і небезпечно були близькі до тріщини.
ruakh

1
@CortAmmon Програма, яка виводить себе, даючи себе як вхід, справедлива cat. (Не призначено каламбур, навіть незважаючи на те, що коти живі)
користувач253751,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.