あなたの答え
  • 解決した方法 # 1

    まず、これを単純化して、どの言語でもcを使用せずにEを (a + b)* 言語にして、Eを処理します。 。次に、DをEと同じにして処理しますが、2よりも大きい素数長の文字列をすべて削除します。 Cを{a、b}上のすべての偶数長の文字列のセットとして選択できます: (aa + ab + ba + bb)* 。文脈自由で非正規の言語の場合、{a、b}よりも偶数長のパリンドロームのセットを選択できます: S -> aSa | bSb | e 。最後に、素数の a で始まる{a、b}上の偶数長の回文のセットをAとして選択できます。 s。

    DをCと b のみを含むいくつかの言語の和集合にして、Dを取り除こうとした可能性があります。 、次にCを a* と等しくする  次に、 a のみを使用してAとBを見つけようとします ...しかし、1つのシンボルのみを含むコンテキストフリーの非正規言語を見つけるのに問題があったかもしれません。

  • 解決した方法 # 2

    まず、{a、b}以上の非文脈自由言語Aを取り上げます。たとえば、A = {ww | w \ in {a、b} *}ですが、他のものでも機能します。

    次に、その上に他の言語を構築できます。

    B = {a、b} * U {a ^ i c ^ i |私>= 0}

    C = {a、b} * U {a、c} *

    D = {a、b} * U {a、c} * U {b ^ i c ^ i |私>= 0}

    E = {a、b} * U {a、c} * U {b、c} *

    次に、これらのそれぞれについて、目的のプロパティがあることを確認できます。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ azure - トリガーされたWebジョブPowershellデプロイメントスクリプト