annotate list-nat.agda @ 130:5f331dfc000b

remove Kleisli record
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Aug 2013 22:05:41 +0900
parents 98b8431a419b
children 3249aaddc405
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
1 module list-nat where
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
2
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
3 open import Level
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
6 postulate A : Set
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
7 postulate B : Set
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
8 postulate C : Set
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
10 postulate a : A
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
11 postulate b : A
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
12 postulate c : A
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
13 postulate d : B
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 infixr 40 _::_
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
16 data List (A : Set ) : Set where
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 [] : List A
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 _::_ : A -> List A -> List A
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 infixl 30 _++_
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
22 _++_ : {A : Set } -> List A -> List A -> List A
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 [] ++ ys = ys
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 (x :: xs) ++ ys = x :: (xs ++ ys)
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 l1 = a :: []
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
27 -- l1' = A :: []
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 l2 = a :: b :: a :: c :: []
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 l3 = l1 ++ l2
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
32 data Node ( A : Set ) : Set where
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
33 leaf : A -> Node A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
34 node : Node A -> Node A -> Node A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
35
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
36 flatten : { A : Set } -> Node A -> List A
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
37 flatten ( leaf a ) = a :: []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
38 flatten ( node a b ) = flatten a ++ flatten b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
40 n1 = node ( leaf a ) ( node ( leaf b ) ( leaf c ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
41
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
42 open import Relation.Binary.PropositionalEquality
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
43
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 infixr 20 _==_
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
46 data _==_ {A : Set } : List A -> List A -> Set where
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 reflection : {x : List A} -> x == x
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
48
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
49 cong1 : {A : Set } { B : Set } ->
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
50 ( f : List A -> List B ) -> {x : List A } -> {y : List A} -> x == y -> f x == f y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
51 cong1 f reflection = reflection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
52
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
53 eq-cons : {A : Set } {x y : List A} ( a : A ) -> x == y -> ( a :: x ) == ( a :: y )
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
54 eq-cons a z = cong1 ( \x -> ( a :: x) ) z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
55
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
56 trans-list : {A : Set } {x y z : List A} -> x == y -> y == z -> x == z
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
57 trans-list reflection reflection = reflection
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
58
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
59
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
60 ==-to-≡ : {A : Set } {x y : List A} -> x == y -> x ≡ y
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
61 ==-to-≡ reflection = refl
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 list-id-l : { A : Set } -> { x : List A} -> [] ++ x == x
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 list-id-l = reflection
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 list-id-r : { A : Set } -> ( x : List A ) -> x ++ [] == x
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 list-id-r [] = reflection
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
68 list-id-r (x :: xs) = eq-cons x ( list-id-r xs )
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 list-assoc : {A : Set } -> ( xs ys zs : List A ) ->
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ( ( xs ++ ys ) ++ zs ) == ( xs ++ ( ys ++ zs ) )
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 list-assoc [] ys zs = reflection
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
73 list-assoc (x :: xs) ys zs = eq-cons x ( list-assoc xs ys zs )
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
75
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
76 module ==-Reasoning (A : Set ) where
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
77
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
78 infixr 2 _∎
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
79 infixr 2 _==⟨_⟩_ _==⟨⟩_
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
80 infix 1 begin_
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
83 data _IsRelatedTo_ (x y : List A) :
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
84 Set where
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
85 relTo : (x≈y : x == y ) → x IsRelatedTo y
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
86
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
87 begin_ : {x : List A } {y : List A} →
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
88 x IsRelatedTo y → x == y
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
89 begin relTo x≈y = x≈y
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
90
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
91 _==⟨_⟩_ : (x : List A ) {y z : List A} →
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
92 x == y → y IsRelatedTo z → x IsRelatedTo z
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
93 _ ==⟨ x≈y ⟩ relTo y≈z = relTo (trans-list x≈y y≈z)
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
94
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
95 _==⟨⟩_ : (x : List A ) {y : List A}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
96 → x IsRelatedTo y → x IsRelatedTo y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
97 _ ==⟨⟩ x≈y = x≈y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
98
20
e34c93046acf clean up list-nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
99 _∎ : (x : List A ) → x IsRelatedTo x
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
100 _∎ _ = relTo reflection
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
101
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
102 lemma11 : (A : Set ) ( x : List A ) -> x == x
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
103 lemma11 A x = let open ==-Reasoning A in
18
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
104 begin x ∎
da1b8250e72a reasoning worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
105
130
5f331dfc000b remove Kleisli record
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
106 ++-assoc : (L : Set ) ( xs ys zs : List L ) -> (xs ++ ys) ++ zs == xs ++ (ys ++ zs)
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
107 ++-assoc A [] ys zs = let open ==-Reasoning A in
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
108 begin -- to prove ([] ++ ys) ++ zs == [] ++ (ys ++ zs)
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 ( [] ++ ys ) ++ zs
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
110 ==⟨ reflection ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 ys ++ zs
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
112 ==⟨ reflection ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 [] ++ ( ys ++ zs )
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
115
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
116 ++-assoc A (x :: xs) ys zs = let open ==-Reasoning A in
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
117 begin -- to prove ((x :: xs) ++ ys) ++ zs == (x :: xs) ++ (ys ++ zs)
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ((x :: xs) ++ ys) ++ zs
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
119 ==⟨ reflection ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 (x :: (xs ++ ys)) ++ zs
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
121 ==⟨ reflection ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 x :: ((xs ++ ys) ++ zs)
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
123 ==⟨ cong1 (_::_ x) (++-assoc A xs ys zs) ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 x :: (xs ++ (ys ++ zs))
17
03d39cabebb7 not working yet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
125 ==⟨ reflection ⟩
15
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 (x :: xs) ++ (ys ++ zs)
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
730a4a59a7bd list nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129