Это плохо сформулированный вопрос, поэтому давайте сначала разберемся с ним. Я собираюсь сделать это в стиле теории вычислимости. Таким образом, я буду использовать числа вместо строк: часть исходного кода является числом, а не строкой символов. Это действительно не имеет значения, вы можете заменить с й т г я н г в течение ниже.Nы т г I п г
Пусть быть функцией спаривание .⟨ М , н ⟩
Допустим, что язык программирования задается следующими данными:L = ( P, е v )
- разрешимо множество из «действующих программ», ип⊆ N
- вычислимы и частичная функция .e v : P× N → N
Тот факт, что разрешимо, означает, что существует полное вычислимое отображение v a l i d : N → { 0 , 1 } такое, что v a l i d ( n ) = 1пV A L I D: N → { 0 , 1 } . Неформально мы говорим, что можно определить, является ли данная строка допустимым фрагментом кода. Функция e v по сути является интерпретатором для нашего языка: e v ( m , n ) выполняет код m на входе n - результат может быть неопределенным.V A L I D( n ) = 1⟺n ∈ Pе ve v ( м , н )мN
Теперь мы можем ввести некоторую терминологию:
- Язык является всего , если является полной функцией для всех м ∈ P .n ↦ e v ( м ,n)m ∈ P
- Язык интерпретирует язык L 2 = ( Р 2 , е v 2 ) , если существует у ∈ Р 1 таким образом, что е v 1 ( U , ⟨ п , м ⟩ ) ≃ е v 2 ( n , m ) для всех n ∈ PL1= ( P1, э V1) L2= ( P2, э V2)u ∈ P1е v1( U , ⟨ п , м ⟩ ) ≃ е v2( н , м )n ∈ Pи . Здесь u - симулятор для L 2, реализованный в L 1 . Он также известен как универсальная программа для L 2 .m ∈ NUL2L1L2
Возможны и другие определения « интерпретирует L 2 », но позвольте мне не вдаваться в подробности.L1L2
Мы говорим, что и L 2 эквивалентны, если они интерпретируют друг друга.L1L2
Существует «самый мощный» язык машин Тьюринга (который вы называете «машиной Тьюринга»), в котором n ∈ N - это кодировка машины Тьюринга, а φ ( n , m ) - частично вычислимая функция, которая «запускает машину Тьюринга, кодирующую n на входе m ». Этот язык может интерпретировать все другие языки, очевидно, так как мы требовали, чтобы e v была вычислимой.T= ( N , φ )n ∈ Nφ ( н , м )Nме v
Наше определение языков программирования очень расслаблено. Чтобы выполнить следующее, давайте потребуем еще три условия:
- реализует функцию-преемник: существует такое s u c c ∈ P , что e v ( s u c c , m ) = m + 1 для всех m ∈ N ,Ls u c c ∈ Pev(succ,m)=m+1m∈N
- реализует диагональ функция: есть d I в г ∈ P такоечто е V ( д я г , т ) = ⟨ м , м ⟩ для всех м ∈ N ,Ldiag∈Pev(diag,m)=⟨m,m⟩m∈N
- замкнуто относительно композиции функций: если L реализует f и g, то оно также реализует f ∘ g ,LLfgf∘g
Классический результат таков:
Теорема: если язык может интерпретировать сам себя, то он не тотален.
Доказательство. Предположим , что является универсальная программа для полного LANGAUGE L , реализованного в L , то есть, для всех т Е Р и п Е N ,
е V ( U , ⟨ м , п ⟩ ) ≃ е v ( т , п ) .
Как преемник, диагональ, и e v ( u , - ) реализованы в L , так же как и их композиция k ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
ev(u,−)L . Там существует
п 0 ∈ P такоечто
е v ( п 0 , к ) ≃ е V ( U , ⟨ к , к ⟩ ) + 1 , а затем
е V ( U , ⟨ п 0 , п 0 ⟩ ) ≃ е v (K ↦ е V ( U , ⟨ к , к ⟩ ) + 1N0∈ Pe v ( n0, К ) ≃ е V ( U , ⟨ к , к ⟩ ) + 1
Поскольку существует число не равна его собственного преемника, то отсюда следуетчто
L не является полным иличто
L не интерпретирует себя. QED.
е V ( U , ⟨ п0, н0⟩ ) ≃ е V ( п0, н0) ≃ е V ( U , ⟨ п0, н0⟩ ) + 1
LL
Заметьте, что мы могли бы заменить карту-преемник любой другой картой без фиксированной точки.
Вот небольшая теорема, которая, я думаю, устранит недоразумение.
Теорема. Каждый общий язык может быть интерпретирован другим общим языком.
Доказательство. Пусть тотальный язык. Мы получаем итоговое значение L ′, которое интерпретирует L , присоединяя к L его вычислитель e v . Точнее, пусть Р ' = { ⟨ 0 , п ⟩ | п ∈ P } ∪ { ⟨ 1 , 0 ⟩ } и определим е V ' , как
е V ' ( ⟨ б , н ⟩ , мLL'LLе vп'= { ⟨ 0 , п ⟩ | п ∈ P} ∪ { ⟨ 1 , 0 ⟩ }е v'
Очевидно, что L ' является полнымпотому что L является полным. Для того, чтобы видетьчто L ' может имитировать L просто взять у = ⟨ 1 , 0
е v'( ⟨ Б , п ⟩ , м ) = { е v ( п , т )е в ( м0, м1)если b = 0 ,если б = 1 и т = ⟨ м0, м1⟩
L'LL'L , С тех пор
е V ' ( U , ⟨ м , н ⟩ ) ≃ е V ( т , п ) ,мере необходимости. QED.
у = ⟨ 1 , 0 ⟩е v'( U , ⟨ м , п ⟩ ) ≃ е V ( т , п )
Упражнение: [добавлено 2014-06-27] Построенный выше язык не замкнут по составу. Закрепить доказательство теоремы , так что L ' удовлетворяет дополнительные требования , если L делает.L'L'L
Другими словами, вам никогда не понадобится вся мощь машин Тьюринга для интерпретации общего языка - достаточно более мощного общего языка L ′ . Язык L ′ строго более мощный, чем L, потому что он интерпретирует L , но L не интерпретирует себя.LL'L'LLL