Mercurial > hg > Members > atton > agda-proofs
annotate cbc/variable-tuple.agda @ 22:84e3fbc662db
Define cs compose operator
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 22 Dec 2016 05:47:20 +0000 |
parents | 4dd4400b48aa |
children | 0fcb7b35ba81 |
rev | line source |
---|---|
17 | 1 module variable-tuple where |
2 | |
3 open import Data.Nat hiding (_<_ ; _>_) | |
4 open import Data.String | |
5 open import Data.List | |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
6 open import Data.Unit |
19
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
7 open import Data.Product |
17 | 8 open import Function using (_∘_) |
9 open import Relation.Binary.PropositionalEquality | |
10 | |
11 data Format : Set₁ where | |
12 FEnd : Format | |
13 FSet : Set -> Format -> Format | |
14 | |
15 <> : Format | |
16 <> = FEnd | |
17 | |
18 infix 51 _> | |
19 _> : (Format -> Format) -> Format | |
20 _> f = f FEnd | |
21 | |
22 infixl 52 _||_ | |
23 _||_ : (Format -> Format) -> Set -> (Format -> Format) | |
24 _||_ f1 s = f1 ∘ (FSet s) | |
25 | |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
26 infix 53 <_ |
17 | 27 <_ : Set -> Format -> Format |
28 <_ s = FSet s | |
29 | |
30 | |
31 unit : Format | |
32 unit = <> | |
33 | |
34 single : Format | |
35 single = < ℕ > | |
36 | |
37 double : Format | |
38 double = < String || ℕ > | |
39 | |
40 triple : Format | |
41 triple = < String || ℕ || (List ℕ) > | |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
42 |
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
43 |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
44 record CodeSegment : Set₁ where |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
45 field |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
46 IDS : Format |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
47 ODS : Format |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
48 |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
49 cs : Format -> Format -> CodeSegment |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
50 cs i o = record { IDS = i ; ODS = o } |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
51 |
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
52 |
19
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
53 csDouble : CodeSegment |
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
54 csDouble = cs double double |
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
55 |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
56 |
19
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
57 ods : CodeSegment -> Set |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
58 ods record { ODS = i } = ods' i |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
59 where |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
60 ods' : Format -> Set |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
61 ods' FEnd = ⊤ |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
62 ods' (FSet s o) = s × (ods' o) |
19
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
63 |
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
64 ods-double : ods csDouble |
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
65 ods-double = "hoge" , zero , tt |
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
66 |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
67 |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
68 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
69 ids : {A : Set} -> CodeSegment -> Set |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
70 ids {A} record {IDS = IDS} = ids' IDS |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
71 where |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
72 ids' : Format -> Set |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
73 ids' FEnd = A |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
74 ids' (FSet x f) = x -> (ids' f) |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
75 |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
76 |
19
853318ff55f9
Trying define output data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
77 ids-double : {A : Set} {a : A} -> ids {A} csDouble |
18
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
78 ids-double {_} {a} = \(s : String) -> \(n : ℕ) -> a |
782a11f3eea4
Trying define input data segment
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
79 |
20
4dd4400b48aa
Define code segment execution
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
19
diff
changeset
|
80 |
4dd4400b48aa
Define code segment execution
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
19
diff
changeset
|
81 executeCS : (cs : CodeSegment) -> Set |
4dd4400b48aa
Define code segment execution
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
19
diff
changeset
|
82 executeCS c = ids {ods c} c |
4dd4400b48aa
Define code segment execution
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
19
diff
changeset
|
83 |
22
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
84 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
85 _◎_ : {c1ods c2ids : Format} -> {equiv : c1ods ≡ c2ids} -> CodeSegment -> CodeSegment -> CodeSegment |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
86 record {IDS = i} ◎ (record {ODS = o}) = cs i o |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
87 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
88 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
89 compose-cs : CodeSegment |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
90 compose-cs = _◎_ {double} {double} {refl} csDouble csDouble |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
91 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
92 |
84e3fbc662db
Define cs compose operator
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
20
diff
changeset
|
93 |