3のべき乗の2進数表現全体は正規表現で書ける?

このQ&Aのポイント
  • 2のべき数については正規表現で表せるが、2のべき数以外の場合は存在するか疑問がある
  • x=3や5で小さい方から20個程べき数を列挙し、受理する有限オートマトンを作ったがうまくいかなかった
  • この問題について教えていただける方を求めています
回答を見る
  • ベストアンサー

3のべき乗の2進数表現全体は正規表現で書ける?

オートマトン理論の本の練習問題を解いていて以下のような疑問に行き当たりました。 アルファベット{0, 1}上の語を2進数とみなすとき、 2のべき数については 2のべき乗の2進数表現の全体 -> 10* 4のべき乗の2進数表現の全体 -> 1(00)* 8のべき乗の2進数表現の全体 -> 1(000)* ... というように正規表現で書くことができますが、「xのべき乗」のxが2のべき数以外のときにこのように正規表現で表せる場合は存在するのでしょうか? とりあえずx=3や5で小さい方から20個程べき数を列挙し、それらを受理する有限オートマトンを作ろうとしたのですが、私の能力では出来ませんでした。そこで不可能であることを証明することに方針を変えたのですが、そちらもまだ出来ないでおります。 どなたかこの問題を御教示いただけないでしょうか。 どうぞよろしくお願いいたします。

noname#156238
noname#156238

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

すみません, #2 ははずしています. もっと簡単に行けます(たぶん). 以下は証明の概略: {0, 1}上の語 w に対し w が表す 2進数を N(w), ビット数を |w| で表すことにします. 「3のべきを表す正規表現」が存在すると仮定すると, Pumping Lemma から「uv^iw (i ≧ 1 かつ |v| ≧ 1) が全て 3のべきであるような u, v, w」が存在します. そこで N(uvw) = 3^m, N(uv^2w) = 3^n とおきます. すると N(uv^3w) = 3^n + (3^n-3^m)2^|v| と書けますが, この右辺は 3^n で割り切れず, したがって 3のべきではありえません.

noname#156238
質問者

お礼

御教示どうもありがとうございます。いや~鮮やかなものですね。2進でx桁多い(0詰め)=10進で2^|x|倍、というテクニックは是非身につけなければと思いました。この度は本当にありがとうございました。 (以下は私なりに若干の補足をさせていただいたものです。3のべき数をxのべき数に一般化したものへも容易に拡張できそうですね) ---- {0,1}上の言語Lp3={3のべき数の2進数表現の全体}が正則であるとし、語zをLp3の元とする。すると反復補題からuv^iw(i=0,1,2...)も やはりLp3の元となるようなzの分割z=uvw(|v|>=1)が存在する。 ここでzの10進での値をN(z)で表すとして、N(z)=3^mであるとする。すると、y=uv^2w=uvvwもLP3の元であることからN(y)=3^nと表せ、yの方がzより桁数が大きいことからyはzで割り切れる(N(y)/N(z)=3^{n-m}においてn-mは正整数)。 次にx=uv^3w=uvvvwを考えると、 N(x)-N(y)=N(uv-v)・2^|vvw| および N(y)-N(z)=N(uv-v)・2^|vw| より、xの10進での値は N(x) =N(y)+N(uv-v)・2^|vvw| =N(y)+(N(y)-N(z))・2^|v| =3^n+(3^n-3^m)・2^|v| となる。 ここでxもLp3の元、すなわちN(x)=3^lであるならば、xの方がyより桁数が大きいことからN(x)=3^n+(3^n-3^m)・2^|v|はN(y)=3^nで割り切れるはずである。 ところが、右辺を3^nで割った商 (3^n+(3^n-3^m)・2^|v|)/3^n=1+2^|v|-3^{m-n}・2^|v| において、最後の項3^{m-n}・2^|v|は整数とはなりえない(なぜなら3^{m-n}・2^|v|=s(sは正整数)であるとすると2^|v|=s・3^{n-m}と変形できるが、左辺の素因数が2だけなのに対して右辺の素因数に3が含まれており矛盾)。よって商全体1+2^|v|-3^{m-n}・2^|v|も整数とはならず、xはLp3の元ではない。 以上から冒頭に述べたような分割は存在せず、Lp3は正則ではないことが言える。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

