アフィン関数の値の言語


10

書き込みn¯の小数展開のためn(なし有力で0)。ましょうとbが付き整数、可能> 0。倍数の小数展開の言語を検討プラス定数を:aba>0a

M={ax+b¯xN}

あるM、通常の?コンテキストフリー?

アフィン関数のグラフの言語と対比)

これは良い宿題の質問になると思います。ヒントやヒントから始めて、質問の解決方法だけでなく、使用するテクニックの決定方法も説明する回答をいただければ幸いです。


ちょうど今、@ vonbrandのアイデアに従って、特定のケースに答えたことに気づきました。43で割り切れる自然数の小数表現を受け入れるDFA
Hendrik Jan

回答:


9

非常に単純:数値が10進数で書かれていると仮定します(他の底は些細な変更によって処理されます)。で、DFAを構築する状態0、1、...、- 1。開始状態は0であり、入力qから入力dは状態10 q + d mod aになります。受け入れ状態はb mod aですb > aの場合は微調整が必​​要になる場合があります)。aa1qd(10q+d)modabmodab>a


1
とてもいいです-私よりずっといいです!
David Lewis

8

定期的です。任意のベースに一般化されますバイナリでみましょう最初の仕事、> 1.レッツ当該の言語であること。a = 1、b = 0の場合Ma,b

M1,0={1,10,11,100,101,...}

上のすべての文字列である正規ある先行ゼロではないが、(それのための正規表現を構築します)。{0,1}

今、任意のために、B、まだ0我々が得るとともに、M 0からM 1 0で数値的に乗算しては、それは、変換を行う、あるˉ X¯ A Xの各列のM 0を。すなわち、シフトとの添加の順序によって、ビット単位を行うことができるX固定文字列のビットに依存しますˉ。必要な2つの変換は次のとおりです。aMa,0M1,0x¯ax¯Ma,0xa¯

である ˉ X ˉ X 0x¯2x¯x¯x¯0

そして

x¯2x+x¯

右側に0を連結すると、規則性が明らかに保持されます。したがって、2番目の操作で規則性が保たれることを証明するだけで済みます。それを行うための方法は、に取り組んで有限状態トランスデューサである、右から左へ。これが最も難しいステップです。状態を使用するのではなく、疑似コードプログラムといくつかの有限の補助メモリ(ビット変数など)を使用することをお勧めします。メモリがすべての入力にわたって固定サイズであり、厳密に右から左にスキャンする限り、それは有限状態変換であり、規則性を維持します。x¯

最後に、取得するにはからM 0我々は数値的に追加する必要がBの各文字列に、それは同様のトランスデューサで行うのTのB固定番号Bに依存します。Ma,bMa,0bTb

任意のベースで同じことを行うには、dに依存するトランスデューサーS dを使用して、そのベースで1桁のを乗算する方法をさらに示します。これにより、多桁の数字を掛けても、通常の言語のままです。または、dによる乗算は単に繰り返し加算されると言うことで、これを巧みに行うことができます。dSdd

ヒントだけが欲しかった。これらの各ステップは、かなり複雑な定理/手法に依存しているため、完全な証明を得ることを証明することは追加の作業になります。


あなたのFAは取得していない私はあなたがショーを書くことは、手元の言語が規則的であることをどのように表示されていないので、入力として。なお、必ずしもすべてのプログラムFAに使用する有限のメモリ対応していること:それだけで行くことができることが重要であり、一度左から右に正確に一度、すべての入力記号を考慮すると、入力オーバー。x¯
ラファエル

@Raphael必要に応じて、右から左に移動できます。ダビデの証明スケッチに欠陥はありません。トランスデューサーの呼び出しは、私が想像したよりも少し基本的ではありませんが、有効に見えます。
Gilles「SO-悪をやめる」

@ギレス:まず、彼はaによる乗算をインターリーブしb1つのパスで結果追加する方法を説明していません。彼はさらにaによる乗算を「一連のシフトとxの加算」に減らします。すべてのシフトと追加は問題ありませんが、シーケンスを実行する方法は?第二に、そしてより重要なのは、彼がいることをトランスデューサーを構築する方法を示していますを計算ˉ のx¯ A X + B ; M受け入れる FAをすぐには提供しないabax x¯ax+b¯ M。たとえば、数値の乗算は簡単ですが、因数分解は(申し立てによると)簡単ではありません。したがって、少なくとも追加の引数が必要です。
ラファエル

私はFSAを構築していません。私は簡単に(規則的であることが示さセットで始めている)、その後、規則を保存その各々の動作の有限級数とその中のすべての文字列を変換します。これには、いくつかのパス(トランスデューサー)が必要です。しかし、トランスデューサのシーケンスとそれぞれの構造は、abのみに基づいて事前に固定されているため、問題ありません。各パス(トランスデューサー)は規則性を維持するため、1つのパスでインターリーブする必要はありません。はい、「初級」ではありません。しかし、FSAを1つのパスで1回で構築することは、非常に複雑です。M1,0ab
David Lewis

1
@Raphael-はい、それは非常に強力です。実際、多くの非正規ファミリーも有限状態トランスデューサーの下で閉じています。また、トランスデューサーを削減メカニズムとして使用して、非正規言語の「構造的」複雑さの理論全体を取得できます。
デビッドルイス

8

