補題:任意のブール方程式の解き方
初期seedから日時を求める無謀な挑戦 - Plus Le Toolのための補題。
使う記号の定義は[id:plusletool:20130427:p2]参照。
論理式(=ブール関数)の連立方程式の解き方。
ブール代数の方程式に関する資料はなぜかかなり少ないけど、ようやく見つけた。それも2つも。
(★1)
- Kyoto University Research Information Repository: ブール方程式によるシーケンス・ペアの拡張 (情報科学と函数解析の接点 : これまでとこれから)
- CiNii 論文 - ブール方程式によるシーケンス・ペアの拡張 (情報科学と函数解析の接点--これまでとこれから 研究集会報告集)
(※どちらも同じです。)
1つ目は9年前の論文。1変数のブール方程式の解の公式が書かれてた。
残念ながら多変数のブール方程式の解の公式には触れられていなかった。
(★2)
(※どちらも同じです。)
2つ目は49年前の論文。1変数と多変数のブール方程式の解の公式が書かれてた。
論文(★1)より少し読みにくいのが難点。
コンピュータがあったかなかったか分からんような時代の論文でブール代数を扱ってるのに驚き。
さっそく1つ目の論文(★1)から見てみよう。
最初に関連部分を(記号をこの記事の表記法に修正して)引用しておく。
(*1)論文(★1)P.5 命題5
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件が満たされるとき、解は である。
(*2)論文(★1)P.5 命題6
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件が満たされるとき、解は である。
まず(*2)についてだが、(*2)の方程式の左辺は次のように変形できる。
(*3)
(左辺)
この形の式には(*1)を適用できるので、(*1)についてだけ考えれば充分である。
次に(*1)について考える。
一般には、方程式は次のように両辺に式がある形になっている。
(*4)
右辺の を左辺に移項する(つまり、両辺に を する)ことで、右辺を0にすることができる。
(*5)
左辺を とおけば、 の形の方程式にすることができる。
(*6)
ここで、左辺をシャノン展開により積和標準形で表す。
(*7)
, とおくことで、(*1)の方程式と同じ式を得る。
(*8)
よって、(*1)を書き直すと次のようになる。
(*1)再掲
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件が満たされるとき、解は である。
(*9)1変数のブール方程式の解の存在条件と解の公式
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件が満たされるとき、解は である。
(*9)は任意の で成り立つ。
次に論文(★2)を見ていくが、ただし前提分野が異なる(?)上に古い論文のため少し読みづらい。
なので、自分なりの解釈を加えて使いやすい式に変形していこうと思う。
とりあえずまずは関連部分をそのまま引用しておく(記号だけこの記事の表記法に統一した)。
(*10)論文(★2)P.16 第4章〔定理〕
1元方程式 が可解であるための必要十分条件は であり、
根の公式は 、
根の個数は である。
(*11)論文(★2)P.24 第5章〔定理〕
元方程式 が可解であるための必要十分条件は であり、
根の公式は
、
根の個数は である。
表現が古臭いので翻訳。
- 「根」は「解」と同じ意味。(厳密には違うんだけど細かいことは気にしない。実はよく分かってないだけなんてナイショ。)
- 「可解である」は「解をもつ」の意味。これは第4章の最初(P.15)にも書いてある。
- 「」は、「集合 のカージナル数」と定義されている(P.13 第3章)。
カージナル数ってのは要素数のことだと思えばいい。
よって「 のとき 、 のとき 」である。
あるいは をbool型整数でなく普通の整数とみなせば、単に「 」となる。 - 「」は“ξ”(グザイ)。手書きレポートで書きたくない文字ランキング万年ワースト1。
全然関係ないけど、“ξ”の大文字“Ξ”の筆記体が「Z」を縦に2個重ねたもの(のこぎりの歯みたいな形)なので、それを意識するときれいに“ξ”が書ける。 - 「」は「」を略記したもの。これは第3章の直前(P.11)に書いてある。
つまり、すべての の組み合わせについての の総和(総論理和)を表す。- 明記はされてないけど、「」も同様の定義。のはず。
- 式を見れば分かるように、 は および媒介変数 の関数である。
よって にそれぞれ解の公式を代入して消去すれば、 は媒介変数 の関数となる。
これらの翻訳を使って(*10)(*11)を書き換えるのだが、その前に解の公式部分を少し変形しておく。
まず(*10)から。
解の存在条件 を満たすとき、解の公式 は次のように変形できる。
(*12)
これにより、(*10)は(*13)のように書き換えられる。
(*10)再掲
1元方程式 が可解であるための必要十分条件は であり、
根の公式は 、
根の個数は である。
(*13)1変数のブール方程式の解の存在条件と解の公式
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件を満たすとき、解は を満たす媒介変数 を使って次のように表される。><
(※好みの問題で関数名は小文字に変更した。)
(※解の個数は不要なので省略した。)
なお、(*13)は表現が異なるだけで(*9)と同値である(当たり前だが)。
(*9)再掲
に関するブール方程式 が解をもつための必要十分条件は である。
また、この条件が満たされるとき、解は である。
【簡易証明】
- (*13)⇒(*9)
- (*9)⇒(*13)
の各組み合わせについて実際に代入して計算すればいい。……正直に言うと、いい証明が思い浮かばなかったorz
次に、多変数方程式の解の公式(*11)について考える。
次のような 個の変数 に関する 本の連立方程式を考える。
(*14)
それぞれ右辺を移項すると、
(*15)
ところで、次の2つは同値である。
(*16)
- かつ かつ …… かつ
よって を次のように定義すれば、(*15)は の形の1本の方程式にすることができる。
(*17)
このように、任意の連立方程式は1本の方程式に書き換えることができるので、その方程式に対して(*11)を適用すればいい。
(*11)再掲
元方程式 が可解であるための必要十分条件は であり、
根の公式は
、
根の個数は である。
(*11)は(個人的に)分かりにくいので、少し書き換えさせてもらおう。
(*18)n変数のブール方程式の解の存在条件と解の公式
ブール方程式 が解をもつための必要十分条件は である。
また、この条件を満たすとき、解は媒介変数 を使って次のように表される。ただし、
><
(※好みの問題で関数名は小文字に変更した。)
(※解の個数は不要なので省略した。)
(※式中の は に含まれる 個の値の組を表し、 は の第 成分を表す。つまり、 である。)
変数の場合を考えるのは難しいので、具体例を見てみよう。
まず1変数の場合から。
関数 について、1変数方程式 を考える。
解の存在条件は である。
このとき、 を満たす を使って、解は と表せる。
を使って整理すると、次のようになる。
(*19)
1変数方程式 について、
- 解の存在条件
- 解
ただし、
次に2変数の場合。
関数 について、2変数方程式 を考える。
解の存在条件は である。
このとき、 および を満たす を使って、解は および と表せる。
計算がややめんどうだが、整理すると次のようになる。
(*20)
2変数方程式 について、
- 解の存在条件
- 解
ただし、
もう1例、3変数の場合も見てみる。
関数 について、3変数方程式 を考える。
解の存在条件は である。
このとき、 , および を満たす を使って、解は , および と表せる。
計算がかなりめんどうだが、整理すると次のようになる。
(*21)
3変数方程式 について、
- 解の存在条件
- 解
ただし、
このように、うまく再帰的に定義できそうな形の式が並んでるのにいざ式にしようとするとうまく表せない、みたいな結果になる。
の式から を消去するとかえって複雑になるようなので、無理に消去しないほうがいいのかもしれない。
ともかく、これで任意のブール方程式について解の存在条件と解の公式が得られた。
次に考えることはこれをどう実装するかだが、それはまたの機会に。
(まだ考え中、とも言う。)