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

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 18:02:04 +0900
parents 6f3636fbc481
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
3 -- {-# OPTIONS --allow-unsolved-metas #-}
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
4 module extended-automaton where
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 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
7 open import Data.Nat -- hiding ( erase )
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.List
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
9 open import Data.Maybe hiding ( map )
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
10 -- 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
11 open import Relation.Binary.PropositionalEquality hiding ( [_] )
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import Relation.Nullary using (¬_; Dec; yes; no)
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Level renaming ( suc to succ ; zero to Zero )
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
14 open import Data.Product hiding ( map )
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
15 open import logic
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
17 record Automaton ( Q : Set ) ( Σ : Set ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
18 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
19 δ : Q → Σ → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
20 aend : Q → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
21
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
22 open Automaton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
24 accept : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
25 → Automaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
26 → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
27 → List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
28 accept M q [] = aend M q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
29 accept M q ( H ∷ T ) = accept M ( δ M q H ) T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
31 NAutomaton : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
32 NAutomaton Q Σ = Automaton ( Q → Bool ) Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
33
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
34 Naccept : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
35 → Automaton (Q → Bool) Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
36 → (exists : ( Q → Bool ) → Bool)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
37 → (Nstart : Q → Bool) → List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
38 Naccept M exists sb [] = exists ( λ q → sb q /\ aend M sb )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
39 Naccept M exists sb (i ∷ t ) = Naccept M exists (λ q → exists ( λ qn → (sb qn /\ ( δ M sb i q ) ))) t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
41 PDA : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
42 PDA Q Σ = Automaton ( List Q ) Σ
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
44 data Write ( Σ : Set ) : Set where
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
45 write : Σ → Write Σ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
46 wnone : Write Σ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
47 -- erase write tnone
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
48
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
49 data Move : Set where
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
50 left : Move
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
51 right : Move
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
52 mnone : Move
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
53
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
54 record OTuring ( Q : Set ) ( Σ : Set )
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 : Set where
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 field
20
6032a2317ffa add halt
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
57 tδ : Q → Σ → Q × ( Write Σ ) × Move
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 tstart : Q
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 tend : Q → Bool
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
60 tnone : Σ
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
61 taccept : List Σ → ( Q × List Σ × List Σ )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
62 taccept L = ?
18
6ec8e933ab43 turing wrote but not yet worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
63
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
64 open import bijection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
66 b0 : ( Q : Set ) ( Σ : Set ) → Bijection (List Q) (( Q × ( Write Σ ) × Move ) ∧ ( Q × List Σ × List Σ ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
67 b0 = ?
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
68
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
69 Turing : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
70 Turing Q Σ = Automaton ( List Q ) Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
71
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
72 NDTM : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
73 NDTM Q Σ = Automaton ( List Q → Bool ) Σ
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
74
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
75 UTM : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
76 UTM Q Σ = Automaton ( List Q ) Σ
318
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
77
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
78 SuperTM : ( Q : Set ) ( Σ : Set ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 318
diff changeset
79 SuperTM Q Σ = Automaton ( List Q ) Σ
17
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
08b589172493 add pushdown and turing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82