Подтвердить что ты не робот

Моя программа Тьюринга завершена?

Я потратил неделю или две программирование на простой логический решатель. Построив его, я подумал, не решает ли язык, который он решает, является ли Тьюринг полным или нет. Поэтому я закодировал небольшую совокупность уравнений, которые принимают любое допустимое выражение в исчислении комбинаторов SKI и создают набор результатов, который содержит нормальную форму этого выражения. Поскольку SKI является Turing-complete, доказывая, что мой язык может выполнять SKI, он продемонстрировал бы свою полноту Turing.

Однако есть сбой. Решатель не уменьшает выражение в нормальном порядке. Фактически, что он делает, это попробовать все возможные порядки сокращения. Это означает, что набор решений обычно огромен. Если нормальная форма существует, она будет где-то там, но трудно сказать, где.

Это приводит меня к двум вопросам:

  • Является ли мой язык Тьюрингом полным? Или мне нужно найти лучшее доказательство?

  • Является ли число решений вычислимой функцией ввода?

(Сначала я предположил, что размер набора решений был экспоненциальным или факториальным по размеру ввода. Но при ближайшем рассмотрении это неверно. Вы можете написать огромные выражения, которые уже находятся в нормальной форме, и крошечные выражения, которые я не чувствую, что определение размера набора решений может быть равнозначным решению проблемы остановки, но я не совсем уверен...)

4b9b3361

Ответ 1

A) Как говорит август, ваша система явно завершена.

B) Вы правы, что определение размера решения такое же, как проблема с остановкой. Если последовательность не заканчивается, вы получаете бесконечное множество решений. Поэтому, чтобы определить, является ли множество бесконечным, вам нужно определить, завершается ли последовательность восстановления. Но это точно проблема с остановкой!

C) Насколько я помню, система, которая, учитывая набор инструкций для машины turing, просто говорит, сколько шагов они предпринимают для завершения (что, я полагаю, мощность вашего набора решений) или не завершается если сами инструкции не могут завершиться, само по себе завершается. Так что это должно помочь с интуицией здесь.

Ответ 2

В ответ на мой собственный вопрос... Я обнаружил, что, изменив исходный код, я могу сделать так, чтобы, если входное выражение SKI имеет нормальную форму, эта нормальная форма всегда будет решением # 1. Поэтому, если вы просто игнорируете любые дальнейшие решения, программа уменьшает любое выражение SKI до нормальной формы.

Я считаю, что это "лучшее доказательство".; -)