annotate automaton-in-agda/src/halt.agda @ 319:cd91a9f313dd

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 12 Jan 2022 21:20:16 +0900
parents 3fa72793620b
children 6f3636fbc481
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module halt where
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level renaming ( zero to Zero ; suc to Suc )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Nat
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
5 open import Data.Maybe
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.List hiding ([_])
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Nat.Properties
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Relation.Nullary
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Data.Empty
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Data.Unit
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
11 open import Relation.Binary.Core hiding (_⇔_)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Relation.Binary.Definitions
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Relation.Binary.PropositionalEquality
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open import logic
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
17 record HBijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 field
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 fun← : S → R
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 fun→ : R → S
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 fiso← : (x : R) → fun← ( fun→ x ) ≡ x
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
22 -- normal bijection required below, but we don't need this to show the inconsistency
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
23 -- fiso→ : (x : S ) → fun→ ( fun← x ) ≡ x
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
319
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
25 injection' : {n m : Level} (R : Set n) (S : Set m) (f : R → S ) → Set (n Level.⊔ m)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
26 injection' R S f = (x y : R) → f x ≡ f y → x ≡ y
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
27
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
28 open HBijection
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
30 diag : {S : Set } (b : HBijection ( S → Bool ) S) → S → Bool
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
31 diag b n = not (fun← b n n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
32
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
33 diagonal : { S : Set } → ¬ HBijection ( S → Bool ) S
174
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
34 diagonal {S} b = diagn1 (fun→ b (diag b) ) refl where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
35 diagn1 : (n : S ) → ¬ (fun→ b (diag b) ≡ n )
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
36 diagn1 n dn = ¬t=f (diag b n ) ( begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
37 not (diag b n)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ≡⟨⟩
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 not (not fun← b n n)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ≡⟨ cong (λ k → not (k n) ) (sym (fiso← b _)) ⟩
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
41 not (fun← b (fun→ b (diag b)) n)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 ≡⟨ cong (λ k → not (fun← b k n) ) dn ⟩
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 not (fun← b n n)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 ≡⟨⟩
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
45 diag b n
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 ∎ ) where open ≡-Reasoning
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
48 record TM : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
49 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
50 tm : List Bool → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
51
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
52 open TM
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
53
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
54 record UTM : Set where
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
55 field
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
56 utm : TM
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
57 encode : TM → List Bool
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
58 is-tm : (t : TM) → (x : List Bool) → tm utm (encode t ++ x ) ≡ tm t x
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
59
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
60 open UTM
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
61
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 open _∧_
173
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
63
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 open import Axiom.Extensionality.Propositional
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 postulate f-extensionality : { n : Level} → Axiom.Extensionality.Propositional.Extensionality n n
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
67 record Halt : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
68 field
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
69 halt : (t : TM ) → (x : List Bool ) → Bool
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
70 is-halt : (t : TM ) → (x : List Bool ) → (halt t x ≡ true ) ⇔ ( (just true ≡ tm t x ) ∨ (just false ≡ tm t x ) )
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
71 is-not-halt : (t : TM ) → (x : List Bool ) → (halt t x ≡ false ) ⇔ ( nothing ≡ tm t x )
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
72
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
73 open Halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
74
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
75 TNL : (halt : Halt ) → (utm : UTM) → HBijection (List Bool → Bool) (List Bool)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
76 TNL halt utm = record {
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
77 fun← = λ tm x → Halt.halt halt (UTM.utm utm) (tm ++ x)
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
78 ; fun→ = λ h → encode utm record { tm = h1 h }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
79 ; fiso← = λ h → f-extensionality (λ y → TN1 h y )
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
80 } where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
81 open ≡-Reasoning
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
82 h1 : (h : List Bool → Bool) → (x : List Bool ) → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
83 h1 h x with h x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
84 ... | true = just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
85 ... | false = nothing
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
86 tenc : (h : List Bool → Bool) → (y : List Bool) → List Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
87 tenc h y = encode utm (record { tm = λ x → h1 h x }) ++ y
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
88 h-nothing : (h : List Bool → Bool) → (y : List Bool) → h y ≡ false → h1 h y ≡ nothing
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
89 h-nothing h y eq with h y
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
90 h-nothing h y refl | false = refl
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
91 h-just : (h : List Bool → Bool) → (y : List Bool) → h y ≡ true → h1 h y ≡ just true
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
92 h-just h y eq with h y
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
93 h-just h y refl | true = refl
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
94 TN1 : (h : List Bool → Bool) → (y : List Bool ) → Halt.halt halt (UTM.utm utm) (tenc h y) ≡ h y
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
95 TN1 h y with h y | inspect h y
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
96 ... | true | record { eq = eq1 } = begin
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
97 Halt.halt halt (UTM.utm utm) (tenc h y) ≡⟨ proj2 (is-halt halt (UTM.utm utm) (tenc h y) ) (case1 (sym tm-tenc)) ⟩
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
98 true ∎ where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
99 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
100 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
101 tm (UTM.utm utm) (tenc h y) ≡⟨ is-tm utm _ y ⟩
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
102 h1 h y ≡⟨ h-just h y eq1 ⟩
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
103 just true ∎
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
104 ... | false | record { eq = eq1 } = begin
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
105 Halt.halt halt (UTM.utm utm) (tenc h y) ≡⟨ proj2 (is-not-halt halt (UTM.utm utm) (tenc h y) ) (sym tm-tenc) ⟩
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
106 false ∎ where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
107 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
108 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
109 tm (UTM.utm utm) (tenc h y) ≡⟨ is-tm utm _ y ⟩
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
110 h1 h y ≡⟨ h-nothing h y eq1 ⟩
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
111 nothing ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
112 -- the rest of bijection means encoding is unique
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
113 -- fiso→ : (y : List Bool ) → encode utm record { tm = λ x → h1 (λ tm → Halt.halt halt (UTM.utm utm) tm ) x } ≡ y
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
114
319
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
115 TNL1 : UTM → ¬ Halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
116 TNL1 utm halt = diagonal ( TNL halt utm )