Линейно ограниченный автомат — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «{{Определение |definition = '''Линейно ограниченный автомат''' ''(lba)'' — недетерминированная одно...»)
 
Строка 4: Строка 4:
 
Более формально:
 
Более формально:
 
{{Определение
 
{{Определение
|definition = '''Линейно ограниченный автомат''' ''(lba)'' — формальная система <tex>M = (Q, \Sigma, \Gamma, \delta, q_0, F)</tex>, в которой
+
|definition = '''Линейно ограниченный автомат''' ''(lba)'' — формальная система <tex>M = \langle Q, \Sigma, \Gamma, \delta, q_0, F \rangle</tex>, в которой
 
*<tex>Q</tex> — множество состояний.
 
*<tex>Q</tex> — множество состояний.
 
*<tex>q_0 \in Q</tex> — начальное состояние.
 
*<tex>q_0 \in Q</tex> — начальное состояние.
Строка 10: Строка 10:
 
*<tex>\Gamma</tex> — алфавит допустимых символов ленты.
 
*<tex>\Gamma</tex> — алфавит допустимых символов ленты.
 
*<tex>\Sigma \subset \Gamma</tex> — алфавит входных символов, который содержит два особых символа: <tex>\#</tex> и <tex>\$</tex> — левый и правый маркеры, находящиеся с самого начала на концах входной цепочки для того, чтобы предотвращать выход головки ленты за пределы участка, на котором размещается входная цепочка (считается, что маркеры могут использоваться только в этой роли: на место маркера нельзя записать какой-нибудь другой символ ленты, и никакой символ ленты не может быть заменен каким-нибудь маркером).
 
*<tex>\Sigma \subset \Gamma</tex> — алфавит входных символов, который содержит два особых символа: <tex>\#</tex> и <tex>\$</tex> — левый и правый маркеры, находящиеся с самого начала на концах входной цепочки для того, чтобы предотвращать выход головки ленты за пределы участка, на котором размещается входная цепочка (считается, что маркеры могут использоваться только в этой роли: на место маркера нельзя записать какой-нибудь другой символ ленты, и никакой символ ленты не может быть заменен каким-нибудь маркером).
*<tex>\delta</tex> — отображение типа <tex>Q \times \Gamma \to 2^{Q \times \Gamma \times \{L, R\}}</tex>.}}
+
*<tex>\delta</tex> — отображение типа <tex>Q \times \Gamma \to 2^{Q \times \Gamma \times \{\leftarrow, \rightarrow\}}</tex>.}}
 +
 
 +
Из определения следует, что языком, принимаемым линейно ограниченным автоматом <tex>M</tex>, называется множество
 +
<tex>\{w|w\in(\Sigma\setminus\{\#,\$\})^*,(q0,\#w\$,1)\vdash^*_M(q,\#\alpha\$,i),q\in F,\alpha \in \Gamma^*</tex><tex>, 1 \le i\le n,n = |w|+2\}.</tex>
 +
 
 +
 
 +
==Связь линейно ограниченных автоматов с контекстно-зависимыми языками==
 +
 
 +
{{Теорема
 +
|statement=
 +
Если <tex>L</tex> — контекстно-зависимый язык, то язык <tex>L</tex> принимается некоторым линейно ограниченным автоматом.
 +
|proof=
 +
Пусть <tex>G = \langle V_N , V_T, P, S\rangle</tex> — контекстно-зависимая грамматика. Мы построим lba <tex>M</tex>, такой, что язык, принимаемый lba <tex>M</tex>, есть <tex>L(G)</tex>.
 +
 
 +
Входная лента будет иметь две дорожки. Первая дорожка будет содержать входную строку <tex>x (x \ne \epsilon)</tex> с концевыми маркерами. Вторая дорожка будет использоваться для работы.
 +
 
 +
На первом шаге lba <tex>M</tex> помещает символ <tex>S</tex> в крайнюю левую ячейку второй дорожки. Затем автомат входит в порождающую подпрограмму, которая выполняет следующие шаги:
 +
 
 +
'''1.''' Подпрограмма выбирает последовательные подстроки символов <tex>\alpha</tex> на второй дорожке, такие, что <tex>\alpha \rightarrow \beta \in P</tex>.
 +
 
 +
'''2.''' Подстроки <tex>\alpha</tex> заменяются на <tex>\beta</tex>, сдвигая вправо, если необходимо, символы, расположенные справа от <tex>\alpha</tex>. Если эта операция заставляет символ быть вытолкнутым за правый маркер, автомат останавливается. Как известно, промежуточные сентенциальные формы в контекстно-зависимой грамматике не длиннее, чем выводимая терминальная цепочка. Так что, если на очередном шаге получена строка длиннее x, то продолжать процесс не имеет смысла, потому что все последующие строки будут разве лишь длиннее.
 +
 
 +
'''3.''' Подпрограмма недетерминированно выбирает, возвращаться ли к шагу 1, либо идти на выход.
 +
 +
'''4.''' При выходе из подпрограммы первая дорожка все еще будет содержать строку <tex>x</tex>, в то время как вторая дорожка будет содержать некоторую строку <tex>\gamma</tex>, такую, что <tex>S \Rightarrow^*_M \gamma</tex>.
 +
}}
 +
 
 +
== См. также ==
 +
* [[Машина Тьюринга]]

Версия 21:11, 5 января 2015

Определение:
Линейно ограниченный автомат (lba) — недетерминированная одноленточная машина Тьюринга, которая никогда не покидает те ячейки, на которых размещен ее ввод.


Более формально:

Определение:
Линейно ограниченный автомат (lba) — формальная система [math]M = \langle Q, \Sigma, \Gamma, \delta, q_0, F \rangle[/math], в которой
  • [math]Q[/math] — множество состояний.
  • [math]q_0 \in Q[/math] — начальное состояние.
  • [math]F \subset Q[/math] — множество конечных состояний.
  • [math]\Gamma[/math] — алфавит допустимых символов ленты.
  • [math]\Sigma \subset \Gamma[/math] — алфавит входных символов, который содержит два особых символа: [math]\#[/math] и [math]\$[/math] — левый и правый маркеры, находящиеся с самого начала на концах входной цепочки для того, чтобы предотвращать выход головки ленты за пределы участка, на котором размещается входная цепочка (считается, что маркеры могут использоваться только в этой роли: на место маркера нельзя записать какой-нибудь другой символ ленты, и никакой символ ленты не может быть заменен каким-нибудь маркером).
  • [math]\delta[/math] — отображение типа [math]Q \times \Gamma \to 2^{Q \times \Gamma \times \{\leftarrow, \rightarrow\}}[/math].


Из определения следует, что языком, принимаемым линейно ограниченным автоматом [math]M[/math], называется множество [math]\{w|w\in(\Sigma\setminus\{\#,\$\})^*,(q0,\#w\$,1)\vdash^*_M(q,\#\alpha\$,i),q\in F,\alpha \in \Gamma^*[/math][math], 1 \le i\le n,n = |w|+2\}.[/math]


Связь линейно ограниченных автоматов с контекстно-зависимыми языками

Теорема:
Если [math]L[/math] — контекстно-зависимый язык, то язык [math]L[/math] принимается некоторым линейно ограниченным автоматом.
Доказательство:
[math]\triangleright[/math]

Пусть [math]G = \langle V_N , V_T, P, S\rangle[/math] — контекстно-зависимая грамматика. Мы построим lba [math]M[/math], такой, что язык, принимаемый lba [math]M[/math], есть [math]L(G)[/math].

Входная лента будет иметь две дорожки. Первая дорожка будет содержать входную строку [math]x (x \ne \epsilon)[/math] с концевыми маркерами. Вторая дорожка будет использоваться для работы.

На первом шаге lba [math]M[/math] помещает символ [math]S[/math] в крайнюю левую ячейку второй дорожки. Затем автомат входит в порождающую подпрограмму, которая выполняет следующие шаги:

1. Подпрограмма выбирает последовательные подстроки символов [math]\alpha[/math] на второй дорожке, такие, что [math]\alpha \rightarrow \beta \in P[/math].

2. Подстроки [math]\alpha[/math] заменяются на [math]\beta[/math], сдвигая вправо, если необходимо, символы, расположенные справа от [math]\alpha[/math]. Если эта операция заставляет символ быть вытолкнутым за правый маркер, автомат останавливается. Как известно, промежуточные сентенциальные формы в контекстно-зависимой грамматике не длиннее, чем выводимая терминальная цепочка. Так что, если на очередном шаге получена строка длиннее x, то продолжать процесс не имеет смысла, потому что все последующие строки будут разве лишь длиннее.

3. Подпрограмма недетерминированно выбирает, возвращаться ли к шагу 1, либо идти на выход.

4. При выходе из подпрограммы первая дорожка все еще будет содержать строку [math]x[/math], в то время как вторая дорожка будет содержать некоторую строку [math]\gamma[/math], такую, что [math]S \Rightarrow^*_M \gamma[/math].
[math]\triangleleft[/math]

См. также