論理を使った問題解決法

.
亀山担当分
.
ソフトウェアサイエンス概論 I
–論理を使った問題解決法–
.
1 週目
論理パズル
論理を使った「問題」の形式化 (定式化)
2 週目
亀山幸義
数独パズル
論理を使った「問題」の解法
筑波大学情報科学類
3 週目
ソフトウェアの仕様と検証
論理を使った「問題」の記述
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
Y
Z
5
Y
9
1
Y
Y
Y
.
XZ XZ
7
Z
7
X
X
X
2
X
4
X
7
Z
8
8
6
6
7
2
6
X
2
7
5
Z
7
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
どうやって解くか?
数独 (SUDOKU)
4
亀山幸義
6
5
1
8
9
7
1
4
2
制約 (Constraints):
各行 (row) に 1-9 が 1 回ずつ現れる。(X=1,2,3,5,6,8,9) 各列
(column) に 1-9 が 1 回ずつ現れる。
(Y=2,3,6,7,8) 各
3*3 ブロッ –
亀山幸義
ソフトウェアサイエンス概論
I –論理を使った問題解決法
クに 1-9 が 1 回ずつ現れる。(Z=1,2,3,6,8,9)
Y
Y
A
Z
8
7
6
5
4
3
9
4
2
右上の 3*3 ブロックに着目する。
横方向の制約により、X には 7 がはいらない。
同様に、Y にも 7 がはいらない。
縦方向の制約により、Z には 7 がはいらない。
ブロックの制約により、A に 7 がはいる。
9
4
X
2
6
1
3
X
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
解き方の続き
4
解き方
7
7
5
2
6
8
2
7
9
1
6
1
6
5
7
B
B
8
7
きりがないのでやめます。
ともかく、このような推論を繰返すことにより解くことがで
きる。
命題論理
4
D
9
A ∧ B (and, かつ、論理積)
A ∨ B (or, または、論理和)
A ⇒ B (implication, ならば、含意)
¬A (not, でない、否定)
3
C
2
4
推論
右上で 4 がはいるのは 2 つの B のどちらか。
A ∨ B と ¬A から B を導く。
A ∨ B と A ⇒ C と B ⇒ C から C を導く。
そのどちらのケースでも右下の C に 4 は来ない。
よって右下では、D に 4 がはいる。
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
あらゆる解の候補
数独をコンピュータで自動的に解く
「解の侯補」をすべて生成して、解かどうかチェック
1. 解の候補を表そう。論理式 M(x, y , z)
81-22=59 個のマス目があいている。
959 通りの解侯補 (ほぼ 2 ∗ 1056 通り)。
例 1: あいているマスに全て 1 を入れる。
例 2: あいているマスに全て 1 を入れる。
例 3: 1 行目のあきマスに 1 をいれ、2 行目のあきマスに 2
を。。。
...
M(1, 1, 3): 「一番左上のマスに 3 がはいる」
M(3, 5, 7): 「3 行 5 列のマスに 7 がはいる」
M(x, y , n): 「x 行 y 列のマスに n がはいる」
1 ≤ x, y , z ≤ 9 なので 93 個の論理式。
それを論理式で表現してみよう
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
制約の表現
初期配置
2. 制約を論理式で表現しよう。
「x 行 y 列のマスには、1-9 のどれか 1 つだけ」
M(x, y , 1) ∨ M(x, y , 2) ∨ . . . ∨ M(x, y , 9).
M(x, y , 1) ⇒ (¬M(x, y , 2) ∧ . . . ∧ ¬M(x, y , 9)).
これを 1 ≤ x, y ≤ 9 のすべてに対して生成。
3. 初期配置を論理式で表現しよう。
「x 行には、1-9 が 1 回ずつ現れる」
「1 行 1 列のマスは 4 がはいっている」: M(1, 1, 4).
M(x, 1, 1) ∨ M(x, 2, 1) ∨ . . . ∨ M(x, 9, 1).
「1 行 4 列のマスは 7 がはいっている」: M(1, 4, 7).
M(x, 1, 2) ∨ M(x, 2, 2) ∨ . . . ∨ M(x, 9, 2).
「2 行 3 列のマスは 7 がはいっている」: M(2, 3, 7).
···
M(x, 1, 9) ∨ M(x, 2, 9) ∨ . . . ∨ M(x, 9, 9).
これを 1 ≤ x ≤ 9 のすべてに対して生成。
同様に、
「y 列には、1-9 が 1 回ずつ現れる」
「各小正方形には、1-9 が 1 回ずつ現れる」
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
どうやって解を求めるか?
全体は?
解の侯補と論理式の対応:
4. ここまでに出てきた条件の論理積 (∧) を作る。
1 つ 1 つの M(x, y , n) は、真か偽の値を取る.
(M(1, 1, 1) ∨ M(1, 1, 2) ∨ . . . ∨ M(1, 1, 9))
すべての M(x, y , n) に対して,それが真か偽かを決めると、
1 つの「解の候補」が決まる。
∧ (M(1, 1, 1) ⇒ (¬M(1, 1, 2) ∧ . . . ∧ ¬M(1, 1, 9)))
M(1, 1, 1)=true, M(1, 1, 2)=false, · · · . (割り当て)
∧ ...
本当の解:
論理式全体が true(真) になるような割り当て (解の侯補)
が,解
かなり大きな論理式。とても人間が読めた代物ではない。
が、解侯補たちの個数 (2 ∗ 1056 程度) に比べると、はるかに
小さい.
例:
M(1, 1, 3) ∧ (¬M(1, 2, 5)) を true にする割り当ての 1 つは,
M(1, 1, 3)=true, M(1, 2, 5)=false.
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
論理式の充足可能性
命題論理の充足可能性問題
充足可能 (satisfiable) とは?
質問: 命題論理の論理式が与えられたとき、充足可能性問題は高
速に解くことができるか?
(A ∨ B) ∧ (¬A ∨ ¬B) は充足可能。
A = true,B = false のとき、全体が true になる。
答: 命題論理式の充足可能性判定は、NP 完全問題!
(A ∨ B) ∧ (A ∨ ¬B) ∧ (¬A) は充足不能。
NP 完全問題は、NP 問題の中で解くのに最も時間のかかる
問題。
A,B に true/false をどう割り当てても、全体が true になら
ない。
NP 完全問題は、多項式時間 (ax n + bx n−1 + ... の形の式を多
項式という) では解けない、と信じられている。
充足可能とは、その論理式全体が真になるようなパターン (「割
当て」という) が、1 つ以上あるとき。
数独パズルの制約 (論理式) が充足可能なとき、数独パズルの
「解」が存在。
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
「P=NP」: 理論計算機科学における最大の未解決難問!
.
命題論理の充足可能性問題
命題論理の充足可能性問題 (SATisfiability Problem) を判定するソ
フトウェア。
入力: ある種の「標準形」の命題論理式
出力: 充足可能かどうか
出力のおまけ: 充足可能な場合は、具体的な割当て (解) を 1
つ与える。
SAT solver (充足可能性問題の解決器)
SAT competition: 世界最高速 SAT solver の競争。
標準形: Conjunctive Normal Form (CNF):
(A ∨ B ∨ · · · ) ∧ (C ∨ D ∨ · · · ) ∧ · · · の形の命題論理式
ただし、A, B, C , D, · · · は、命題変数、または、「命題変数の否
定」の形
SAT 界の オリンピック、ワールドカップ、F1 !
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
SAT solver
質問: 命題論理の充足可能性問題のうち、現実に現れる問題の多
くは高速に解くことができるか?
答: YES.
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
SAT solver は速い
今日のまとめ
論理を使った「問題」の定式化 (前回と今回)。
論理を使った「問題」の解法。
数独パズル (9*9) 程度であれば、瞬時に (ノート PC の CPU
で 1 秒未満で) 解ける。
SAT ソルバ: 命題論理における充足可能性 (SAT 問題) 判定。
2000 年を過ぎたあたりから、扱える論理式のサイズが急速に
増大.
コンピュータ・サイエンスにおける問題解決の典型
数式、論理式等を用いて「問題」を定式化・モデル化する。
今日、非常に多くの分野で利用されている。例: 情報システ
ムの検証法の 1 つである「モデル検査」。
その数式・論理式を、コンピュータを使って高速に解く。
ソルバ (solver): 何らかの世界での高速判定ソフトウェア。
おまけ: P と NP、NP 完全、P=NP 問題
.
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–
.
.
亀山幸義
ソフトウェアサイエンス概論 I –論理を使った問題解決法–