@@ -44,6 +44,51 @@ total power : Nat -> Nat -> Nat
44power base O = S O
44power base O = S O
45power base (S exp) = mult base $ power base exp
45power base (S exp) = mult base $ power base exp
47+--------------------------------------------------------------------------------
49+--------------------------------------------------------------------------------
51+data LTE : Nat -> Nat -> Set where
52+ lteZero : LTE O right
53+ lteSucc : LTE left right -> LTE (S left) (S right)
55+total GTE : Nat -> Nat -> Set
56+GTE left right = LTE right left
58+total LT : Nat -> Nat -> Set
59+LT left right = LTE (S left) right
61+total GT : Nat -> Nat -> Set
62+GT left right = LT right left
64+total lte : Nat -> Nat -> Bool
67+lte (S left) (S right) = lte left right
69+total gte : Nat -> Nat -> Bool
70+gte left right = lte right left
72+total lt : Nat -> Nat -> Bool
73+lt left right = lte (S left) right
75+total gt : Nat -> Nat -> Bool
76+gt left right = lt right left
78+total minimum : Nat -> Nat -> Nat
80+ if lte left right then
85+total maximum : Nat -> Nat -> Nat
87+ if lte left right then
47--------------------------------------------------------------------------------
92--------------------------------------------------------------------------------
48-- Type class instances
93-- Type class instances
49--------------------------------------------------------------------------------
94--------------------------------------------------------------------------------
@@ -85,35 +130,48 @@ record Multiplicative : Set where
85record Additive : Set where
130record Additive : Set where
86 getAdditive : Nat -> Additive
131 getAdditive : Nat -> Additive
88−-- XXX: infix operators don't seem to be being exported correctly from
90−--instance Monoid Multiplicative where
133+instance Semigroup Multiplicative where
91−-- neutral = getMultiplicative $ S O
92−-- left <+> right = getMultiplicative $ left' * right'
134+ (<+>) left right = getMultiplicative $ left' * right'
94−-- left' : Nat
136+ left' : Nat
95−-- left' =
137+ left' =
96−-- case left of
138+ case left of
97−-- getMultiplicative m => m
139+ getMultiplicative m => m
99−-- right' : Nat
141+ right' : Nat
100−-- right' =
142+ right' =
101−-- case right of
143+ case right of
102−-- getMultiplicative m => m
144+ getMultiplicative m => m
104−--instance Monoid Additive where
146+instance Semigroup Additive where
105−-- neutral = getAdditive $ O
106−-- left <+> right = getAdditive $ left' + right'
147+ left <+> right = getAdditive $ left' + right'
108−-- left' : Nat
149+ left' : Nat
109−-- left' =
150+ left' =
110−-- case left of
151+ case left of
111−-- getAdditive m => m
152+ getAdditive m => m
113−-- right' : Nat
154+ right' : Nat
114−-- right' =
155+ right' =
115−-- case right of
156+ case right of
116−-- getAdditive m => m
157+ getAdditive m => m
159+instance Monoid Multiplicative where
160+ neutral = getMultiplicative $ S O
162+instance Monoid Additive where
163+ neutral = getAdditive O
165+instance MeetSemilattice Nat where
168+instance JoinSemilattice Nat where
171+instance Lattice Nat where { }
173+instance BoundedJoinSemilattice Nat where
118--------------------------------------------------------------------------------
176--------------------------------------------------------------------------------
119-- Auxilliary notions
177-- Auxilliary notions
@@ -136,51 +194,6 @@ fib (S (S n)) = fib (S n) + fib n
136-- GCD and LCM
194-- GCD and LCM
137--------------------------------------------------------------------------------
195--------------------------------------------------------------------------------
139−--------------------------------------------------------------------------------
141−--------------------------------------------------------------------------------
143−data LTE : Nat -> Nat -> Set where
144− lteZero : LTE O right
145− lteSucc : LTE left right -> LTE (S left) (S right)
147−total GTE : Nat -> Nat -> Set
148−GTE left right = LTE right left
150−total LT : Nat -> Nat -> Set
151−LT left right = LTE (S left) right
153−total GT : Nat -> Nat -> Set
154−GT left right = LT right left
156−total lte : Nat -> Nat -> Bool
159−lte (S left) (S right) = lte left right
161−total gte : Nat -> Nat -> Bool
162−gte left right = lte right left
164−total lt : Nat -> Nat -> Bool
165−lt left right = lte (S left) right
167−total gt : Nat -> Nat -> Bool
168−gt left right = lt right left
170−total minimum : Nat -> Nat -> Nat
172− if lte left right then
177−total maximum : Nat -> Nat -> Nat
179− if lte left right then
184--------------------------------------------------------------------------------
197--------------------------------------------------------------------------------
185-- Division and modulus
198-- Division and modulus
186--------------------------------------------------------------------------------
199--------------------------------------------------------------------------------
@@ -712,9 +725,6 @@ plusZeroRightNeutralStepCase = proof {
716−---------- Proofs ----------
718maximumCommutativeStepCase = proof {
728maximumCommutativeStepCase = proof {
720 rewrite (boolElimSuccSucc (lte left right) right left);
730 rewrite (boolElimSuccSucc (lte left right) right left);