2. 表現・意味・対象 (1)
0
B
B
B
B
B
B
B
B
@
1 27
2 12
3 95
...
...
...
...
99 87
1
C
C
C
C
C
C
C
C
A
0
B
B
B
B
B
B
B
B
@
2 12
51 19
1 27
...
...
...
...
3 95
1
C
C
C
C
C
C
C
C
A
データ空間
Denotation (意味)
for(i = 0; i < n - 1; i++) {
for(j =i+1; j <n ; j++) {
if (x[j]<x[i]){t = x[j];x[j] = x[i];x[i]= t;}
}
}
プログラム
Expression(表現)
• 成績処理
• 商品管理
• 工作機械
• その他
Target (対象)
研究者
実装作業・製作作業
研
究
対
象
3. 表現・意味・対象 (2)
0
B
B
B
B
B
B
B
B
@
1 27
2 12
3 95
...
...
...
...
99 87
1
C
C
C
C
C
C
C
C
A
0
B
B
B
B
B
B
B
B
@
2 12
51 19
1 27
...
...
...
...
3 95
1
C
C
C
C
C
C
C
C
A
データ空間
Denotation (意味)
for(i = 0; i < n - 1; i++) {
for(j =i+1; j < n; j++) {
if (x[j]<x[i]){t = x[j];x[j] = x[i];x[i]= t;}
}
}
プログラム(証明)
Expression(表現)
• 成績処理
• 商品管理
• 工作機械
• その他
Target (対象)
研究者
研究対象
Target (モデルのひとつ)
数学基礎論
証明論・計算理論
ソフトウェア工学
形式仕様記述・ソフトウェア検証
4. 表現・意味・対象 (3)
0
B
B
B
B
B
B
B
B
@
1 27
2 12
3 95
...
...
...
...
99 87
1
C
C
C
C
C
C
C
C
A
0
B
B
B
B
B
B
B
B
@
2 12
51 19
1 27
...
...
...
...
3 95
1
C
C
C
C
C
C
C
C
A
データ空間
Denotation (意味)
for(i = 0; i < n - 1; i++) {
for(j =i+1; j <n>; j++) {
if (x[j]<x[i]){t = x[j];x[j] = x[i];x[i]= t;}
}
}
プログラム(証明)
Expression(表現) 研究者
研究対象
Target (モデルのひとつ)
数学基礎論
証明論・計算理論
ゲーデルの不完全性定理
• Expressionも数学的対象物だが
ゲーデルは自然数 N (因数分解)だけを使った.
• Expressionに文字列Σ*, 数式表現, グラフ構造を
用いたら不完全性定理の証明そのものは簡単になる
• 証明が簡単になっても定理(結果)は変わらない
• 一方, 簡単に証明出来る仕組み(文字列や木構造)を
考えたら別の詳細な定理(結果)を導けるかもしれない
9. 命題論理の簡単な証明 (1)
Coq で Lemma lm1: (P->(Q->R))->((P->Q)->(P->R)).
を考えます.
f : P -> Q -> R
g : P -> Q
p : P
============================
R
============================
(P -> Q -> R) -> (P -> Q) -> P -> R
move => f g p. (仮定(証明)に名前をつける操作)
10. • f は P と Q の元から R の元を計算する関数
• g は P の元から Q の元を計算する関数
• p は P の元
Rの元を計算するプログラム(関数)を完成させたい
f : P -> Q -> R
g : P -> Q
p : P
============================
R
Curry-Howard対応の
プログラム(関数)側でゴールを見る
11. Curry-Howard対応の
命題と証明側でゴールを見る
f : P -> Q -> R
g : P -> Q
p : P
============================
R
• P, Q, R は命題, f, g , p はその証明に対する名前です.
• (f, g, pの名前のついた)これらの命題が解けているとき,
これらの証明の組合せで R が解けるのではないかと考えます.
(注) 数理論理学では成立する命題そのものを考えて行きますので, f, g, pなどの
名前を考えることは殆どありません. しかし, 既存の証明から新しい証明を構成
するという考え方では既存の証明に名前を付けないと語ることが出来ません.
12. 命題論理の簡単な証明 (2)
Coq で Lemma lm1: (P->(Q->R))->((P->Q)->(P->R)).
を考えます.
f : P -> Q -> R
g : P -> Q
p : P
============================
R
No more subgoals.
apply (f p (g p)). (Rを計算する関数を指定)
示すべくゴールがなくなり, 証明終わり.
(注意) Coqでは(f x y) が f(x)(y) を意味し, (g x) が g(x)を意味します.
13. 命題論理の簡単な証明 (3)
f : P -> Q -> R
g : P -> Q
p : P
============================
R
============================
(P -> Q -> R) -> (P -> Q) -> P -> R
move => f g p. (仮定と結論に分ける操作)
Coq で Lemma lm1: (P->(Q->R))->((P->Q)->(P->R)).
を考えます. 今度は逐次的に証明してみます.
14. 命題論理の簡単な証明 (4)
f : P -> Q -> R
g : P -> Q
p : P
============================
R
apply f.
2 subgoals, subgoal 1 (ID 16)
f : P -> Q -> R
g : P -> Q
p : P
============================
P
!
subgoal 2 (ID 17) is:
Q
Goal(R)を導く証明(f)
を適用してみるとCoq
は, そのために証明しな
いといけない別のGoal
を列挙してくれる.
人間はその新しいGoal
たちを証明する.
15. 命題論理の簡単な証明 (5)
1 subgoals, subgoal 1 (ID 17)
f : P -> Q -> R
g : P -> Q
p : P
============================
Q
apply p.
2 subgoals, subgoal 1 (ID 16)
f : P -> Q -> R
g : P -> Q
p : P
============================
P
!
subgoal 2 (ID 17) is:
Q
16. 命題論理の簡単な証明 (6)
1 subgoals, subgoal 1 (ID 17)
f : P -> Q -> R
g : P -> Q
p : P
============================
Q
apply g.
1 subgoals, subgoal 1 (ID 18)
f : P -> Q -> R
g : P -> Q
p : P
============================
P
17. 命題論理の簡単な証明 (7)
apply p.
1 subgoals, subgoal 1 (ID 18)
f : P -> Q -> R
g : P -> Q
p : P
============================
P
No more subgoals.
Qed.
lm1 is defined
最後にQedを入れて証明を完成する.
18. 命題論理の簡単な証明 (8)
Print lm1 .
lm1 = !
fun (f : P -> Q -> R) (g : P -> Q) (p : P) => f p (g p)!
: (P -> Q -> R) -> (P -> Q) -> P -> R!
lm1 is defined
完成された証明(関数プログラム)は
Printで確認出来る.
(注) lm1 は関数名, もとい, 証明の名前!
逐次的に操作した結果として (f p (g p)) が構成されている
19. 論理演算子を含む証明 (1)
Coq で Lemma lm2: ((P/Q)->R))->((P/Q)->R).
を考えます.
f : P / Q -> R
pq : P / Q
============================
R
============================
(P / Q -> R) -> P / Q -> R
move => f pq. (仮定(証明)に名前をつける操作)
Curry-Howard同型対応では論理和 P/QはPとQの直和P+Q,
論理積 P/QはPとQの直積 P Qと考える.
直和(colimit)には挿入関数 or_introl: P→P+Q,
直積(limit)には射影関数 proj1: P Q→Pなどがある.
20. 論理演算子を含む証明 (2)
f : P / Q -> R
pq : P / Q
============================
R
apply (f (or_introl (proj1 pq)).
(備忘録) or_introl: P -> P/Q, proj1: P/Q -> P.
No more subgoals.
読みが深い人は1行で証明出来る.
21. 論理演算子を含む証明 (3)
f : P / Q -> R
pq : P / Q
============================
R
elim pq. (/の記号が見えたら試してみたい!)
move => p q. (増えた仮定に名前をつける)
apply f.
left. (/のどちらかを使うとき試してみたい!)
apply p.
No more subgoals.
読みが深くなくてもCoqのコマンドで逐次証明出来る.
23. 有限オートマトンの例 (1)
関数 : Q Q は, q Q, x , w に対して,
(q, ) = q,
(q, xw) = ( (q, x), w),
とすることで, 自然に : Q Q に拡張することが出来る. Coq で を d
と書くとき, を (dstar d) で定義したとする.
このとき, q Q, u, v に対して, 次の補題 dstarLemma
(q, uv) = ( (q, u), v)
を証明したい.
Lemma dstarLemma :
forall d : State -> Symbol -> State,
forall q :State, forall u v : string,
(dstar d q (u ++ v)) = (dstar d (dstar d q u) v).
24. 有限オートマトンの例 (2)
Lemma dstarLemma :
forall d : State -> Symbol -> State, forall
q :State, forall u v : string,
(dstar d q (u ++ v)) = (dstar d (dstar d q u) v).
Proof.
move => d q u v; move :q; elim :u.
by [].
move => a s H q0.
simpl.
by rewrite H.
Qed.
25. 出来上がった証明(関数プログラム)を見る
dstarLemma = !
fun (d : State -> Symbol -> State) (q : State) (u v : string) =>!
(fun!
_evar_0_ : (fun s : string =>!
forall q0 : State,!
dstar d q0 (s ++ v) = dstar d (dstar d q0 s) v) "" =>!
(string_ind!
(fun s : string =>!
forall q0 : State, dstar d q0 (s ++ v) = dstar d (dstar d q0 s) v)!
_evar_0_)^~ u) (fun q0 : State => erefl (dstar d (dstar d q0 "") v))!
(fun (a : ascii) (s : string)!
(H : forall q0 : State, dstar d q0 (s ++ v) = dstar d (dstar d q0 s) v)!
(q0 : State) =>!
(fun!
_evar_0_ : dstar d (dstar d (d q0 a) s) v =!
dstar d (dstar d (d q0 a) s) v =>!
eq_ind_r (eq^~ (dstar d (dstar d (d q0 a) s) v)) _evar_0_ (H (d q0 a)))!
(erefl (dstar d (dstar d (d q0 a) s) v))) q!
: forall (d : State -> Symbol -> State) (q : State) (u v : string),!
dstar d q (u ++ v) = dstar d (dstar d q u) v!
Print dstarLemma .
26. Rosenbergの結果の検証
Definition 1
Let M = (Q, , , q0, FM ) be an automaton.
Construct the sticker system M = (Q, , A, R) where
• = {(a, a) | a }, A = A1 A2, R = D F, k = |Q| 1,
• A1 = {(x, x, 0, 0) | x L(M), |x| k + 2},
• A2 =
k+1
i=1 {(xu, x, 0, 0) | x k+2 i
, u i
, (0, xu) = i 1},
• D =
k+1
i=1
k+1
j=1 {(( , , 0, 0), (xu, vx, 0, |v|)) | x k+2 i
, u i
,
v j
, (j 1, xu) = i 1}, and
• F =
k+2
i=1
k+1
j=1 {(( , , 0, 0), (x, vx, 0, |v|)) | x i
, v j
,
(j 1, x) = FM }.
Theorem 1 L( R
M1
) = L(M1).
赤の k + 2 の部分を k + 1 として構成したスティッカー系を
R
M と書くことにする. このとき, 要求する条件を満たさないこと,
具体的には以下の定理を Coq で検証した.