comparison 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
comparison
equal deleted inserted replaced
21:afb2304be45b 22:84e3fbc662db
39 39
40 triple : Format 40 triple : Format
41 triple = < String || ℕ || (List ℕ) > 41 triple = < String || ℕ || (List ℕ) >
42 42
43 43
44 DataSegment : {A : Set} -> Format -> Set 44 record CodeSegment : Set₁ where
45 DataSegment {A} FEnd = A 45 field
46 DataSegment {A} (FSet x f) = x -> (DataSegment {A} f) 46 IDS : Format
47 ODS : Format
47 48
49 cs : Format -> Format -> CodeSegment
50 cs i o = record { IDS = i ; ODS = o }
48 51
49 data CodeSegment : Set₁ where
50 cs : Format -> Format -> CodeSegment
51 52
52 csDouble : CodeSegment 53 csDouble : CodeSegment
53 csDouble = cs double double 54 csDouble = cs double double
54 55
56
55 ods : CodeSegment -> Set 57 ods : CodeSegment -> Set
56 ods (cs ids FEnd) = ⊤ 58 ods record { ODS = i } = ods' i
57 ods (cs ids (FSet s f)) = s × (ods (cs ids f)) 59 where
60 ods' : Format -> Set
61 ods' FEnd = ⊤
62 ods' (FSet s o) = s × (ods' o)
58 63
59 ods-double : ods csDouble 64 ods-double : ods csDouble
60 ods-double = "hoge" , zero , tt 65 ods-double = "hoge" , zero , tt
61 66
62 67
63 ids : {A : Set} -> CodeSegment -> Set 68
64 ids {A} (cs i o) = DataSegment {A} i 69 ids : {A : Set} -> CodeSegment -> Set
70 ids {A} record {IDS = IDS} = ids' IDS
71 where
72 ids' : Format -> Set
73 ids' FEnd = A
74 ids' (FSet x f) = x -> (ids' f)
75
65 76
66 ids-double : {A : Set} {a : A} -> ids {A} csDouble 77 ids-double : {A : Set} {a : A} -> ids {A} csDouble
67 ids-double {_} {a} = \(s : String) -> \(n : ℕ) -> a 78 ids-double {_} {a} = \(s : String) -> \(n : ℕ) -> a
68 79
69 80
70 executeCS : (cs : CodeSegment) -> Set 81 executeCS : (cs : CodeSegment) -> Set
71 executeCS c = ids {ods c} c 82 executeCS c = ids {ods c} c
72 83
84
85 _◎_ : {c1ods c2ids : Format} -> {equiv : c1ods ≡ c2ids} -> CodeSegment -> CodeSegment -> CodeSegment
86 record {IDS = i} ◎ (record {ODS = o}) = cs i o
87
88
89 compose-cs : CodeSegment
90 compose-cs = _◎_ {double} {double} {refl} csDouble csDouble
91
92
93