Mercurial > hg > Members > atton > agda-proofs
comparison cbc/variable-tuple.agda @ 26:d503a73186ce
Split cbc type definition using product
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 23 Dec 2016 02:50:03 +0000 |
parents | da78bb99d654 |
children |
comparison
equal
deleted
inserted
replaced
25:da78bb99d654 | 26:d503a73186ce |
---|---|
39 double = < String || ℕ > | 39 double = < String || ℕ > |
40 | 40 |
41 triple : Format | 41 triple : Format |
42 triple = < String || ℕ || (List ℕ) > | 42 triple = < String || ℕ || (List ℕ) > |
43 | 43 |
44 data CodeSegment (I O : Set) : Set₁ where | |
45 cs : (I -> O) -> CodeSegment I O | |
46 | |
47 | |
48 twiceWithName : (String × ℕ ) -> (String × ℕ ) | |
49 twiceWithName (s , n) = s , twice n | |
50 where | |
51 twice : ℕ -> ℕ | |
52 twice zero = zero | |
53 twice (ℕ.suc n₁) = (ℕ.suc (ℕ.suc (twice n₁))) | |
54 | |
55 csDouble : CodeSegment (String × ℕ) (String × ℕ) | |
56 csDouble = cs twiceWithName | |
57 | |
58 | |
59 ods : {I O : Set} -> CodeSegment I O -> Set | |
60 ods {i} {o} c = o | |
61 | |
62 ods-double : ods csDouble | |
63 ods-double = "hoge" , zero | |
64 | |
65 | |
66 ids : {I O : Set} -> CodeSegment I O -> Set | |
67 ids {i} {o} c = i | |
68 | |
69 ids-double : ids csDouble | |
70 ids-double = "fuga" , 3 | |
71 | |
72 --ids-double : {A : Set} {a : A} -> ids csDouble | |
73 --ids-double {_} {a} = \(s : String) -> \(n : ℕ) -> a | |
74 | |
75 | |
76 | |
77 executeCS : {A B : Set} -> CodeSegment A B -> (A -> B) | |
78 executeCS (cs b) = b | |
79 | |
80 | |
81 | |
82 infixr 30 _◎_ | |
83 _◎_ : {A B C : Set} -> CodeSegment A B -> CodeSegment B C -> CodeSegment A C | |
84 (cs b1) ◎ (cs b2) = cs (b2 ∘ b1) | |
85 | |
86 | |
87 | |
88 | |
89 ◎-double : CodeSegment (String × ℕ) (String × ℕ ) | |
90 --◎-double = csDouble ◎ csDouble ◎ csDouble -- ok | |
91 ◎-double = csDouble ◎ (cs (\s -> tt)) ◎ (cs (\t -> ("yo" , 100))) -- ok | |
92 --◎-double = csDouble ◎ (cs (\s -> tt)) ◎ csDouble -- ng (valid type check) | |
93 | |
94 |