<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.183.217.34&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.183.217.34&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/46.183.217.34"/>
		<updated>2026-05-04T10:56:07Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B,_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B4%D0%B2%D1%83%D1%85%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_%D0%9C%D0%A2&amp;diff=74177</id>
		<title>Счетчиковые машины, эквивалентность двухсчетчиковой машины МТ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B,_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B4%D0%B2%D1%83%D1%85%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%8B_%D0%9C%D0%A2&amp;diff=74177"/>
				<updated>2020-05-21T08:50:33Z</updated>
		
		<summary type="html">&lt;p&gt;46.183.217.34: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''&amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машиной''' называется набор &amp;lt;tex&amp;gt;A=\langle\Sigma, Q, s\in Q, T \subset Q, \delta : Q \times \Sigma \cup \{\varepsilon\} \times \{0,1\}^k \rightarrow Q \times \{ -1, 0, 1\}^k \rangle&amp;lt;/tex&amp;gt;, где&lt;br /&gt;
*&amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} входной алфавит на ленте;&lt;br /&gt;
*&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} стартовое состояние автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний автомата;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt; — функция переходов, зависящая от символа на ленте, текущего состояния управляющего автомата и состояния счётчиков и осуществляющая переход в автомата в новое состояние и изменение состояния счётчиков.&lt;br /&gt;
Для каждого счётчика возможны четыре операции: увеличить на один, уменьшить на один, не изменять значение, проверить, является ли значение счетчика нулём.&lt;br /&gt;
Будем считать, что значение нулевых счётчиков уменьшать нельзя.&lt;br /&gt;
}}&lt;br /&gt;
По сути, &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковая машина является [[Стековые машины, эквивалентность двухстековой машины МТ|&amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-стековой машиной]] с односимвольным алфавитом.&lt;br /&gt;
&lt;br /&gt;
== Эквивалентность двухстековой машины трёхсчётчиковой машине==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; допускается двухстековой машиной тогда и только тогда, когда он допускается трёхсчётчиковой машиной.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для доказательства необходимо показать, что двухстековая машина имитируется на трёхсчётчиковой. Пусть &amp;lt;tex&amp;gt;\Pi&amp;lt;/tex&amp;gt; {{---}} стековый алфавит, &amp;lt;tex&amp;gt;|\Pi|=P&amp;lt;/tex&amp;gt;. Пронумеруем символы алфавита от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;P-1&amp;lt;/tex&amp;gt;. Тогда стек можно рассматривать как целое число в системе счисления с основанием &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем использовать два счётчика для хранения состояний двух стеков, а третий счетчик будем использовать для временных вычислений. Для стека существует три типа элементарных операций: положить символ в стек, снять символ со стека, проверить верхний символ стека. Рассмотрим реализацию этих операция на трёхсчётчиковой машине.&lt;br /&gt;
*'''Снять символ со стека'''. Для того, чтобы снять символ, необходимо разделить число, которым представлен стек, на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, отбросив остаток. &lt;br /&gt;
*'''Добавить символ в стек'''. Для того, чтобы добавить символ, необходимо умножить число, которым представлен стек, на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и прибавить к нему номер символа, который добавляется на стек.&lt;br /&gt;
*'''Проверка верхнего символа стека'''. Для этого необходимо найти остаток от деления на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Опишем реализацию арифметических операций с счётчиком, использованных при описании имитации работы двухстековой машины, при помощи двух счётчиков и управляющего автомата.&lt;br /&gt;
*'''Разделить значение первого счётчика на число &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, отбросив остаток.''' Пока первый счётчик не равен нулю, будем уменьшать его на один. При этом после каждых &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; успешных уменьшений значения первого счётчика будем увеличивать на один значение второго счётчика. Далее скопируем значение второго счётчика на первый: пока второй счётчик не равен нулю, уменьшаем его значение и увеличиваем значение первого счётчика. Очевидно, что при фиксированном &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; для данной операции может быть построен управляющий автомат.&lt;br /&gt;
*'''Умножить значение первого счётчика на число &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.''' Будем уменьшать первый счётчик на один и увеличивать второй на &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. Эти действия будем повторять, пока первый счётчик не равен нулю. Затем скопируем значение со второго счётчика на первый. Очевидно, что при фиксированном &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; для данной операции может быть построен управляющий автомат.&lt;br /&gt;
*'''Увеличить значение счётчика на &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.''' Последовательно &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; раз увеличиваем значение счётчика на один. &lt;br /&gt;
*'''Найти остаток от деления значения первого счётчика на число &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.''' Рассмотрим автомат из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; состояний. Пронумеруем состояние от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;C-1&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} стартовое состояние автомата. Скопируем значение с первого счётчика на второй. В случае если второй счётчик не нуль, автомат осуществляет переход из состояния &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; в состояние &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt; (из состояния с номером &amp;lt;tex&amp;gt;C-1&amp;lt;/tex&amp;gt; осуществляется переход в состояние с номером &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;), при этом значение второго счётчика уменьшается на один, а первого {{---}} увеличивается на один. Ясно, что в момент, когда третий счётчик станет равен нулю, управляющий автомат окажется в состоянии с номером, равным остатку от деления значения первого счётчика на &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем имитировать работу двухстековой машины на трёхсчётчиковой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трёхсчётчиковая машина является частным случаем трёхстековой машины, а любая &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-стековая машина эквивалента по вычислительной мощности двухстековой, следовательно, любой язык, допускаемый трёхсчётчиковой машиной, допускается двухстековой.    &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Эквивалентность &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машины двухсчётчиковой ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любого &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; и для любой &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машины существует эквивалентная ей двухсчётчиковая машина.&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства покажем, как имитировать &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковую машины на двухсчётчиковой. Пусть &amp;lt;tex&amp;gt;C_1, C_2, \ldots, C_k&amp;lt;/tex&amp;gt; {{---}} значения счётчиков &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машины. Тогда состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машины можно охарактеризовать одним числом &amp;lt;tex&amp;gt;2^{C_1}\cdot3^{C_2}\cdot \ldots \cdot p_k^{C_k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-е простое число.&lt;br /&gt;
Тогда любое состояние k-счётчиковой машины можно хранить на одном счётчике, и использовать второй счётчик для временных вычислений.&lt;br /&gt;
&lt;br /&gt;
Тогда элементарные операции на &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машине реализуются следующим образом.&lt;br /&gt;
*'''Увеличить &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й счётчик.''' Для этого необходимо умножить значение счётчика на &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
*'''Уменьшить &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й счётчик.''' Для этого необходимо  поделить значение счётчика на &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*'''Сравнить с нулём значение &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-го счётчика.''' Для этого необходимо найти остаток от деления значения счётчика на &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и сравнить его с нулём.&lt;br /&gt;
Операции умножения на константу, деления на константу и нахождения остатка от деления на константу значения счётчика при помощи одного вспомогательного счётчика описаны в предыдущей лемме.&lt;br /&gt;
Таким образом, для любого &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; и для любой &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-счётчиковой машины существует эквивалентная ей двухсчётчиковая машина.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Эквивалентность двухсчётчиковой машины МТ ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для любого перечислимого языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; существует двухсчётчиковая машина, которая распознает этот язык.&lt;br /&gt;
|proof=&lt;br /&gt;
Утверждение теоремы очевидно следует из двух описанных выше лемм и [[Стековые машины, эквивалентность двухстековой машины МТ|эквивалентности двухстековой машины машине Тьюринга]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==См. также ==&lt;br /&gt;
* [[Машина Тьюринга]]&lt;br /&gt;
* [[Стековые машины, эквивалентность двухстековой машины МТ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' — '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Вычислительные формализмы]]&lt;/div&gt;</summary>
		<author><name>46.183.217.34</name></author>	</entry>

	</feed>