язык: { An B(2n) Cn | где n>=0 }
Я думаю, что да, потому что вы можете обработать это следующим образом: нажать A, нажать B, для каждого C трижды выталкивать из стека, если нет C и стек пуст, вернуть true, иначе вернуть false.
язык: { An B(2n) Cn | где n>=0 }
Я думаю, что да, потому что вы можете обработать это следующим образом: нажать A, нажать B, для каждого C трижды выталкивать из стека, если нет C и стек пуст, вернуть true, иначе вернуть false.
Используйте лемму о накачке, чтобы доказать, что это не контекстно-свободный язык.
Рассмотрим s = ap b2p cp
Затем рассмотрим vxy
, |vxy|<=p, |vy|>0
и uvixy iz в L
У нас есть возможности
- vxy = aj, j‹=p
- vxy = aj bk, j+k‹=p
- vxy = bj, j‹=p
- vxy = bj ck, j+k‹=p
- vxy = cj, j ‹=p
В любом случае констант u
и v
с.т. не существует. строка находится в L, потому что в vxy
может быть только два символа, и тогда нам потребуется переменное количество третьего, чтобы оно отображалось в up u
или v
Предложенные вами автоматы терпят неудачу на AAAC, возвращая true. Это не гарантирует, что у вас в два раза больше B, чем A.
Такого КПК не существует, потому что этот язык не является контекстно-свободным. Вот краткое доказательство этого. Это основано на том факте, что контекстно-свободные языки закрыты при обратном гомоморфизме (как указано на этих слайдах).
Учитывая язык L = { AnB2nCn | n в N }, рассмотрим гомоморфизм h, определенный из
Обратным к этому гомоморфизму применительно к L является язык h-1(L) = { x in * | h(x) L }. Глядя на выбор h, это язык { AnBnCn | п в N}. Этот язык является каноническим примером неконтекстно-свободного языка. Однако КЛЛ замкнуты относительно обратного гомоморфизма, поэтому, поскольку h-1(L) не является контекстно-свободным, L не может быть контекстно-свободным. Поэтому КПК для него нет.
Надеюсь это поможет!