Счетчиковые машины, эквивалентность двухсчетчиковой машины МТ — различия между версиями
|  (→Эквивалентность двухстековой машины трёхсчётчикой машине) |  (→Эквивалентность двухстековой машины трёхсчётчикой машине) | ||
| Строка 22: | Строка 22: | ||
| Будем использовать два счётчика для хранения состояний двух стеков, а третий счетчик будем использовать для временных вычислений. Для стека существует три типа элементарных операций: положить символ в стек, снять символ со стека, проверить верхний символ стека. Рассмотрим реализацию этих операция на трёхсчётчиковой машине. | Будем использовать два счётчика для хранения состояний двух стеков, а третий счетчик будем использовать для временных вычислений. Для стека существует три типа элементарных операций: положить символ в стек, снять символ со стека, проверить верхний символ стека. Рассмотрим реализацию этих операция на трёхсчётчиковой машине. | ||
| − | *'''Снять символ со стека'''. Для того, чтобы снять символ, необходимо разделить число, которым представлен стек, на <tex>P</tex>, отбросив остаток | + | *'''Снять символ со стека'''. Для того, чтобы снять символ, необходимо разделить число, которым представлен стек, на <tex>P</tex>, отбросив остаток.   | 
| − | *'''Добавить символ в стек'''. Для того, чтобы добавить символ, необходимо умножить число, которым представлен стек, на <tex>P</tex> и прибавить к нему номер символа, который добавляется на стек | + | *'''Добавить символ в стек'''. Для того, чтобы добавить символ, необходимо умножить число, которым представлен стек, на <tex>P</tex> и прибавить к нему номер символа, который добавляется на стек. | 
| − | * '''Проверка верхнего символа стека'''. Для этого необходимо найти остаток от деления на <tex>P</tex>.  | + | *'''Проверка верхнего символа стека'''. Для этого необходимо найти остаток от деления на <tex>P</tex>. | 
| − | Опишем реализацию арифметических операций с счётчиком, использованных при описании имитации работы двухстековой машины при помощи двух счётчиков и  | + | Опишем реализацию арифметических операций с счётчиком, использованных при описании имитации работы двухстековой машины, при помощи двух счётчиков и управляющего автомата. | 
| − | *''' | + | *'''Разделить значение первого счётчика на число <tex>C</tex>, отбросив остаток.''' Пока первый счётчик не равен нулю, будем уменьшать его на один. При этом после каждых <tex>C</tex> успешных уменьшений значения первого счётчика будем увеличивать на один значение второго счётчика. Далее скопируем значение второго счётчика на первый: пока второй счётчик не равен нулю, уменьшаем его значение и увеличиваем значение первого счётчика. Очевидно, что при фиксированном <tex>C</tex> для данной операции может быть построен управляющий автомат. | 
| − | *''' | + | *'''Умножить значение первого счётчика на число <tex>C</tex>.''' Будем уменьшать первый счётчик на один и увеличивать второй на <tex>C</tex>. Эти действия будем повторять, пока первый счётчик не равен нулю. Затем скопируем значение со второго счётчика на первый. Очевидно, что при фиксированном <tex>C</tex> для данной операции может быть построен управляющий автомат. | 
| − | *'''Найти остаток от деления значения первого счётчика на число <tex>C</tex>.'''   | + | *'''Увеличить значение счётчика на <tex>C</tex>.''' Последовательно <tex>C</tex> раз увеличиваем значение счётчика на один.  | 
| + | *'''Найти остаток от деления значения первого счётчика на число <tex>C</tex>.''' Рассмотрим автомат их <tex>C</tex> состояний. Пронумеруем состояние от <tex>0</tex> до <tex>C-1</tex>. Пусть <tex>0</tex> - стартовое состояние автомата. Скопируем значение с первого счётчика на второй. В случае если второй счётчик не нуль, автомат осуществляет переход из состояния <tex>i</tex> в состояние <tex>i+1</tex> (из состояния с номером <tex>C-1</tex> осуществляется переход в состояние с номером <tex>0</tex>), при этом значение второго счётчика уменьшается на один, а первого — увеличивается на один. Ясно, что в момент, когда третий счётчик станет равен нулю, управляющий автомат окажется в состоянии с номером, равным остатком от деления значения первого счётчика на <tex>C</tex>.  | ||
| <tex>\Leftarrow</tex> | <tex>\Leftarrow</tex> | ||
Версия 10:16, 24 января 2012
Содержание
Счётчиковые машины
| Определение: | 
| -счётчиковой машиной называется набор , где 
 Для каждого счётчика возможны четыре операции: увеличить на один, уменьшить на один, не изменять значение, проверить является ли значение счетчика нулём.Будем считать, что значение нулевых счётчиков уменьшать нельзя. | 
По сути, -счётчиковая машина является -стековой машиной с односимвольным алфавитом.
Эквивалентность двухстековой машины трёхсчётчикой машине
| Лемма: | 
| Язык  допускается двухстековой машиной тогда и только тогда, когда он допускается трёхсчётчиковой машиной. | 
| Доказательство: | 
| 
 Для доказательства необходимо показать, что двухстековая машина имитируется на трёхсчётчиковой. Пусть - стековый алфавит, . Пронумеруем символы алфавита от до . Тогда стек можно рассматривать как целое число в системе счисления с основанием . Будем использовать два счётчика для хранения состояний двух стеков, а третий счетчик будем использовать для временных вычислений. Для стека существует три типа элементарных операций: положить символ в стек, снять символ со стека, проверить верхний символ стека. Рассмотрим реализацию этих операция на трёхсчётчиковой машине. 
 Опишем реализацию арифметических операций с счётчиком, использованных при описании имитации работы двухстековой машины, при помощи двух счётчиков и управляющего автомата. 
 Трёхсчётчиковая машина является частным случаем трёхстековой машины, а любая -стековая машина эквивалента по вычислительной мощности двухстековой, следовательно, любой язык, допускаемый трёхсчётчиковой машиной, допускается двухстековой. | 
Эквивалентность -счётчиковой машины двухсчётчиковой
| Лемма: | 
| Для любого  и для любой -счётчиковой машины существует эквивалентная ей двухсчётчиковая машина. | 
| Доказательство: | 
| Для доказательства покажем, как имитировать -счётчиковую машины на двухсчётчиковой. Пусть — значения счётчиков -счётчиковой машины. Тогда состояние -счётчиковой машины можно охарактеризовать одним числом , где — -е простое число. Тогда любое состояние k-счётчиковой машины можно хранить на одном счётчике, и использовать второй счётчик для временных вычислений. Тогда элементарные операции на -счётчиковой машине реализуются следующим образом. 
 Операции умножения на константу, деления на константу и нахождения остатка от деления на константу значения счётчика при помощи одного вспомогательного счётчика описаны в предыдущей лемме.Таким образом, для любого и для любой -счётчиковой машины существует эквивалентная ей двухсчётчиковая машина. | 
Эквивалентность двухсчётчиковой машины МТ
| Теорема: | 
| Для любого перечислимого языка  существует двухсчётчиковая машина, которая распознает этот язык. | 
| Доказательство: | 
| Утверждение теоремы очевидно следует из двух описанных выше лемм, эквивалентности двухстековой машины машине Тьюринга и тезиса Тьюринга-Черча. | 
Источники
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)
