Нет, ваше предположение неверно!
Язык L = { x = y + z | where x, y, z are binary integers and x is the sum of y and z}
не является контекстно-свободным языком (CFL).
Я пытаюсь объяснить.
Прежде всего, рассмотрим следующие примеры строк s
на языке L
.
110 = 100 + 10
1110 = 1100 + 10
:
111000 = 110000 + 1000
В моем объяснении LHS — это X
, а RHS — Y + Z
.
Что такое прокачка Lemma для CFL?
Если язык L контекстно-свободен, то существует некоторое целое число p ≥ 1 такое, что любая строка s в L с |s| ≥ с. (где p - "длина накачки" может быть записана как
s = uvxyz
with substrings u, v, x, y and z, such that
1. |vxy| ≤ p,
2. |vy| ≥ 1, and
3. uv nxy nz is in L for every natural number n.
Это определение | ≥ 1 и 3. uv nxy nz принадлежит L для любого натурального числа n.
Примечание: средняя часть s
, vxy
не больше, чем длина накачки p
. (условие 1)
[РЕШЕНИЕ]:
Выберем строку s
из L
, удовлетворяющую условию |s| ≥ p
наше s
равно 1m0q = 1m-10q + 10q , где q > p , m-1 > p
Теперь общая длина s
равна 2m + 2q -1
, что больше, чем p
, и, конечно, для некоторых комбинаций натуральных чисел это неравенство возможно (я не включаю длину +
и =
, чтобы упростить объяснение)
Теперь наш s
находится на языке и достаточно велик в соответствии с леммой о накачке для CFG.
А теперь сломай:
u vxy z = 1m0q = 1m-10q + 10во
Попробуйте найти v
и y
, чтобы прокачать и сгенерировать новую строку на языке L, но имейте в виду, что v
и y
не должны быть слишком далеко от p
(согласно условию 1).
У вас нет выбора для v
и y
, чтобы вы могли генерировать новые строки на языке!
(Шаг 1): потому что, если вы решите увеличить 1
, вы не сможете прокачать обе стороны, правую и левую, от =
, потому что последний 1
на левой стороне находится на q
(>p) до первого 1
правой стороны. . следовательно, невозможно генерировать новые строки на языке.
(Шаг 2): Предположим, вы хотите снова накачать 0
. Невозможно одновременно увеличить 0
на левой и правой сторонах, потому что последние 0
на левой стороне в m-1 (>p) растягиваются до первой 0
на правой стороне .
(Шаг 3). Вы не можете прокачать комбинацию 111...000...
в обе стороны. , попробуйте это, вы получите строку из языка L.
Попробуйте и другие варианты в рамках правил Pumping Lemma. вы не найдете правильный выбор для v
и y
.
[ОТВЕТ]
Итак, у него есть строка s
в L, которая достаточно велика, и с ее помощью мы не можем генерировать новые строки в языке. это противоречит лемме о накачке для CFL, поэтому данный L
не является CFL.
person
Grijesh Chauhan
schedule
17.12.2012