annotate a09/lecture.ind @ 406:a60132983557

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 08 Nov 2023 21:35:54 +0900
parents a3fb231feeb9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 -title: Turing Machine
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Turing Machine は無限長のテープを持つAutomatonである。これは、stack を二つ持つ Automaton として構成できる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 <a href="../agda/turing.agda"> turing.agda </a>
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 テープへの操作は、書き込みと移動である。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 data Write ( Σ : Set ) : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 write : Σ → Write Σ
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 wnone : Write Σ
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 data Move : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 left : Move
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 right : Move
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 mnone : Move
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 Turing machineは状態と入力で、このコマンド二つを選択する。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
20 record TM ( Q : Set ) ( Σ : Set )
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 field
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
23 automaton : Automaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
24 tδ : Q → Σ → Write Σ × Move
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 tnone : Σ
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
26 taccept : Q → List Σ → ( Q × List Σ × List Σ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
27 taccept q L = move1 (aend automaton) tnone (δ automaton) tδ q L []
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 書き込みと移動を二つのstack( List Σ)に対する関数として定義する。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 {-# TERMINATING #-}
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 move : (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 move q L [] = move q L ( tnone ∷ [] )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 move q [] R = move q ( tnone ∷ [] ) R
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 move q ( LH ∷ LT ) ( RH ∷ RT ) with tδ q LH
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 ... | nq , write x , left = ( nq , ( RH ∷ x ∷ LT ) , RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 ... | nq , write x , right = ( nq , LT , ( x ∷ RH ∷ RT ) )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ... | nq , write x , mnone = ( nq , ( x ∷ LT ) , ( RH ∷ RT ) )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 ... | nq , wnone , left = ( nq , ( RH ∷ LH ∷ LT ) , RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ... | nq , wnone , right = ( nq , LT , ( LH ∷ RH ∷ RT ) )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ... | nq , wnone , mnone = ( nq , ( LH ∷ LT ) , ( RH ∷ RT ) )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 {-# TERMINATING #-}
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 move-loop : (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 move-loop q L R with tend q
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 ... | true = ( q , L , R )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 ... | flase = move-loop ( proj₁ next ) ( proj₁ ( proj₂ next ) ) ( proj₂ ( proj₂ next ) )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 next = move q L R
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 {-# TERMINATING #-}
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 move0 : (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 move0 q L R with tend q
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 ... | true = ( q , L , R )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 move0 q L [] | false = move0 q L ( tnone ∷ [] )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 move0 q [] R | false = move0 q ( tnone ∷ [] ) R
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 move0 q ( LH ∷ LT ) ( RH ∷ RT ) | false with tδ q LH
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ... | nq , write x , left = move0 nq ( RH ∷ x ∷ LT ) RT
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ... | nq , write x , right = move0 nq LT ( x ∷ RH ∷ RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ... | nq , write x , mnone = move0 nq ( x ∷ LT ) ( RH ∷ RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 ... | nq , wnone , left = move0 nq ( RH ∷ LH ∷ LT ) RT
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 ... | nq , wnone , right = move0 nq LT ( LH ∷ RH ∷ RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 ... | nq , wnone , mnone = move0 nq ( LH ∷ LT ) ( RH ∷ RT )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 {-# TERMINATING #-}
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 taccept : List Σ → ( Q × List Σ × List Σ )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 taccept L = move0 tstart L []
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 --Turing Machine の例題
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 data CopyStates : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 s1 : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 s2 : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 s3 : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 s4 : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 s5 : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 H : CopyStates
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 Copyδ : CopyStates → ℕ → CopyStates × ( Write ℕ ) × Move
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 Copyδ s1 0 = (H , wnone , mnone )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 Copyδ s1 1 = (s2 , write 0 , right )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 Copyδ s2 0 = (s3 , write 0 , right )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 Copyδ s2 1 = (s2 , write 1 , right )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 Copyδ s3 0 = (s4 , write 1 , left )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 Copyδ s3 1 = (s3 , write 1 , right )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 Copyδ s4 0 = (s5 , write 0 , left )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 Copyδ s4 1 = (s4 , write 1 , left )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 Copyδ s5 0 = (s1 , write 1 , right )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 Copyδ s5 1 = (s5 , write 1 , left )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 Copyδ H _ = (H , wnone , mnone )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 Copyδ _ (suc (suc _)) = (H , wnone , mnone )
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
91 copyTM : TM CopyStates ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
92 copyTM = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
93 automaton = record { δ = λ q i → proj₁ (Copyδ q i) ; aend = tend }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
94 ; tδ = λ q i → proj₂ (Copyδ q i )
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 ; tnone = 0
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 } where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 tend : CopyStates → Bool
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 tend H = true
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 tend _ = false
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
101 Automaton と違って入力文字列はテープ(stack)上に置かれている。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
103 終了状態に遷移すると計算は終了する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
105 つまり入力と同時に計算が終了するとは限らない。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 -- Turing machine の停止問題
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 ---Universal Turing Machine
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 文字列 x を判定する Turinging machine tm(x) があるとする。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
114 record TM : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
115 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
116 tm : List Bool → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
117
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 tm はプログラムなので、文字列である。tm をその文字列とする。tm が Turing machine として x を受け入れるかどうかを判定するTuring machine
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
120 record UTM : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
121 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
122 utm : TM
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
123 encode : TM → List Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
124 is-tm : (t : TM) → (x : List Bool) → tm utm (encode t ++ x ) ≡ tm t x
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
126
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
127 を構成することができる。utm は引数をtとxの二つ持つが、encode t ++ x と結合した単一の文字列だと思えば単一引数になる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
128
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 utm は interpreter だと思えば良い。tm, utm は、停止してT/Fを返すか、停止しないかである。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
132 just true 受け入れない
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
133 ust false 受け入れる
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
134 nothing 止まらない
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
136 実際に utm を構成した例がある。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
138 <a href="../agda/utm.agda"> utm.agda </a>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
139
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
140 これには足りないものが結構ある。実際に utm は正しく動くのか? ( record UTM を構成できるのか?)
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 --Turinng Machine の停止性の判定
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 halt(tm,x) は、以下のように定義される。これはまだ、Turing machine であるとは限らない。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
146 record Halt : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
147 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
148 halt : (t : TM ) → (x : List Bool ) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
149 is-halt : (t : TM ) → (x : List Bool ) → (halt t x ≡ true ) ⇔ ( (just true ≡ tm t x ) ∨ (just false ≡ tm t x ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
150 is-not-halt : (t : TM ) → (x : List Bool ) → (halt t x ≡ false ) ⇔ ( nothing ≡ tm t x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
152 つまり、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
153
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 halt(tm,x) = 0 tm(x) が止まらない (halt が停止しない) (1)
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 halt(tm,x) = 1 tm(x) が止まる (2)
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
157 halt(tm+x) 自体は Bool 、つまり停止しないことはないとする。こういう Turing machine があったらどうなるだろうか?
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 --対角線論法
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 0,1 からなる無限長の文字列を考えよう。これを順に拾っていく。どんな順序で拾っても、自然数の範囲では拾い切れないことをしまそう。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 拾った順に、文字列を並べる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 00000000000000000000000000100000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 01000000000000000000000000001000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 01100000000000000000000000000100....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 01110000000000000000000000000010....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 01111000000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 01111100000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 01011100000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 行y列xの文字を v(x,y) とする。これは 0 か 1 である。上の文字列の対角線の要素は v(x,x) となる。以下の . が対角線要素になる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 .0000000000000000000000000100000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 0.000000000000000000000000001000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 01.00000000000000000000000000100....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 011.0000000000000000000000000010....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 0111.000000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 01111.00000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 010111.0000000000000000000000000....
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 1-v(x,x) を考えると、
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 1000001 ...
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 となる。この文字列は、最初に拾った文字列のどれとも、v(x,x)のところで異なる。つまり拾った文字列とは異なる文字列が必ず存在する。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 これは、順に取ってくるという方法では、無限長の文字列は尽くせないということを意味する。可算回と呼ぶ。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
197
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
198
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 --2^N
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 この無限長の文字列は、自然数Nから{0,1} の写像と考えられる。あるいは、自然数Nの部分集合に1、それ以外に0を割り振ったものである。これを 2^N と書く。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 自然数の部分集合全体
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 自然数から{0,1}への写像の全体
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 である。自然数に1対1対応する集合を可算集合という。これらの集合は可算集合ではないことが対角線論法からわかる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 この文字列の先頭に 0. を付けると、0から1 の実数を表す。実数の集合は可算集合でないことがわかる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 また、可算集合でなくても順序は持つこともわかる。実数などは非可算集合と呼ぶ。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
212 -- Agda による対角線論法
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
214 record HBijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
215 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
216 fun← : S → R
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
217 fun→ : R → S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
218 fiso← : (x : R) → fun← ( fun→ x ) ≡ x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
219
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
220 fiso→ : (x : S ) → fun→ ( fun← x ) ≡ x もあるのだが、ここでは使わない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
221
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
222 diag : {S : Set } (b : HBijection ( S → Bool ) S) → S → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
223 diag b n = not (fun← b n n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
224
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
225 これで対角線部分の否定を采関数を定義する。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
227 diagonal : { S : Set } → ¬ HBijection ( S → Bool ) S
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
228 diagonal {S} b = diagn1 (fun→ b (diag b) ) refl where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
229 diagn1 : (n : S ) → ¬ (fun→ b (diag b) ≡ n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
230 diagn1 n dn = ¬t=f (diag b n ) ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
231 not (diag b n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
232 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
233 not (not fun← b n n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
234 ≡⟨ cong (λ k → not (k n) ) (sym (fiso← b _)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
235 not (fun← b (fun→ b (diag b)) n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
236 ≡⟨ cong (λ k → not (fun← b k n) ) dn ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
237 not (fun← b n n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
238 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
239 diag b n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
240 ∎ ) where open ≡-Reasoning
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
242 それに対して、HBijection ( S → Bool ) S があるとすると、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
243
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
244 not (diag b n) ≡ diag b n
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
246 となっている。証明の各段階を追ってみよ。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
247
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
248
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
249 --halt が tm ではあり得ないこの証明
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
250
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
251 halt の否定を考えよう。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
252
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
253 neg(tm) = 1 halt(tm,tm) が0 (3)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
254 neg(tm) = ⊥ halt(tm,tm) が1 (4)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
255
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
256 つまり、halt(tm,tm) が1 の時、つまり、tm(tm) が停止する時には、neg(tm) は停止しない。neg 自体は halt があればtmとして簡単に作れる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
257
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
258 neg(neg) = 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
259
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
260 かどうか調べよう。ここで 引数の neg は Turing machine neg を表す文字列である。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
261
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
262 まず、neg(neg) =1 と仮定する。(3) から、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
263
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
264 halt(neg,neg) が 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
265
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
266 なことがわかる。つまり、neg(neg) は停止しない。neg(neg) = ⊥ 。これは最初の仮定 neg(neg)=1に矛盾する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
267
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
268 逆に、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
269
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
270 neg(neg) = ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
271
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
272 とすると、(4) から、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
273
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
274 halt(neg,neg) = 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
275
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
276 つまり、neg(neg) は止まる。つまり、neg(neg)=1。これも矛盾。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
277
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
278 つまり、halt(tm,x) が⊥にならないようなものは存在しない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
279
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
280 つまり、Turinng machine が停止するかどうかを、必ず判定できる停止する Turing machine は存在しない。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
282 -- Agda での構成
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
283
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
284 Halt は languageなので、存在すれば UTM で simulation できることに注意しよう。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
285
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
286 Halt と UTM から HBijection (List Bool → Bool) (List Bool) を示す。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
288 TNL : (halt : Halt ) → (utm : UTM) → HBijection (List Bool → Bool) (List Bool)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
289
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
290 すると、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
291
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
292 TNL1 : UTM → ¬ Halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
293 TNL1 utm halt = diagonal ( TNL halt utm )
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
295 となる。TNL は以下のように構成する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
296
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
297 λ tm x → Halt.halt halt (UTM.utm utm) (tm ++ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
298
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
299 は (List Bool → Bool) → List Bool になっている。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
301 h1 : (h : List Bool → Bool) → (x : List Bool ) → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
302 h1 h x with h x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
303 ... | true = just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
304 ... | false = nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
305 λ h → encode utm record { tm = h1 h }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
306
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
307 は、List Bool → (List Bool → Bool である。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
308
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
309 これから、fiso← を導けば良い。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
311 TNL : (halt : Halt ) → (utm : UTM) → HBijection (List Bool → Bool) (List Bool)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
312 TNL halt utm = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
313 fun← = λ tm x → Halt.halt halt (UTM.utm utm) (tm ++ x)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
314 ; fun→ = λ h → encode utm record { tm = h1 h }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
315 ; fiso← = λ h → f-extensionality (λ y → TN1 h y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
316 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
317 open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
318 h1 : (h : List Bool → Bool) → (x : List Bool ) → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
319 h1 h x with h x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
320 ... | true = just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
321 ... | false = nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
322 tenc : (h : List Bool → Bool) → (y : List Bool) → List Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
323 tenc h y = encode utm (record { tm = λ x → h1 h x }) ++ y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
324 h-nothing : (h : List Bool → Bool) → (y : List Bool) → h y ≡ false → h1 h y ≡ nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
325 h-nothing h y eq with h y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
326 h-nothing h y refl | false = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
327 h-just : (h : List Bool → Bool) → (y : List Bool) → h y ≡ true → h1 h y ≡ just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
328 h-just h y eq with h y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
329 h-just h y refl | true = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
330 TN1 : (h : List Bool → Bool) → (y : List Bool ) → Halt.halt halt (UTM.utm utm) (tenc h y) ≡ h y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
331 TN1 h y with h y | inspect h y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
332 ... | true | record { eq = eq1 } = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
333 Halt.halt halt (UTM.utm utm) (tenc h y) ≡⟨ proj2 (is-halt halt (UTM.utm utm) (tenc h y) ) (case1 (sym tm-tenc)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
334 true ∎ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
335 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
336 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
337 tm (UTM.utm utm) (tenc h y) ≡⟨ is-tm utm _ y ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
338 h1 h y ≡⟨ h-just h y eq1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
339 just true ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
340 ... | false | record { eq = eq1 } = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
341 Halt.halt halt (UTM.utm utm) (tenc h y) ≡⟨ proj2 (is-not-halt halt (UTM.utm utm) (tenc h y) ) (sym tm-tenc) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
342 false ∎ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
343 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
344 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
345 tm (UTM.utm utm) (tenc h y) ≡⟨ is-tm utm _ y ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
346 h1 h y ≡⟨ h-nothing h y eq1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
347 nothing ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
348 -- the rest of bijection means encoding is unique
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
349 -- fiso→ : (y : List Bool ) → encode utm record { tm = λ x → h1 (λ tm → Halt.halt halt (UTM.utm utm) tm ) x } ≡ y
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
351 f-extensionality は関数の入出力がすべて一致すれば関数自体が等しいという仮定である。これは Agda では証明できない。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 Turing machine が停止するかどうかではなく、論理の真か偽か限定しても同じ問題がある。ただし、入力に自分自身を記述できる能力がある論理の場合である。自然数を使って論理自体を記述することができるので、自然数論を論理が含んでいるかどうかが、決定不能問題を含んでいるかどうかの鍵となる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
355 HBijection を使わずに diag1 を直接つかって証明することもできる。この場合は halt が UTM で simulation できること
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
356 から矛盾がでる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
357
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 --さまざまな決定不能問題
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 多くの問題は Turing machine の停止性に帰着できる。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 ディオファントス方程式
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
363 文脈依存文法の判定
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 Automaton を含む方程式
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365