Я почти уверен, что ответ - нет.Программа для рекурсивного перечисления функций Poly-time должна в какой-то момент сказать вам, является ли функция, которая решает задачу коммивояжера, Poly-time.Вопрос о том, отвечает ли этот конкретный вопрос в настоящее время, пока открыт.
Я не знаю, что я курил с этим ужасным ответом.Если проблема коммивояжера не в Poly-time, программа никогда не должна обнаруживать этот факт.Просто никогда не обходится перечислением каких-либо решений для этого.Что легко, потому что он никогда не найдет его.
Одна важная деталь, которая мне не ясна, это то, как вы представляете функции и что вы считаете уникальной функцией.
Предположим, что функция равна,«Программа, которая работает в Poly-time», и вы хотите перечислить все программы, независимо от того, производят ли они одинаковый вывод. Тогда ваш ответ сводится к: «Если для данной программы используется Poly-time, всегда есть доказательствоэтот факт?Это явно неверно.У вас может быть программа, которая ищет многозначительное время для доказательства какого-либо открытого вопроса, и, если оно находит его, оно тратит экспоненциальное время, прежде чем получить окончательный результат.В этой программе много времени, но вы не можете доказать это, не доказав, что открытый вопрос - ложь.
Предположим, что эта функция для вас равна «правилу, которое связывает входы с выходами», и вы не согласны ссписок нескольких программ, которые кодируют одну и ту же функцию.Давайте изменим предыдущую патологическую функцию, чтобы модифицировать ее вывод, а не тратить время, если упомянутое доказательство было обнаружено.Теперь вы можете доказать, что эта программа работает по разному времени, но вы не можете доказать, представляет ли она функцию, отличную от той, которая не выполняет весь этап проверки (и, возможно, не изменяет свой вывод).
Предположим, чтодля вас функция равна «правило, которое связывает входы с выходами», и вы в порядке с перечислением нескольких программ, которые кодируют одну и ту же функцию, но не хотят каждую.Предположим, что prog
- это программа, которая может быть или не быть поли-временем, а p(x)
- это полином.Легко написать вторую программу, которая эмулирует первую для шагов p(x)
, а если другая все еще работает, выдает какой-то фиксированный вывод.Эта вторая программа гарантированно будет поли времени.Если на самом деле prog
является поли-временем, то некоторая программа этой формы будет представлять ту же функцию, что и prog
, и поэтому список выходных данных будет включать все возможные поли-функции.(Но одна и та же функция будет закодирована разными способами.)