特定の言語が通常か、文脈自由か、文脈自由でないかを判断するのに助けが必要です。答えには簡単で非公式な説明で十分なので、ポンピング補題を使用する必要はありません。
私が次の言語を持っているとしましょう:
L1 = { w ∈ {a, b, c, d}* | #a(w) is even, #b(w) = 1 mod 3, w does not have
a substring abc }
L2 = { w ∈ {a, b, c, d}* | #a(w) is even, #b(w) < #c(w) }
L3 = { w ∈ {a, b, c, d}* | #a(w) < #b(w) < #c(w) }
これが私の解決策です:
L1 = L2 ∩ L3 ∩ L4 where
L2 = #a(w) is even
L3 = #b(w) = 1 mod 3
L4 = w does not have a substring abc
L2 は無限のメモリを必要としないため、L2 用に DFA を構築できます。したがって、L2 は規則的です。L3 については、上記と同じ理由です。L4 の場合、単純に「abc」を受け入れないため、通常の DFA を構築できます。
正規言語は ∩ の下で閉じているため、L1 は正規です。
L2 の場合、言語を次のように分割できます。
L2 = L3 ∩ L4 where
L3 = #a(w) is even
L4 = #b(w) < #c(w)
L3 に対して DFA を構築できることがわかっているため、L3 は正則です。L4 はコンテキストフリーです。スタックを使用して a:s と b:s の数をカウントする PDA を構築できるからです。
正規言語と文脈自由言語の ∩ が文脈自由言語になるため、L2 は文脈自由です。
L3 の場合、スタックが 1 つに制限されているため、コンテキストフリーではないことがわかります。2 つ以上の比較を行うには、より多くのスタックが必要です。
私の推論は正しいですか?もうすぐ試験があり、この背後にあるアイデアが得られたかどうかを知る必要があります.
前もって感謝します