annotate automaton-in-agda/src/halt.agda @ 407:c7ad8d2dc157

safe halt.agda
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 09 Nov 2023 18:04:55 +0900
parents af8f630b7e60
children 3d0aa205edf9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
405
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
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
19 record FBijection {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
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
21 ffun← : S → R → Bool
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
22 ffun→ : (R → Bool) → S
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
23 ffiso← : (f : R → Bool ) → (x : R) → ffun← ( ffun→ f ) x ≡ f x
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
25 -- ffun← ( ffun→ f ) ≡ f , if we have functional extensionality but it is unsafe
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
26
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
27 open FBijection
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
28
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
29 fdiag : {S : Set } (b : FBijection S S) → S → Bool
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
30 fdiag b n = not (ffun← b n n)
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
32 --
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
33 -- ffun→ b (fiag b) is some S
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
34 -- ffun← b (ffun→ b (fdiag b) ) is a function S → Bool
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
35 -- is pointwise equal to fdiag b , which means not (ffun← b (ffun→ b (fdiag b) ) x ≡ (fdiag b) x )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
36 -- but is also means not (fdiag b) x ≡ (fdiag b) x , contradiction
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
37
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
38 fdiagonal : { S : Set } → ¬ FBijection S S
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
39 fdiagonal {S} b = ¬t=f _ (trans ff4 (sym (ff3 _) ) ) where
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
40 ff1 : S
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
41 ff1 = ffun→ b (fdiag b)
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
42 ff2 : S → Bool
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
43 ff2 = ffun← b (ffun→ b (fdiag b) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
44 ff3 : (x : S) → ffun← b (ffun→ b (fdiag b) ) x ≡ fdiag b x
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
45 ff3 x = ffiso← b (fdiag b) x
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
46 ff4 : not ( ffun← b (ffun→ b (fdiag b) ) (ffun→ b (fdiag b))) ≡ fdiag b (ffun→ b (fdiag b))
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
47 ff4 = refl -- definition of fdiag b
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
49 record TM : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
50 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
51 tm : List Bool → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
53 open TM
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
54
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
55 record UTM : Set where
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
56 field
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
57 utm : TM
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
58 encode : TM → List Bool
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
59 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
60
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
61 open UTM
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 142
diff changeset
62
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 open _∧_
173
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
64
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
65 record Halt : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
66 field
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
67 halt : (t : TM ) → (x : List Bool ) → Bool
179
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
68 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
69 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
70
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
71 open Halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
72
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
73 TNLF : (halt : Halt ) → (utm : UTM) → FBijection (List Bool) (List Bool)
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
74 TNLF halt utm = record {
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
75 ffun← = λ tm x → Halt.halt halt (UTM.utm utm) (tm ++ x)
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
76 ; ffun→ = λ h → encode utm record { tm = h1 h }
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
77 ; ffiso← = λ h y → TN1 h y
177
375e1dcba6aa TNL in halting problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 176
diff changeset
78 } where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
79 open ≡-Reasoning
178
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
80 h1 : (h : List Bool → Bool) → (x : List Bool ) → Maybe Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
81 h1 h x with h x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
82 ... | true = just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
83 ... | false = nothing
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
84 tenc : (h : List Bool → Bool) → (y : List Bool) → List Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
85 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
86 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
87 h-nothing h y eq with h y
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
88 h-nothing h y refl | false = refl
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
89 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
90 h-just h y eq with h y
f226c21d61bf halting problem done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
91 h-just h y refl | true = refl
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
92 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
93 TN1 h y with h y in eq1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
94 ... | true = begin
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
95 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
96 true ∎ where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
97 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ just true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
98 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
99 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
100 h1 h y ≡⟨ h-just h y eq1 ⟩
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
101 just true ∎
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 341
diff changeset
102 ... | false = begin
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
103 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
104 false ∎ where
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
105 tm-tenc : tm (UTM.utm utm) (tenc h y) ≡ nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
106 tm-tenc = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
107 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
108 h1 h y ≡⟨ h-nothing h y eq1 ⟩
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
109 nothing ∎
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
110 -- the rest of bijection means encoding is unique, but we don't need it
180
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 179
diff changeset
111 -- 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
112
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
113 TNLF1 : UTM → ¬ Halt
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
114 TNLF1 utm halt = fdiagonal ( TNLF halt utm )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 319
diff changeset
115