そんな感じです. もっと一般化すると {0, 1, ..., p-1}上の語を p進数とみなしたときに「q のべきを表す正規表現」が存在するかどうか が log[p] q が有理数かどうか で判定できる, と. p, q によっては「p のべきが q のべきで割り切れる」という状況が考えられるので, #3 のようにはいきません.

noname#156238
質問者

お礼

再三の御教示をありがとうございます。 基数を一般化するとまたいくらか(?)難しくなるわけですか。教えていただいたことをもとに自分なりの証明を考えてみたい思います。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

たぶん, log[2] 3 (2 を底とする 3 の対数) が無理数であることを背景に Pumping Lemma. 実際には log[2] 3 は超越数ですが, この証明ではそこまでは要求しないと思います.

noname#156238
質問者

お礼

>log[2] 3 (2 を底とする 3 の対数) が無理数 なるほど!光明が見えた気がしました。 御教示どうもありがとうございました。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

>3のべき乗の2進数表現全体は正規表現で書ける? 3,3^2,3^3など簡単な例ならやれるでしょうからやってみてください。 ダメなこと位すぐ分かりませんか? なので、全体でも書けないといえますね! 3のべき乗の3進数表現全体は正規表現や 9のべき乗の3進数表現全体は正規表現や 27のべき乗の3進数表現全体は正規表現 ... なら書けるでしょう。 一般に xのべき乗のx進数表現全体は正規表現や x^2のべき乗のx進数表現全体は正規表現や x^3のべき乗のx進数表現全体は正規表現 ... なら書けるでしょう。

noname#156238
質問者

お礼

御投稿ありがとうございます。 >ダメなこと位すぐ分かりませんか? >なので、全体でも書けないといえますね! 3のべき乗の2進数表現全体を正規表現で書く(あるいはそれを受理する有限オートマトンを作る)ことは出来ない、ということでしょうか。私の予想もそうなのですが、だとするとそれはどのように証明すればいいのでしょうか。 >一般に >xのべき乗のx進数表現全体は正規表現や >x^2のべき乗のx進数表現全体は正規表現や >x^3のべき乗のx進数表現全体は正規表現 >... >なら書けるでしょう。 xの0乗(のx進表現)=1、x倍する=x進で1桁上がる(0が1つ増える)、よってxのべき乗のx進数表現全体は正規表現10*で表せる、といった具合ですね。

