Счетчик (информатика)
Эта статья в значительной степени или полностью опирается на один источник . ( май 2021 г. ) |
Счетчик — это машина Тьюринга с подключенным принтером. Машина Тьюринга может использовать этот принтер в качестве устройства вывода для печати строк. Каждый раз, когда машина Тьюринга хочет добавить строку в список, она отправляет ее на принтер. Перечислитель является разновидностью машины Тьюринга и эквивалентен машине Тьюринга.
Формальное определение
[ редактировать ]Счетчик можно определить как двухленточную машину Тьюринга ( многоленточную машину Тьюринга , где ) чей язык . Изначально, не получает никаких входных данных, и все ленты пусты (т. е. заполнены пустыми символами). Новый определенный символ разделитель, который отмечает конец элемента . Вторую ленту можно рассматривать как принтер, строки на ней разделены . Язык, перечисляемый перечислителем обозначается определяется как набор строк на второй ленте (принтере).
Эквивалентность перечислителя и машины Тьюринга
[ редактировать ]Язык с конечным алфавитом является распознаваемым по Тьюрингу тогда и только тогда, когда он может быть пронумерован перечислителем. Это показывает, что распознаваемые по Тьюрингу языки также рекурсивно перечислимы.
Доказательство
Язык, распознаваемый по Тьюрингу, может быть пронумерован с помощью перечислителя.
Рассмотрим машину Тьюринга и язык, принятый им, будет . Поскольку множество всех возможных строк во входном алфавите то есть замыкание Клини является счетным множеством, мы можем перечислить строки в нем как и т. д. Затем Enumerator, перечисляющий язык будет следовать шагам:
1 for i = 1,2,3,... 2 Run with input strings for -steps 3 If any string is accepted, then print it.
Теперь возникает вопрос, каждая ли строка в языке будет напечатан созданным нами перечислителем. Для любой строки на языке ТМ выполнит конечное число шагов (пусть это будет для ), чтобы принять это. Затем в -й шаг перечислителя будет напечатан. Таким образом, Enumerator будет печатать каждую строку распознает, но одна строка может быть напечатана несколько раз.
Перечислимый язык узнаваем по Тьюрингу
Построить машину Тьюринга очень легко. который распознает перечислимый язык . У нас может быть две кассеты. На одной ленте мы берем входную строку, а на другой — запускаем перечислитель для перечисления строк в языке одну за другой. Как только строка напечатана на второй ленте, мы сравниваем ее с входными данными на первой ленте. Если совпадение, мы принимаем входные данные, иначе отклоняем.
Ссылки
[ редактировать ]- Сипсер, Майкл (2012). Введение в теорию вычислений - международное издание . Cengage Обучение. ISBN 978-1-133-18781-3 .