ヒント#1:最初に、最も重要度の低いビットが最初に表示されるときに、「3で割り切れる数値の10進数/ 2進数表現を認識するオートマトンを作成する」というより一般的な問題を解決します。

中級質問:それを証明する規則的です。{ax+b¯ax+b0xZ}

#2ヒント:関数のグラフ "モジュロA "は有限です。数字のセットとオートマトンの言語の両方である{ 0 9 }のdについてそれを計算できます。(n10n+d)ad{0,,9}

#3のヒント:今、置き換えX Nを。これは何が変わりますか?通常の言語は、アドホックなオートマトンを構築する代わりに、交差によって安定しているという事実を使用してみてください。xZxN

#4のヒント:今仮定する素数(したがってことであるZ / Zのフィールドである)、我々はケースに残っていることをX Z。ここで、最初のビットが最上位ビットである表現を使用します。同じ方法でオートマトンを作成できますか?aZ/aZxZ

ヒント#5:言語が正規であることを証明するために、常にオートマトンを構築する必要はありません。以前の結果を使用して、が正則であることをどのように証明できますか?(最上位ビットが最初)M


これが適切ではないと思われる場合は、遠慮なくコメントしてください。
jmad

ヒント#1は大きなステップです。ヒント#4では、ということを理解することが重要です{ 2 5 }10が異なっています。経由Z理由に滞在していない:回り道のように感じている、あなたは、符号文字を管理する必要がNをa{2,5}a10ZN
Gilles 'SO-悪をやめる'

@Gilles:私が言いたかったときのx + B 0のx Z、ため3 X + 1234認識する面倒です。ax+b¯ax+b0xZ3x+1234
jmad

@ギレス:ヒント#1は甘すぎて台無しにできないと思います。ヒント#4については、おそらく正しいでしょう。
jmad

5

私は@vonbrandのアイデアに従っています:

ヒント1:

最初に解きますMyhill-Nerode定理を使用できます。b=0

私たちは、次のような関係を定義。これは明らかに等価関係です。我々は桁追加した場合ので、それは、右合同である dは我々が得る ˉ のxˉ yのx¯y¯:xymodadLは等価クラス[0]なので、最後にLを飽和させます。には有限数のクラスがあるため、Myhill-Nerodeの定理により、規則的であることがわかります。関連するFSAは最小限であり状態があります。x¯y¯10x+d10y+dmodax¯dy¯dLL[0]a

ヒント2:

一般的なケースを解決し、ケースによって引き起こされるオートマトンを再利用します。b=0

b=0aMb=0Lbkkkax+bMa


a=1a

3

言語は定期的です。

ヒント: ナインをキャストアウトする


証明のアイデア

a=9b<9

9080bsd(s+d)mod9

a10

ka10k1k=3a=37999=27×37

a25

最後の桁数は有限であることに注意してください。

ab

a1a2a1a2

便利なテクニックを使用することに注意してください。この証明では、3つの主要な基本技法(正規表現、有限オートマトン、集合論的プロパティ)がすべて示されています。


詳細な証明

a=2p5qaa10M={ax+b¯xZax+b0}M={2p5qx+b¯xZ2p5qx+b0}babab2p5qM{x¯xb}=MM{x¯xb}{x¯xb}MMM{x¯xb}は通常です。そしてそれが有限集合で、その言語の和集合であるので、そのために規則的です。したがって、証明を結論付けるには、とが規則的であることを証明するだけで十分です。MMM

から始めましょう。つまり、法とする数値です。10進展開がである整数は、最後の桁で特徴付けられます。これは、桁をさらに左に変更すると、倍数が追加されることを意味するためですの倍数である。したがって、ここで、はすべての数字のアルファベットであり、は長さ有限の単語のセットであり、は通常の言語です。M2p5qMmax(p,q)10max(p,q)2p5q0M=FFmax(p,q)M=(F)(({0}))

ここでに目を向けます。つまり、がと素素で法と数値です。もし次に、全てナチュラルズの小数展開の集合である、すなわち、であり、通常の言語。ここでと仮定ます。ましょう。フェルマーの小さな定理により、、つまりが割り算することになります。次のように、を認識する確定的有限オートマトンを作成します。Maa10a=1MM={0}(({0}))a>1k=a110a11modaa10k10M

  • 状態はです。最初の部分は数字の位置を表し、2番目の部分は法とする数値を表します。[0,k1]×[0,10k2]10k1
  • 初期状態はです。(0,0)
  • 標識遷移があるからと IFFと。d(i,u)(j,v)vd10i+umod10k1ji+1modk
  • 状態は(が除算することに注意最終的な差分です。(i,u)ubmodaa10k1

単語から到達した状態は、満たします および。これは、オートマトンの遷移に従って、単語の帰納法によって証明できます。遷移は、という事実を使用して、このために計算されます。したがって、オートマトンは形式の数値の10進展開(初期ゼロを許可)を認識します。以来オートマトンは、数値の小数展開に等しい認識モジュロであり、初期のゼロを可能にします(i,u)x¯i|x¯|modkuxmod10k110k1mod10k1u+y10kubmoda b a 0 M M = 0 M { 0 } 10k1modaba0M。したがって、この言語は規則正しいことが証明されています。最後に、は通常の言語です。M=(0M)(({0}))

以外のベースに一般化するには、上記のとベースのすべての素因数で置き換えます。2 51025

正式な証明

読者のための演習として、お気に入りの定理証明者に任せてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.