関連するQ&A

  • 正規表現とDFAについて

    今回も正規表現のことについてなんですが@@; いきなりなのですが正規表現 1*((00)*+(11)*)と同じ言語を受理する 状態数最小の決定性有限オートマトンを構成せよという問題なのですが (1)まずこの正規表現が表しているのは初めに0個以上の1の列が続き その後に偶数個の0または1の列が続く、偶数個の0または1の列の後には 1もしくは0の列はこない。というような解釈でいいのでしょうか? (2)問題の解き方なのですが自分としてはまず非決定性有限オートマトン(NFA) を作りそれを決定性有限オートマトンに変換して求めると思っているのですが あっているのでしょうか? (3) (2)の解き方をするとまず状態遷移図を書きたいのですがなかなかうまくいきません。やはり慣れなどがあるのでしょうか?正規表現を見ただけですぐに状態遷移図が考えつかなく@@; それで自分なりにやってみたのですが状態遷移図は見にくいと思うので 状態遷移表みたいな感じで書きます。 初期状態はq0で最終状態はq3,q5にしています。 ※NFAからDFAに変換するための状態遷移表ではないです。  状態の集合  |  0   |  1  |        ------------------------------------------------     q0         空集合       [q0,q1]    q1       q2     q4    q2      q3  空集合    q3       q2  空集合    q4      空集合   q5    q5       空集合    q4 のような感じになったのですがなにか誤っているでしょうか? なかなかイメージがつかめなくて; なんか表示がヘンになるかもです。 長文、駄文ですみませんがよろしくお願いします<(__)>

  • 決定性有限オートマトンと正規表現

    現在オートマトンの勉強をしていますが,どうしても分からない問題がありました. 決定性有限オートマトンについて,初期状態,受理状態共にp,入力信号を0,1とする. 状態遷移表が以下の時,受理する言語を表す正規表現を求めよ.   0 1 p | p r q | p r r | q r 答え (0*11*0(11*0)*0)*0* という問題なのですが,状態消去法で自分でやってみても全然この答えになりません. ちなみに自分の解答は (0*1(1+01)*00)*0* となりました. ご教授よろしくお願いします.

  • 正規数と素因数分解に関する証明問題

    正規数と素因数分解に関する証明問題です。 xが正規数(1/xが60進有限小数) ⇔x=2^a3^b5^cと素因数分解できる xが正規数(1/xが12進有限小数) ⇔x=2^a3^bと素因数分解できる 以上2題の証明がどうしてもわかりません。 わかる方、教えてください。

  • 正規表現にて文字数をチェックするには?

    正規表現にて、入力した文字列が、 (1)アルファベットABC、 および (2)「'」(アポストロフィ)から始まるアルファベットDEF で構成された文字列で、文字列の長さが1~10の範囲にあるかどうかを検査する正規表現を作成しようとして難航しています。 以下だと、「アポストロフィ+文字」の二文字が10回繰り返しで20文字の場合もtrueになります。 とにかく全体で10文字以内かどうかを検査する正規表現の書き方をご存じの方、教えてください。 /(([A-C]|'[D-F]){1,10})/

  • 正規表現を入力するとオートマトンを出力するプログラム

    大学の授業の課題で正規表現を入力するとオートマトンを出力するプログラムを書け、またはどのようなプログラムを作れば良いか説明せよ。という問題がでて困っています。 担当者の先生に質問したところ、参考書におおまかなプログラムの流れが載っていると言っていました。 その後、図書館などに行って調べたのですがオートマトンの定義や正規表現とはどういうものという感じのことしか書いてない本が多く、どのようなプログラムを作ればよいか全然わかりません。 やはり和書にはそのような本はないのでしょうか? アドバイスやおすすめの本があったらおねがいします。

  • Perl 正規表現に関して

    現在Perlにて正規表現を用い,アクセス者のログが納めてあるlog.datからデータを検索し集計するといったアルゴリズムです. ところが正規表現を用いたのは良いものの,アルファベット以外をパターンとして使用したとき,データを呼び出すどころか表示されない状況に陥ってしまいました. elsif($referer =~ /abcd/i) { $word2 = "abcd"; } 上記のコードは,パターンがアルファベットで構成されているため,正常にシステムが動作します. elsif($referer =~ /あいうえ/i) { $word2 = "あいうえ"; } しかし,上記のコードはパターンが平仮名で構成されているため,冒頭で記している問題が発生してしまいます. そこで (1)パターンにアルファベット以外のものは使えるのか. (2)パターンにアルファベット以外のものを使いたいときはどうすればいいのか. についてお教えください. また正規表現のほかに,文字列を検索し,頻度をカウントすることに長けているコードがございましたらお教え願います. 以上の内容で不明な点等ございましたら随時対応致します. 宜しくお願いします.

    • ベストアンサー
    • Perl
  • 0.5×10^-3を正規化

    正規化というものを習ったのですがよくわからず問題をといていたら10進数の0.5×10^-3(0.0005)を正規化せよという問題がありました。そこでこれを2進数表現しようと思ったらどうもできないので、教えてもらいたいです。 どうかよろしくお願いします。

  • オートマトン

    (1)決定性有限オートマトンが与えられているとき、Mによって受理される言語L(M)が存在しないかどうかを判定するアルゴリズムを与え、その正当性について議論せよ (2)Σを有限の入力アルファベットとする。2つの決定性有限オートマトンM1=(Q1,Σ,δ1,q1,F1)とM2=(Q2,Σ,δ2,q2,F2)が入力として与えられたとき、L(M1)がL(M2)に含まれるか否かを判定するアルゴリズムは存在するか。存在するならアルゴリズムの概要を書け。存在しなければそのことを証明せよ。 という問題の解答が分かりません。 どなたか教えてください。

  • 有限オートマトン

    有限オートマトンの問題で, 「任意の有限オートマトンAとBについて, T(A)=T(B)が成立するかどうかを判定できるか. ただしT(A),T(B)とは有限オートマトンA,Bが それぞれ認識する言語のことである.」 というのがあるのですが,まったく方針がたたなくて 困っています.どなたかよろしくお願いします.

  • オートマトンと形式言語

    オートマトンの問題で受理される語をどう答えていいかわかりません 状態変異図を見て判断するんですか? 例えば下の有限オートマトンによって受理される言語L(M)を示せ という問題では答えはL(M)={ω∈{a}*|ωは3の倍数個のaからなる 語}になります。