教科書に間違いがあるか、読み間違えています。あなたが名前を挙げた第二言語は普通です。
DFAは、 m(任意のm )を法とする2進数(または任意の基数)の値を計算できます。単純に、0からm -1までの番号が付けられたm個の状態があります。ゼロを読み取るときは、現在の状態sから(s * 2)modmに移動します。1つを読むときは、(s * 2 + 1)modmに移動します。これが機能することを確認するには、バイナリがどのように機能するか、および(a + b)mod m =(a mod m + b mod m)mod m(および乗算の場合も同様)を確認するだけで済みます。
k mod mに等しい数を受け入れるには、kを受け入れ状態にします。k mod mとは異なる数を受け入れるには、他のすべての状態を受け入れます。これは、{s∈{0,1} * | d(s)mod 5=2}および{s∈{0,1}*| d(s)mod 7!=4}は両方とも正規言語です。言語Lはそれらの共通部分であり、正規言語は共通部分の下で閉じられているため、Lは正規です。
言語{s∈{0,1}*| d(s)mod 5 =2}は正規表現で受け入れられます'(((0 * 10(10 * 10)* 10 * 11 | 0 * 11)((00 | 1)(10 * 10)* 10 * 11 | 01)*(00 | 1)(10 * 10)* 0 | 0 * 10(10 * 10)* 0)(0((00 | 1)(10 * 10)* 10 * 11 | 01)* (00 | 1)(10 * 10)* 0 | 1)* 0((00 | 1)(10 * 10)* 10 * 11 | 01)*(00 | 1)(10 * 10)* |(0 * 10(10 * 10)* 10 * 11 | 0 * 11)((00 | 1)(10 * 10)* 10 * 11 | 01)*(00 | 1)(10 * 10)* | 0 * 10 (10 * 10)*)$'(ここではPython表記を使用しましたが、表記を取得するには、|を+に置き換え、$を削除するだけです)。