annotate automaton-in-agda/src/halt.agda @ 405:af8f630b7e60

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