2020 年度 数理論理学 講義資料 (4)
青戸 等人
(知能情報システムプログラ ム)目次
-
論理的同値性と 命題論理式の同値変形
-標準形と 標準形の構成
論理的同値性
定義
4.1. A, Bを 命題論理式と する . 任意の付値v につい て,
[[A]]v= [[B]]vと なる と き ,
AとBは論理的同値である といい,
A∼=Bと 書く .
命題論理式の論理的同値性は真理値表を 用いて チェッ ク でき る . 例
4.2. ¬(P∨Q)∼=¬P∧ ¬QP Q P∨Q ¬(P∨Q) ¬P ¬Q ¬P∧ ¬Q
T T T F F F F
T F T F F T F
F T T F T F F
F F F T T T T
1/33
演習
4.3.真理値表を 用いて ,
P→Q∼=¬Q→ ¬Pを 確かめよ . P Q P→Q ¬Q ¬P ¬Q→ ¬P T TT F F T F F
演習
4.4.(真理値表ではなく)
解釈の定義を 用いて ,
¬(P∧Q)∼=¬P∨¬Q
である こ と を 示せ.
2/33
演習
4.3.真理値表を 用いて ,
P→Q∼=¬Q→ ¬Pを 確かめよ . P Q P→Q ¬Q ¬P ¬Q→ ¬PT T T F F T
T F F T F F
F T T F T T
F F T T T T
演習
4.4.(真理値表ではなく)
解釈の定義を 用いて ,
¬(P∧Q)∼=¬P∨¬Q
である こ と を 示せ.
(解答例)
[[¬(P∧Q)]]v= T⇔[[P∧Q]]v= F
⇔[[P]]v= Fま たは[[Q]]v= F
⇔[[¬P]]v= Tま たは[[¬Q]]v= T⇔[[¬P∨ ¬Q]]v= T 3/33
注意! 注意! 注意!
=
と
∼=は異なる
“A=B”の意味は,
命題論理式
Aと 命題論理式Bはま ったく 同じ 形, と いう こ と .
一方,
“A∼=B”の意味は,命題論理式
Aと 命題論理式Bが論理的同値, と いう こ と . つま り ,
AとBの形は違っ てもよ い.
例.
P→Q∼=¬Q→ ¬Pではある が, P→Q6=¬Q→ ¬P(つま
り ,
P→Q=¬Q→ ¬Pではない).4/33
ト ート ロジー・ 充足可能性と 論理的同値性の関係 ト ート ロジー・ 充足可能性と 論理的同値性の間には以下 に示すよ う な関係がある . 証明は容易なので省略.
(1) Aがト ート ロジーかつA∼=B=⇒B
がト ート ロジー
Aが充足可能かつA∼=B=⇒Bが充足可能 (2) A∼=B⇐⇒A↔Bがト ート ロジー
(3) Aがト ート ロジー ⇐⇒A∼=⊤¬Aがト ート ロジー ⇐⇒A∼=⊥
5/33
重要な同値式 (1)
以下に重要な同値式を 示す.
A, B, . . .は任意の命題論理式を 表わす.
巾等律
A∧A∼=A A∨A∼=A交換律
A∧B∼=B∧A A∨B∼=B∨A A↔B∼=B↔A
結合律
(A∧B)∧C∼=A∧(B∧C) (A∨B)∨C∼=A∨(B∨C)
分配律
A∧(B∨C)∼= (A∧B)∨(A∧C) (A∨B)∧C∼= (A∧C)∨(B∧C) A∨(B∧C)∼= (A∨B)∧(A∨C) (A∧B)∨C∼= (A∨C)∧(B∨C)
6/33
吸収律
A∧(A∨B)∼=A A∨(A∧B)∼=A
ド ・ モルガン の法則
¬(A∧B)∼=¬A∨ ¬B
¬(A∨B)∼=¬A∧ ¬B
二重否定の法則
¬¬A∼=A
対偶
A→B∼=¬B→ ¬A
同値の法則
A↔B∼= (A→B)∧(B→A)
含意の法則
A→B∼=¬A∨B
7/33
重要な同値式 (2)
⊤
と
⊥に関する 以下のよ う な同値式も 重要.
⊥規則/⊤規則
A∧ ¬A∼=⊥ A∨ ¬A∼=⊤
¬⊤ ∼=⊥ ¬⊥ ∼=⊤ A∧ ⊥ ∼=⊥ A∧ ⊤ ∼=A A∨ ⊥ ∼=A A∨ ⊤ ∼=⊤ A→ ⊥ ∼=¬A ⊤ →A∼=A
8/33
論理的同値性の性質
定理
4.5.論理的同値性は命題論理式集合上の合同関係.
合同関係と は
(復習)同値関係(反射的, 推移的, 対称的な関係)で, さ ら に以 下を 性質を 満たす:
(1)A∼=B⇒ ¬A∼=¬B,
(2)A∼=BかつC∼=D⇒A∧C∼=B∧D,
(3)A∼=BかつC∼=D⇒A∨C∼=B∨D,
(4)A∼=BかつC∼=D⇒A→C∼=B→D,
(5)A∼=BかつC∼=D⇒A↔C∼=B↔D
(1)–(5)
は, 命題論理式のある 部分を 同値なも のに置き 替えて も , 全体が同値のま ま である こ と を 表わす.
9/33命題論理式の同値変形と は
論理的同値性が合同関係である こ と から , 論理的同値性 に同値変形を使う こ と が出来る . すでにわかっている 同値式
(本講義では, 資料で与えた「 重要な同値式」 と する)を 使っ て , 部分式を 変形し て 得ら れる も のは論理的同値になる .
例.
P∧Q ∼= ¬(P→ ¬Q). なぜなら ,¬(P→ ¬Q) ∼= ¬(¬P∨ ¬Q) (含意)
∼= ¬(¬(P∧Q)) (ド ・ モルガン)
∼= P∧Q (二重否定)
真理値表によ る チェッ ク は述語論理では適用が難し いが, 同 値変形は述語論理でも 使える .
10/33
演習
4.6.同値変形を 用いて 以下を 示せ.
(1)P∧Q∼=¬(¬P∨ ¬Q) (2)P→ ¬R∼=R→ ¬P (3)Q∧(Q→P)∼=P∧Q
11/33
(1) P∧Q ∼= ¬¬(P∧Q) (二重否定)
∼= ¬(¬P∨ ¬Q) (ド ・ モルガン)
(2) P→ ¬R ∼= ¬P∨ ¬R (含意)
∼= ¬R∨ ¬P (交換律)
∼= R→ ¬P (含意) (別解) P→ ¬R ∼= ¬¬R→ ¬P (対偶)
∼= R→ ¬P (二重否定) (3) Q∧(Q→P) ∼= Q∧(¬Q∨P) (含意)
∼= (Q∧ ¬Q)∨(Q∧P) (分配律)
∼= ⊥ ∨(Q∧P) (⊥規則)
∼= Q∧P (⊥
規則)
∼= P∧Q (交換律)
12/33
目次
-
論理的同値性と 命題論理式の同値変形
-標準形と 標準形の構成
∧ , ∨ の結合律・ 交換律と 括弧の省略
∧
や
∨の結合律よ り , 論理的同値性について 考え る 場合は,
(A1∧(A2∧A3))∧A4
や
A1∧((A2∧A3)∧A4)やA1∧(A2∧ (A3∧A4)))等は, 区別し ないで,
A1∧A2∧A3∧A4と 書 いてよ い. 本節ではこ のよ う な
∧同士,
∨同士の括弧を 省略 する .
定義
4.7. n≥1と する . (1)A1∧ · · · ∧Anを
Vni=1Ai
と 書く .
(2)A1∨ · · · ∨Anを
Wni=1Ai
と 書く . 特に
n= 1のと き , Vni=1Ai=Wn
i=1Ai=A1
と なる こ と に注意.
(n= 0のと き に, Vni=1Ai=⊤, Wn
i=1Ai=⊥
と おく こ と も ある が, こ こ では
n≥1と 約束する .
)13/33
論理積標準形と 論理和標準形 定義
4.8.(1)P
も し く は
¬Pの形の命題論理式を リ テラ ルと よ ぶ.
(こ こ で, P
は命題変数と する .
)(2) L11, . . . , L1n1, . . . , Lm1, . . . , Lmnm(n1, . . . , nm, m ≥ 1)
を リ テラ ルと し たと き ,
Vmi=1
Wni
j=1Lij
を論理積標準形
(CNF: conjunctive normal form)と よ ぶ.(3) L11, . . . , L1n1, . . . , Lm1, . . . , Lmnm(n1, . . . , nm, m ≥ 1)
を リ テラ ルと し たと き ,
Wmi=1
Vni
j=1Lij
を論理和標準形
(DNF: disjunctive normal form)と よ ぶ.
例.
(¬Q∨P)∧(R∨ ¬Q)∧(P∨Q∨R)はCNF.
(¬Q
|{z}L11
∨ P
|{z}L12
)∧( R
|{z}L21
∨ ¬Q
|{z}L22
)∧( P
|{z}L31
∨ Q
|{z}L32
∨ R
|{z}L33
)
14/33
演習
4.9.以下の命題論理式が論理積標準形である か, 論 理和標準形である か答えよ .
(1)(P∧Q)∨Q∨P (2)(P∨Q)∧(Q∨P∨Q) (3)¬(P∧Q)∨ ¬(Q∧P) (4)(¬¬P∧ ¬Q)∨ ¬P (5)(Q∨P)∧ ⊥ (6)((Q∨P)∧Q)∨P (7)P∨Q∨ ¬R (8)P∧Q∧ ¬R
15/33
演習
4.9.以下の命題論理式が論理積標準形である か, 論 理和標準形である か答えよ .
(1)(P∧Q)∨Q∨P
論理和標準形
(2)(P∨Q)∧(Q∨P∨Q)論理積標準形
(3)¬(P∧Q)∨ ¬(Q∧P)ど ち ら でも ない
(4)(¬¬P∧ ¬Q)∨ ¬Pど ち ら でも ない
(5)(Q∨P)∧ ⊥ど ち ら でも ない
(6)((Q∨P)∧Q)∨Pど ち ら でも ない
(7)P∨Q∨ ¬R論理積標準形かつ論理和標準形
(8)P∧Q∧ ¬R論理積標準形かつ論理和標準形
(7)は, 論理積標準形と し て みる と き は, P|{z}L11
∨ Q
|{z}L12
∨ ¬R
|{z}L13
と し て 考え
(m= 1と なる), 論理和標準形と し て みる と き は, P|{z}L11
∨ Q
|{z}L21
∨ ¬R
|{z}L31
と し て 考え
(m= 3, n1=n2=n3= 1と なる)と 考える .
16/33
標準形への同値変形 ( 標準化 )
同値変形に基づく 標準形への変換を 紹介する .
定理
4.10.任意の命題論理式
Aに対し て,Aと 論理的同値な論理積標準形が存在する . ま た,
Aと 論理的同値な論理和標準形が存在する .
例.
¬¬P∧Q→ ⊥∼= ¬¬P∧Q→P∧ ¬P (⊥規則)
∼= ¬(¬¬P∧Q)∨(P∧ ¬P) (含意)
∼= ¬¬¬P∨ ¬Q∨(P∧ ¬P) (ド ・ モルガン)
∼= ¬P∨ ¬Q∨(P∧ ¬P) (二重否定) · · ·DNF
∼= (¬P∨ ¬Q∨P)∧(¬P∨ ¬Q∨ ¬P) (分配律) · · ·CNF
17/33
(証明)Aと 論理的同値な論理積標準形・ 論理和標準形を 以下
のよ う にし て 構成する .
(Step 1)
適当な命題変数P を 選び,
⊥ ∼= P∧ ¬P,
⊤ ∼= P∨ ¬Pを 用いて ,
⊥,⊤を 消す.
(Step 2) A↔B∼= (A→B)∧(B→A)
を 用いて
↔を 消す.
(Step 3)A→B∼=¬A∨Bを 用いて→
を 消す.
(Step 4)¬(A∧B)∼=¬A∨ ¬B, ¬(A∨B)∼=¬A∧ ¬B
を 用いて ,
¬が,
∧や
∨の外側には出現し ないよ う にする .
(Step 5)¬¬A∼=Aを 用いて , 命題変数の外には¬が1つ以下し か出現し ないよ う にする .
[論理積標準形の場合]
(Step 6)(A∧B)∨C∼= (A∨C)∧(B∨C)
およ びC
∨(A∧B)∼= (C∨A)∧(C∨B)を 用いて ,
∨の内側に∧が出現し ないよ18/33
う にする .
[論理和標準形の場合]
(Step 6)(A∨B)∧C∼= (A∧C)∨(B∧C)
およ びC
∧(A∨B)∼= (C∧A)∨(C∧B)を 用いて ,
∧の内側に∨が出現し ないよう にする .
注意 : 論理式の形が適切な論理的同値式なら ば論理積(論理 和)標準形なので, 一般に命題論理式Aの論理積(論理和) 標 準形は
1つと は限ら ない.ま た, 上の計算の通り にやら ない で他の同値変形を 用いて 変形し て も よ い.
例えば,
P∧Qは論理積(論理和)標準形だが,
Q∧PもP∧Qの論理積
(論理和)標準形.
19/33
命題論理式の標準形
定義
4.11.命題論理式
Aと 論理的同値な 論理積標準形
を 命題論理式Aの論理積標準形と よ ぶ. 命題論理式Aと 論 理的同値な論理和標準形を 命題論理式Aの論理和標準形と よ ぶ.
演習
4.12.次の命題論理式の論理積標準形と 論理和標準
形を 求めよ .
(1)¬¬P→Q (2)(P→Q)→R→S20/33
(1) ¬¬P→Q
∼= ¬¬¬P∨Q (含意)
∼= ¬P∨Q (二重否定)· · ·
論理和標準形, 論理積標準形
(2) (P→Q)→(R→S)∼= (P→Q)→(¬R∨S) (含意)
∼= (¬P∨Q)→(¬R∨S) (含意)
∼= ¬(¬P∨Q)∨(¬R∨S) (含意)
∼= (¬¬P∧ ¬Q)∨(¬R∨S) (ド ・ モルガン)
∼= (P∧ ¬Q)∨ ¬R∨S (二重否定)· · ·
論理和標準形
∼= (P∨ ¬R∨S)∧(¬Q∨ ¬R∨S) (分配律)· · ·
論理積標準形
21/33
真理値表から の標準形の構成
すでに与えら れた命題論理式を 標準形に変換する 方法を 紹介し た. こ こ では, 標準形を 得る 別の方法と し て, 標準形 を そ の命題論理式の真理値表から 構成する 方法を 紹介する .
22/33
論理和標準形の構成法
¬(P→Q∧R)
を 例にと っ て 説明する .
(1)ま ず, 真理値表を 作る .
P Q R · · · ¬(P→(Q∧R))
T T T · · · F
T T F · · · T
T F T · · · T
T F F · · · F
F T T · · · T
F T F · · · F
F F T · · · F
F F F · · · F
23/33
P Q R · · · ¬(P→(Q∧R))
T T T · · · F
T T F · · · T
T F T · · · T
T F F · · · F
F T T · · · T
F T F · · · F
F F T · · · F
F F F · · · F
(2)
こ のと き ,
¬(P→Q∧R)が真と なる のは3通り . そ のそれぞれの場合について , 真なら そ の命題変数, 偽なら そ の 命題変数の否定を と っ たリ テラ ルの論理積を 考える .
24/33
P Q R · · · ¬(P→(Q∧R))
T T T · · · F
T T F · · · T
T F T · · · T
T F F · · · F
F T T · · · T
F T F · · · F
F F T · · · F
F F F · · · F
(2)
こ のと き ,
¬(P→Q∧R)が真と なる のは3通り . そ のそれぞれの場合について , 真なら そ の命題変数, 偽なら そ の 命題変数の否定を と っ たリ テラ ルの論理積を 考える .
P∧Q∧ ¬R
25/33
P Q R · · · ¬(P→(Q∧R))
T T T · · · F
T T F · · · T
T F T · · · T
T F F · · · F
F T T · · · T
F T F · · · F
F F T · · · F
F F F · · · F
(3)
得ら れた論理積の論理和を と る .
(P∧Q∧ ¬R)∨(P∧ ¬Q∧R)∨(¬P∧Q∧R)
こ の命題論理式は
Wi
V
jLij
の形になっ て おり , ま た, 同じ 真理値表を も つので, 元の命題論理式と 論理的同値. 従っ
て 論理和標準形.
26/33演習
4.13.次の命題論理式の論理和標準形を 真理値表か
ら 求めよ .
(1)P∨Q→P∧Q (2)¬(P→Q)∨P
P Q P∨Q P∧Q (P∨Q)→(P∧Q)
T T T T T
T F T F F
F T T F F
F F F F T
P Q P→Q ¬(P→Q) (¬(P→Q))∨P
T T T F T
T F F T T
F T T F F
F F T F F
27/33
(解答) (1)
P Q P∨Q P∧Q (P∨Q)→(P∧Q)
T T T T T
T F T F F
F T T F F
F F F F T
赤字の行に着目する と , 論理和標準形(P
∧Q)∨(¬P∧ ¬Q)が得ら れる .
(2)
紹介し た手続き に従う と , 論理和標準形(P
∧Q)∨(P∧¬Q)が得ら れる
(が, 真理値表から , P∼= (¬(P→Q))∨Pが確認でき る から , も っ と 簡単に, 論理和標準形と し て
Pを と っ ても よ い.
)28/33
論理積標準形の構成法
(P→Q)→Q∧ ¬Pを 例にし て 説明する . (1)ま ず, 真理値表を 構成する . 真理値表は
P Q · · · (P→Q)→(Q∧(¬P))
T T · · · F
T F · · · T
F T · · · T
F F · · · F
と なる .
(2)
論理和標準形のと き は, 与式が真と なる 行に着目し た.
論理積標準形の場合は与式が偽と なる 行に着目する . 与式
が偽と なる のは,
P∧Qが真の場合(1行目), ま たは,¬P∧¬Qが真の場合(4行目) である .
29/33P Q · · · (P→Q)→(Q∧(¬P))
T T · · · F
T F · · · T
F T · · · T
F F · · · F
(3)
従っ て , 与式が真と なる のは, こ れら のど ち ら でも な い場合, つま り ,
¬(P∧Q)∧ ¬(¬P∧ ¬Q)
と なる 場合である . こ れを ド ・ モルガン の法則と 二重否定 の法則で同値変形する と , 次の論理積標準形が得ら れる .
(¬P∨ ¬Q)∧(P∨Q)
30/33
演習
4.14.次の命題論理式の論理積標準形を 真理値表か
ら 求めよ .
(1)P∨Q→P∧Q (2)¬((¬P→Q)→P)
P Q P∨Q P∧Q (P∨Q)→(P∧Q)
T T T T T
T F T F F
F T T F F
F F F F T
P Q ¬P ¬P→Q ((¬P)→Q)→P ¬(((¬P)→Q)→P)
T T F T T F
T F F T T F
F T T T F T
F F T F T F
31/33
(解答) (1)
P Q P∨Q P∧Q (P∨Q)→(P∧Q)
T T T T T
T F T F F
F T T F F
F F F F T
赤字の行に着目する と ,
(¬((P∧ ¬Q)∨(¬P∧Q))から)論理 積標準形(
¬P∨Q)∧(P∨ ¬Q)が得ら れる .(2)
紹介し た手続き に従う と , 論理積標準形
(¬P∨ ¬Q)∧ (¬P∨Q)∧(P∨Q)が得ら れる(が, こ の場合は, Tと なる 行が1つし かないので, 論理和標準形の構成法で, 論理積標準 形かつ論理和標準形である
¬P∧Qが得ら れる).32/33
ま と め
•
命題論理式の同値変形 論理的同値性 重要な同値式
•
論理積標準形(CNF), 論理和標準形
(DNF)同値変形によ る 標準形への変換 真理値表にも と づく 標準形の構成法
33/33
補足資料
以下は, 特に興味のある 人へ, 関連する 発展的な話題の 紹介. 講義では取り 上げま せん.
目次 ( 補足資料 )
-
命題論理式の表現力と 命題結合子の完全性
- CNFへの充足可能性保存変換
- SATソ ルバを 用いた問題解決
命題論理式の表現力
n引数ブール関数に対応する 命題変数{P1, . . . ,Pn}
上の命
題論理式
Aは, 真理値表に基づく 論理和(積)標準形構成法
で構成でき る .
(1)2引数ブール関数をf
と する と , 対応する 真理値表は 以下のよ う になっ て いる はず.
P1 P2 · · · A
T T · · · f(T,T)
T F · · · f(T,F)
F T · · · f(F,T)
F F · · · f(F,F)
真理値表から の論理和(積) 標準形の構成には,
P1, . . . ,Pnの真理値と , 命題論理式全体の真理値の対応で充分.
34/33(2)
構成さ れた論理和
(積)標準形Aは, 同じ 真理値表を持つ. 従っ て ,
P1 P2 · · · A
T T · · · f(T,T)
T F · · · f(T,F)
F T · · · f(F,T)
F F · · · f(F,F)
つま り , 任意の付値
vについて ,
f(v(P1), . . . , v(Pn)) = [[A]]v.
以上の議論によ り ,
定理
4.15. fを 任意の
n引数ブール関数と する . こ のと き , f(v(P1), . . . , v(Pn)) = [[A]]vが任意の付値v について 成立す る よ う な命題論理式Aが存在する .
35/33
命題結合子の完全性
標準形は,
∧,∨,¬し か用いて いない. 従っ て , 以下の定理が成立する .
定理
4.16.任意の命題論理式Aに対し て,
∨,∧,¬のみを 命 題結合子に用いた命題論理式Bで,
A∼=Bと なる も のが存在する .
更に, 論理的同値式A
∧B∼=¬((¬A)∨(¬B))を 用いて変形する こ と が出来る ので, 次の結果も 成立する .
定理
4.17.任意の命題論理式Aに対し て,
∨,¬のみを 命題結合子に用いた命題論理式Bで,
A∼=Bと なる も のが存在 する .
36/33
前ページの定理が成立する こ と を「
{∨,¬}が完全である」と いう .
{∨,¬}の他に, {∧,¬}も 完全. 一方, {¬}
や
{∧,∨}は完全ではない.
演習
4.18. ∧,∨だけ し か用いて いないど の命題論理式とも 同値と はなら ない命題論理式を 与え , そ う なる 理由を 示 せ.
37/33
さ ま ざま な命題結合子
今ま で出て き た命題結合子
¬,∧,∨,→,↔,⊥,⊤と は異な る 命題結合子が使われる こ と がある . し かし ながら , 完全 性から 少なく て も
¬,∧等があればど のよ う な命題結合子であろ う と , そ れら を 等価な命題論理式の省略形と 考え て よ いこ と がわかる .
はいたて き
排他的論理和
(exclusive or), 記号: ⊕,+など . A B A⊕BT T F T F T F T T F F F
A⊕B∼= (A∨B)∧ ¬(A∧B)
38/33
否定的論理積
(negative and, NAND), 記号: |など .
A B A|BT T F T F T F T T F F T
A|B∼=¬(A∧B)
否定的論理和
(negative or, NOR), 記号: k,↓など .
A B AkBT T F T F F F T F F F T
AkB∼=¬(A∨B)
39/33
{⊕,¬}は完全ではない. 一方,{ | }およ び{ k }
は完全に なる .
演習
4.19. { | }およ び
{ k }が完全である こ と を 示せ.
演習
4.20.与えう る
2引数結合子cのう ちで,{c}が完全になる のは,
|およ び
kのみである . こ のこ と を 示せ.
40/33
目次 ( 補足資料 )
-
命題論理式の表現力と 命題結合子の完全性
-CNFへの充足可能性保存変換
- SATソ ルバを 用いた問題解決
標準形への変換の効率性
論理積標準形(CNF)に対する 効率的な充足可能性判定シ ステム
(SATソ ルバ)が開発さ れて いる . し かし ながら , 論 理的同値性に基づく 論理積標準形への変換や真理値表の構 成を 経由し た論理積標準形への変換は, 計算時間の観点か ら , 実際的でない.
し かし , 充足可能性を 保存する
CNFへの効率的な変換
(充足可能性保存変換)が知ら れて おり , SAT
ソ ルバで充足
可能性を 判定する 場合は, こ ち ら を 用いる .
(こ の変換は論理的同値性は保存し ない.
)41/33
論理積標準形への充足可能性保存変換
ア イ デア : 部分式を 新し い命題変数に対応さ せる . 例.
((P∧Q)∨R)の変換
(P∧Q)∨R (P∧Q)を 命題変数Nと おく
❀(N∨R)∧(N→(P∧Q))∧((P∧Q)→N)
❀(N∨R)∧((¬N)∨(P∧Q))∧((P∧Q)→N)
❀(N∨R)∧((¬N)∨P)∧((¬N)∨Q)∧((P∧Q)→N)
❀(N∨R)∧((¬N)∨P)∧((¬N)∨Q)∧(¬(P∧Q)∨N)
❀(N∨R)∧((¬N)∨P)∧((¬N)∨Q)∧((¬P)∨(¬Q)∨N)
つま り , 部分式P
∧QをNと 置き 換える と と も に,(P∧Q)と
Nの同値性を 示す式(あら かじ め, こ の式自体もCNFにして おく
)を 追加する .
42/33以下で,
{P 7→B}(A)はA中の命題変数Pを すべて
Bに置き 替える 操作を 表わす.
定理
4.21. A, Bを命題論理式,
Pを命題論理式Bに出現し
ない命題変数と する . こ のと き ,
{P 7→B}(A)が充足可能
⇔A∧(P↔B)が充足可能.
(証明) (⇒) {P 7→ B}(A)
が充足可能と する . こ のと き ,
[[{P 7→ B}(A)]]v = Tなる 付値v が存在する . こ のと き ,
v′(P) = [[B]]v,
P 6= Qなる 全て の
Qについて
v′(Q) = v(Q)なる 付値
v′を 考え る .
Pが
Bに出現し ないこ と から ,
[[P]]v′ = v′(P) = [[B]]v = [[B]]v′が成立す る . よ っ て ,
[[A]]v′= Tと なる . よ っ て ,A∧(P↔B)も 充足可能. (⇐) [[A∧(P ↔ B)]]v = Tと する と
[[P]]v = [[B]]vである から ,
[[{P 7→ B}(A)]]v = [[A]]v. よ っ て ,
{P 7→ B}(A)も 充足可能.
43/33変換テーブル
N↔ ⊥ ⇔ (N→ ⊥)∧(⊥ →N)
⇔ ¬N
N↔ ⊤ ⇔ (N→ ⊤)∧(⊤ →N)
⇔ N
N↔(¬P) ⇔ (N→ ¬P)∧(¬P→N)
⇔ (¬N∨ ¬P)∧(P∨N) N↔(P∧Q) ⇔ (N→(P∧Q))∧((P∧Q)→N)
⇔ ((¬N)∨(P∧Q))∧(¬(P∧Q)∨N)
⇔ (((¬N)∨P)∧((¬N)∨Q))∧((¬P)∨(¬Q)∨N) N↔(P∨Q) ⇔ (N→(P∨Q))∧((P∨Q)→N)
⇔ ((¬N)∨(P∨Q))∧(¬(P∨Q)∨N)
⇔ ((¬N)∨P∨Q)∧(((¬P)∧(¬Q))∨N)
⇔ ((¬N)∨P∨Q)∧((¬P)∨N)∧((¬Q)∨N) N↔(P→Q) ⇔ · · ·
N↔(P↔Q) ⇔ · · ·
44/33
例.
(P1∧P2)∨(¬(P3∨P4))の変換 (P1∧P2)6∨(¬(P3∨P4)8)75
❀ P5∧(P5↔(P6∨P7))
∧(P6↔(P1∧P2))
∧(P7↔(¬P8))
∧(P8↔(P3∨P4))
❀ P5∧((¬P5)∨P6∨P7)∧((¬P6)∨P5)∧((¬P7)∨P5)
∧(P6∨(¬P1)∨(¬P2))∧((¬P6)∨P1)∧((¬P6)∨P2)
∧((¬P7)∨(¬P8))∧(P7∨P8)
∧((¬P8)∨P3∨P4)∧((¬P3)∨P8)∧((¬P4)∨P8)
45/33
演習
4.22.充足可能性保存変換が論理的同値性を 保存し
ないのはなぜか, 考えよ .
46/33
目次 ( 補足資料 )
-
命題論理式の表現力と 命題結合子の完全性
- CNFへの充足可能性保存変換
-SATソ ルバを 用いた問題解決
SAT ソ ルバ
命題論理式が与えら れたと き に, そ れが充足可能かど う かを 答え よ , と いう 問題を 充足可能性
(SAT)問題と いう . 充足可能性問題は,
NP完全問題. 従っ て , 効率的に解く のは困難.
SAT問題を(高速に)
解く ソ フ ト ウ ェ ア が研究・ 開発さ れ て いる . こ れら は
SATソ ルバと よ ばれる . (NP完全問題なので効率的には解けないが, 人の問題を 扱う 論理式の充足 可能性は高速に判定でき る こ と がよ く ある .
)ある 種の問題は,
SAT問題に帰着さ せる こ と で,SATソ ルバを 用いて 解く こ と が出来る .
SATソ ルバを 用いた問題解決の例を 学習する .
47/33
SAT ソ ルバの使用例
(P1∨P3∨ ¬P4)∧P4∧(P2∨ ¬P3)の充足可能性を 判定し て
みる .
%cat sample <---
入力フ ァ イ ルの表示
p cnf 4 31 3 -4 0 4 0 2 -3 0
%./minisat sample out <--- minisat
の実行
........
SATISFIABLE
%cat out <---
出力フ ァ イ ルの表示
SAT -1 2 3 4 0
48/33
DPLL ア ルゴリ ズム
多く の
SATソ ルバで用いら れて いる ア ルゴリ ズム
(以下は非常に単純化し たバージョ ン
)fun isSatisfiable
節集合S
=while
単位節
{L} ∈Sdo(* unit propagation *) Lを 含む節を
Sから 消去
S
中の,
Lを 含む節から
Lを 消去 ifS=∅then Trueelse if∅ ∈Sthen False
リ テラ ルL を
Sから
1つ選ぶ(* splitting *) if isSatisfiableS∪ {{L}}then True else if isSatisfiableS∪ {{L}}then True else False49/33
(参考) DPLLア ルゴリ ズムやSATソ ルバについて よ り 詳し
く 知り たい人には, 以下を 見る と よ い.
• John Harrison, Handbook of Practical Logic and Automated Reasoning, Cambridge University Press, 2009.
定理自動証明の話題を 広く 網羅し た数理論理学の教科書
• Filip Mari´c, Formalization and Implementation of Modern SAT Solvers, Journal of Automated Reasoning, Vol. 43, pp. 81–119, 2009.
近年のテク ニッ ク にも と づく
SATソ ルバの原理につい て の解説論文.
50/33
SAT ソ ルバを 使っ た問題解決の例 : n ク イ ーン 問題
nク イ ーン 問題:
n
×
nのマス上をQueenは縦, 横, 斜めに動く . こ のとき ,
Queen同士が取り 合わないよ う に, n個のQueenが置く こ と が出来る か?
Q Q
Q Q
Q
51/33
n ク イ ーン 問題の符号化 (1)
各マスのそ れぞれに命題変数を
1つ割り 当て る . P11 P12 · · · P1nP21 P22 · · · P2n
. . . . Pn1 Pn2 · · · Pnn
v(Pij) = T ⇐⇒ Queen
が第(i, j)マス乗っ て いる
v(Pij) = F ⇐⇒ Queenが第(i, j)マス乗っ て いない と 解釈し て ,
nク イ ーン 問題をSAT問題に符号化する .52/33
n ク イ ーン 問題の符号化 (2)
(A)
各行について , 同時に
2箇所に置かれる こ と はない^
i
^
j16=j2
¬(Pij1∧Pij2)
(B)
各列について , 同時に
2箇所に置かれる こ と はない^
j
^
i16=i2
¬(Pi1j∧Pi2j)
53/33
(C)
各斜めについて , 同時に
2箇所に置かれる こ と はない
_
i′−i=j′−j
¬(Pij∧Pi′j′)
∧
_
i′−i=j−j′
¬(Pij∧Pi′j′)
(D)
各行について ,
1箇所には置かれて いる^
i
_
j
Pij
n個のク イ ーン が置ける
⇐⇒
命題論理式(A)
∧(B)∧(C)∧(D)が充足可能54/33
プログラ ム例
(*
命題変数
*) val nvars = ref 0fun fresh () = (nvars := (!nvars) + 1; !nvars) (* CNF
への充足可能性保存変換
*)val cnf = ref [] : int list list ref fun conj xs =
let val y = fresh () in
((cnf p:= (y :: map (fn x => ~x) xs)
:: (map (fn x => [~y, x]) xs) @ (!cnf));
y) end ...
(* nク イ ーン 問題の制約*)
fun pvar col (i,j) = i * col + j + 1
(* col * col
以下はそれぞれのマ スに対応する 命題変数
*)55/33
fun constraintExist col = let fun constraintLine i =
disj (List.tabulate (col, fn j => pvar col (i,j))) in
conj (List.tabulate (col, fn i => constraintLine i)) end
...
fun nQueenConstraint col = let
val z = conj [ constraintExist col, constraintTate col, ....
] in
[z] :: !cnf end
fun nQueen col =
(nvars := col * col; cnf := [];
nQueenConstraint col)
56/33
テスト 例
%sml @SMLload=nqueen.x86-bsd 5 > 5.cnf <---
作成プロ グラ ム で
CNFを フ ァ イ ルに出力
%cat 5.cnf p cnf 690 1733 690 0
690 -31 -187 -343 -439 -504 -600 -689 0 -690 31 0
-690 187 0 -690 343 0 ....
%./minisat 5.cnf 5.out <--- SAT
ソ ルバ実行
....SATISFIABLE
%cat 5.out SAT
-1 -2 -3 -4 5 -6 -7 8 -9 -10 11 -12 -13 -14 -15 -16 -17 -18 19 -20 -21 22 -23 -24 -25 26 27 28 29 30 31 32 -33 34 -35 -36 37 -38 39 -40 41 42 43 44 45 46 47 48 49 50 -51 52 53 54 55 56 57 58 59 60 61 62 63 -64 65 -66 67 -68 69 -70 -71 ....
57/33
先頭の方の付値を 見る こ と で解がわかる .
Q Q
Q Q
Q
58/33