Алфавит: a, b, c Я пытаюсь определить КПК, который принимает
a^n b^m c^p : n + p = 2k for some integer k, m = k, and n, m, p, k >= 0
Я думаю, что некоторые строки, которые будут приняты, являются: # abc #;# AABBCC #;# Aaabbbccc #;# Abbccc #;# aaabbc # и т. д. Число a, b и c не обязательно равно.
Запустите головку нажимных автоматов на черном пространстве, которое больше всего справа.
Обычно я пишу свойКПК в столбцах:
State: Symbol Read: Next State: Head Instruction: s # r1 Left r1 c r2 #
и т. Д ...
M=(K, E, q0, F, delta, stack_alphabet) K={q0,q1,q2} E={a,b,c,z} F={q2} stack_alphabet={a,b,z} delta= { *pop* *push* (q0, e, e)(q1, z) (q1, a, e)(q1, a) (q1, b, a)(q1, e) (q1, b, z)(q1, bz) (q1, c, b)(q2, e) (q2, c, b)(q2, e) }
Я думаю, что язык, который вы описываете, не является контекстно-свободным, и поэтому не может быть распознается с помощью кпк. Проблема в том, что вам нужно применять ограничение (n + p = 2 м), которая охватывает произвольно длинную подстроку, но не может "качать" (когда попытка построить доказательство, используя лемму прокачки для контекстно-свободных языков).