annotate cbc/tuple.agda @ 77:a2e6f61d5f2b default tip

Add modus-ponens
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Thu, 09 Feb 2017 06:32:03 +0000
parents 62dfa11a8629
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
1 module tuple where
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
2
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
3 open import Level
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
4
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
5
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
6
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
7 _×_ : {l : Level} -> Set l -> Set l -> Set (suc l)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
8 _×_ {l} U V = {X : Set l} -> (U -> V -> X) -> X
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
9
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
10 <_,_> : {l : Level} {A B : Set l} -> A -> B -> A × B
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
11 <_,_> {l} {A} {B} a b = \{X : Set l} -> \(x : A -> B -> X) -> x a b
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
12
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
13
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
14 CodeSegment : {l : Level} -> Set l -> Set l -> Set l -> Set l -> Set (suc l)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
15 CodeSegment A B C D = (A × B) -> (C × D)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
16
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
17
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
18 data Nat : Set where
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
19 O : Nat
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
20 S : Nat -> Nat
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
21
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
22 data Unit : Set where
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
23 unit : Unit
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
24
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
25
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
26 fst : {l : Level} {A B : Set l} -> A × B -> A
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
27 fst x = x (\a b -> a)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
28
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
29 snd : {l : Level} {A B : Set l} -> A × B -> B
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
30 snd x = x (\a b -> b)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
31
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
32
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
33
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
34 plus1 : CodeSegment Nat Unit Nat Unit
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
35 plus1 a = < (S (fst a)) , unit >
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
36
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
37
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
38 twice' : Nat -> Nat
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
39 twice' O = O
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
40 twice' (S n) = (S (S (twice' n)))
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
41
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
42 twice : CodeSegment Nat Unit Nat Unit
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
43 twice a = < (twice' (fst a)) , unit >
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
44
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
45
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
46 _∘_ : {l : Level} {A B C D E F : Set l} -> CodeSegment C D E F -> CodeSegment A B C D -> CodeSegment A B E F
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
47 _∘_ cs2 cs1 x = cs2 (cs1 x)
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
48
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
49
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
50 hoge : CodeSegment Nat Unit Nat Unit
62dfa11a8629 Define tuple compose
atton
parents:
diff changeset
51 hoge = ((plus1 ∘ twice) ∘ twice)