annotate automaton-in-agda/src/turing.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 6f3636fbc481
children
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: 332
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
2 -- {-# OPTIONS --allow-unsolved-metas #-}
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 module turing where
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Level renaming ( suc to succ ; zero to Zero )
139
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
6 open import Data.Nat -- hiding ( erase )
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.List
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
8 open import Data.Maybe hiding ( map )
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
9 -- open import Data.Bool using ( Bool ; true ; false ) renaming ( not to negate )
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Relation.Binary.PropositionalEquality hiding ( [_] )
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import Relation.Nullary using (¬_; Dec; yes; no)
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Level renaming ( suc to succ ; zero to Zero )
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
13 open import Data.Product hiding ( map )
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
14 open import logic
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
17 data Write ( Σ : Set ) : Set where
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
18 write : Σ → Write Σ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
19 wnone : Write Σ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
20 -- erase write tnone
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
21
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
22 data Move : Set where
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
23 left : Move
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
24 right : Move
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
25 mnone : Move
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
26
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
27 -- at tδ both stack is poped
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
28
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
29 -- write S push S , push SR
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
30 -- erase push SL , push tone
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
31 -- none push SL , push SR
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
32 -- left push SR , pop
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
33 -- right pop , push SL
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
139
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
35 move : {Q Σ : Set } → { tnone : Σ} → {tδ : Q → Σ → Q × ( Write Σ ) × Move } → (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
36 move {Q} {Σ} {tnone} {tδ} q ( LH ∷ LT ) ( RH ∷ RT ) with tδ q LH
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
37 ... | nq , write x , left = ( nq , ( RH ∷ x ∷ LT ) , RT )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
38 ... | nq , write x , right = ( nq , LT , ( x ∷ RH ∷ RT ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
39 ... | nq , write x , mnone = ( nq , ( x ∷ LT ) , ( RH ∷ RT ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
40 ... | nq , wnone , left = ( nq , ( RH ∷ LH ∷ LT ) , RT )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
41 ... | nq , wnone , right = ( nq , LT , ( LH ∷ RH ∷ RT ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
42 ... | nq , wnone , mnone = ( nq , ( LH ∷ LT ) , ( RH ∷ RT ) )
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
43 move {Q} {Σ} {tnone} {tδ} q ( LH ∷ LT ) [] with tδ q LH
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
44 ... | nq , write x , left = ( nq , ( tnone ∷ x ∷ LT ) , [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
45 ... | nq , write x , right = ( nq , LT , ( x ∷ tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
46 ... | nq , write x , mnone = ( nq , ( x ∷ LT ) , ( tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
47 ... | nq , wnone , left = ( nq , ( tnone ∷ LH ∷ LT ) , [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
48 ... | nq , wnone , right = ( nq , LT , ( LH ∷ tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
49 ... | nq , wnone , mnone = ( nq , ( LH ∷ LT ) , ( tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
50 move {Q} {Σ} {tnone} {tδ} q [] ( RH ∷ RT ) with tδ q tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
51 ... | nq , write x , left = ( nq , ( RH ∷ x ∷ [] ) , RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
52 ... | nq , write x , right = ( nq , [] , ( x ∷ RH ∷ RT ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
53 ... | nq , write x , mnone = ( nq , ( x ∷ [] ) , ( RH ∷ RT ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
54 ... | nq , wnone , left = ( nq , ( RH ∷ tnone ∷ [] ) , RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
55 ... | nq , wnone , right = ( nq , [] , ( tnone ∷ RH ∷ RT ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
56 ... | nq , wnone , mnone = ( nq , ( tnone ∷ [] ) , ( RH ∷ RT ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
57 move {Q} {Σ} {tnone} {tδ} q [] [] with tδ q tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
58 ... | nq , write x , left = ( nq , ( tnone ∷ x ∷ [] ) , [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
59 ... | nq , write x , right = ( nq , [] , ( x ∷ tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
60 ... | nq , write x , mnone = ( nq , ( x ∷ [] ) , ( tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
61 ... | nq , wnone , left = ( nq , ( tnone ∷ tnone ∷ [] ) , [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
62 ... | nq , wnone , right = ( nq , [] , ( tnone ∷ tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
63 ... | nq , wnone , mnone = ( nq , ( tnone ∷ [] ) , ( tnone ∷ [] ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
64
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
65 move-loop : (i : ℕ) {Q Σ : Set } → {tend : Q → Bool} → { tnone : Σ} → {tδ : Q → Σ → Q × ( Write Σ ) × Move }
139
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
66 → (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
67 move-loop zero {Q} {Σ} {tend} {tnone} {tδ} q L R = ( q , L , R )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
68 move-loop (suc i) {Q} {Σ} {tend} {tnone} {tδ} q L R with tend q
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
69 ... | true = ( q , L , R )
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
70 ... | flase = move-loop i {Q} {Σ} {tend} {tnone} {tδ} ( proj₁ next ) ( proj₁ ( proj₂ next ) ) ( proj₂ ( proj₂ next ) )
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
71 where
139
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
72 next = move {Q} {Σ} {tnone} {tδ} q L R
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
73
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
74 move0 : {Q Σ : Set } ( tend : Q → Bool ) (tnone : Σ ) (tδ : Q → Σ → Q × ( Write Σ ) × Move)
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
75 (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
76 move0 tend tnone tδ q ( LH ∷ LT ) ( RH ∷ RT ) with tδ q LH
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
77 ... | nq , write x , left = nq , ( RH ∷ x ∷ LT ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
78 ... | nq , write x , right = nq , LT , ( x ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
79 ... | nq , write x , mnone = nq , ( x ∷ LT ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
80 ... | nq , wnone , left = nq , ( RH ∷ LH ∷ LT ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
81 ... | nq , wnone , right = nq , LT , ( LH ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
82 ... | nq , wnone , mnone = ( q , ( LH ∷ LT ) , ( RH ∷ RT ) )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
83 move0 tend tnone tδ q ( LH ∷ LT ) [] with tδ q LH
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
84 ... | nq , write x , left = nq , ( tnone ∷ x ∷ LT ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
85 ... | nq , write x , right = nq , LT , ( x ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
86 ... | nq , write x , mnone = nq , ( x ∷ LT ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
87 ... | nq , wnone , left = nq , ( tnone ∷ LH ∷ LT ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
88 ... | nq , wnone , right = nq , LT , ( LH ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
89 ... | nq , wnone , mnone = nq , ( LH ∷ LT ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
90 move0 tend tnone tδ q [] ( RH ∷ RT ) with tδ q tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
91 ... | nq , write x , left = nq , ( RH ∷ x ∷ [] ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
92 ... | nq , write x , right = nq , [] , ( x ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
93 ... | nq , write x , mnone = nq , ( x ∷ [] ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
94 ... | nq , wnone , left = nq , ( RH ∷ tnone ∷ [] ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
95 ... | nq , wnone , right = nq , [] , ( tnone ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
96 ... | nq , wnone , mnone = nq , ( tnone ∷ [] ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
97 move0 tend tnone tδ q [] [] with tδ q tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
98 ... | nq , write x , left = nq , ( tnone ∷ x ∷ [] ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
99 ... | nq , write x , right = nq , [] , ( x ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
100 ... | nq , write x , mnone = nq , ( x ∷ [] ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
101 ... | nq , wnone , left = nq , ( tnone ∷ tnone ∷ [] ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
102 ... | nq , wnone , right = nq , [] , ( tnone ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
103 ... | nq , wnone , mnone = nq , ( tnone ∷ [] ) , ( tnone ∷ [] )
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 record Turing ( Q : Set ) ( Σ : Set )
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 : Set where
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 field
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
108 tδ : Q → Σ → Q × ( Write Σ ) × Move
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 tstart : Q
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 tend : Q → Bool
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
111 tnone : Σ
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
112 taccept : (i : ℕ ) → List Σ → ( Q × List Σ × List Σ )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
113 taccept i L = tloop i tstart [] [] where
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
114 tloop : (i : ℕ) (q : Q ) ( L : List Σ ) ( L : List Σ ) → ( Q × List Σ × List Σ )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
115 tloop zero q L R = ( q , L , R )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
116 tloop (suc i) q L R with tend q
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
117 ... | true = ( q , L , R )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
118 ... | false with move0 tend tnone tδ q L R
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
119 ... | nq , L , R = tloop i nq L R
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
120
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
121 open import automaton
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
122
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
123 -- ATuring : {Σ : Set } → Automaton (List Σ) Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
124 -- ATuring = record { δ = {!!} ; aend = {!!} }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
125
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
126 open import automaton
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
127 open Automaton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
128
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
129 move1 : {Q Σ : Set } (tnone : Σ ) (δ : Q → Σ → Q ) (tδ : Q → Σ → Write Σ × Move)
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
130 (q : Q ) ( L : List Σ ) ( R : List Σ ) → Q × List Σ × List Σ
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
131 move1 tnone δ tδ q ( LH ∷ LT ) ( RH ∷ RT ) with tδ (δ q LH) LH
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
132 ... | write x , left = (δ q LH) , ( RH ∷ x ∷ LT ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
133 ... | write x , right = (δ q LH) , LT , ( x ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
134 ... | write x , mnone = (δ q LH) , ( x ∷ LT ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
135 ... | wnone , left = (δ q LH) , ( RH ∷ LH ∷ LT ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
136 ... | wnone , right = (δ q LH) , LT , ( LH ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
137 ... | wnone , mnone = (δ q LH) , ( LH ∷ LT ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
138 move1 tnone δ tδ q ( LH ∷ LT ) [] with tδ (δ q LH) LH
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
139 ... | write x , left = (δ q LH) , ( tnone ∷ x ∷ LT ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
140 ... | write x , right = (δ q LH) , LT , ( x ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
141 ... | write x , mnone = (δ q LH) , ( x ∷ LT ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
142 ... | wnone , left = (δ q LH) , ( tnone ∷ LH ∷ LT ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
143 ... | wnone , right = (δ q LH) , LT , ( LH ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
144 ... | wnone , mnone = (δ q LH) , ( LH ∷ LT ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
145 move1 tnone δ tδ q [] ( RH ∷ RT ) with tδ (δ q tnone) tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
146 ... | write x , left = (δ q tnone) , ( RH ∷ x ∷ [] ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
147 ... | write x , right = (δ q tnone) , [] , ( x ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
148 ... | write x , mnone = (δ q tnone) , ( x ∷ [] ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
149 ... | wnone , left = (δ q tnone) , ( RH ∷ tnone ∷ [] ) , RT
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
150 ... | wnone , right = (δ q tnone) , [] , ( tnone ∷ RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
151 ... | wnone , mnone = (δ q tnone) , ( tnone ∷ [] ) , ( RH ∷ RT )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
152 move1 tnone δ tδ q [] [] with tδ (δ q tnone) tnone
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
153 ... | write x , left = (δ q tnone) , ( tnone ∷ x ∷ [] ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
154 ... | write x , right = (δ q tnone) , [] , ( x ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
155 ... | write x , mnone = (δ q tnone) , ( x ∷ [] ) , ( tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
156 ... | wnone , left = (δ q tnone) , ( tnone ∷ tnone ∷ [] ) , []
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
157 ... | wnone , right = (δ q tnone) , [] , ( tnone ∷ tnone ∷ [] )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
158 ... | wnone , mnone = (δ q tnone) , ( tnone ∷ [] ) , ( tnone ∷ [] )
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
160 record TM ( Q : Set ) ( Σ : Set )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
161 : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
162 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
163 automaton : Automaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
164 tδ : Q → Σ → Write Σ × Move
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
165 tnone : Σ
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
166 taccept : (i : ℕ) → Q → List Σ → ( Q × List Σ × List Σ )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
167 taccept i q L = tloop i q L [] where
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
168 tloop : (i : ℕ) → (q : Q ) ( L : List Σ ) ( R : List Σ ) → Q × List Σ × List Σ
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
169 tloop i q L R with aend automaton q
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
170 ... | true = ( q , L , R )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
171 tloop zero q L R | false = ( q , L , R )
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
172 tloop (suc i) q L R | false with move1 tnone (δ automaton) tδ q L R
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
173 ... | q' , L' , R' = tloop i q' L' R'
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
174
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
175 data CopyStates : Set where
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
176 s1 : CopyStates
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
177 s2 : CopyStates
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
178 s3 : CopyStates
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
179 s4 : CopyStates
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
180 s5 : CopyStates
19
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
181 H : CopyStates
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
184 Copyδ : CopyStates → ℕ → CopyStates × ( Write ℕ ) × Move
139
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
185 Copyδ s1 0 = H , wnone , mnone
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
186 Copyδ s1 1 = s2 , write 0 , right
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
187 Copyδ s2 0 = s3 , write 0 , right
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
188 Copyδ s2 1 = s2 , write 1 , right
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
189 Copyδ s3 0 = s4 , write 1 , left
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
190 Copyδ s3 1 = s3 , write 1 , right
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
191 Copyδ s4 0 = s5 , write 0 , left
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
192 Copyδ s4 1 = s4 , write 1 , left
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
193 Copyδ s5 0 = s1 , write 1 , right
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
194 Copyδ s5 1 = s5 , write 1 , left
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
195 Copyδ H _ = H , wnone , mnone
3be1afb87f82 add utm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
196 Copyδ _ (suc (suc _)) = H , wnone , mnone
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
198 copyMachine : Turing CopyStates ℕ
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
199 copyMachine = record {
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
200 tδ = Copyδ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
201 ; tstart = s1
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
202 ; tend = tend
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
203 ; tnone = 0
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
204 } where
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
205 tend : CopyStates → Bool
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
206 tend H = true
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
207 tend _ = false
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
209 copyTM : TM CopyStates ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
210 copyTM = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
211 automaton = record { δ = λ q i → proj₁ (Copyδ q i) ; aend = tend }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
212 ; tδ = λ q i → proj₂ (Copyδ q i )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
213 ; tnone = 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
214 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
215 tend : CopyStates → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
216 tend H = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
217 tend _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
218
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
219 test1 : CopyStates × ( List ℕ ) × ( List ℕ )
407
c7ad8d2dc157 safe halt.agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
220 test1 = Turing.taccept copyMachine 10 ( 1 ∷ 1 ∷ 0 ∷ 0 ∷ 0 ∷ [] )
19
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
221
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
222 test2 : ℕ → CopyStates × ( List ℕ ) × ( List ℕ )
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
223 test2 n = loop n (Turing.tstart copyMachine) ( 1 ∷ 1 ∷ 0 ∷ 0 ∷ 0 ∷ [] ) []
19
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
224 where
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
225 loop : ℕ → CopyStates → ( List ℕ ) → ( List ℕ ) → CopyStates × ( List ℕ ) × ( List ℕ )
19
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
226 loop zero q L R = ( q , L , R )
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
227 loop (suc n) q L R = loop n ( proj₁ t1 ) ( proj₁ ( proj₂ t1 ) ) ( proj₂ ( proj₂ t1 ) )
e5d67f06aca8 turing machine done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
228 where
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
229 t1 = move {CopyStates} {ℕ} {0} {Copyδ} q L R
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
230
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
231 -- testn = map (\ n -> test2 n) ( 0 ∷ 1 ∷ 2 ∷ 3 ∷ 4 ∷ 5 ∷ 6 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
232
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
233 testn : ℕ → List ( CopyStates × ( List ℕ ) × ( List ℕ ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
234 testn 0 = test2 0 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
235 testn (suc n) = test2 n ∷ testn n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
236