@@ -9,7 +9,7 @@ import Prelude.Cast
9%default total
9%default total
15--------------------------------------------------------------------------------
15--------------------------------------------------------------------------------
@@ -17,11 +17,11 @@ data Nat
17--------------------------------------------------------------------------------
17--------------------------------------------------------------------------------
19total isZero : Nat -> Bool
19total isZero : Nat -> Bool
20−isZero O = True
20+isZero Z = True
21isZero (S n) = False
21isZero (S n) = False
23total isSucc : Nat -> Bool
23total isSucc : Nat -> Bool
24−isSucc O = False
24+isSucc Z = False
25isSucc (S n) = True
25isSucc (S n) = True
27--------------------------------------------------------------------------------
27--------------------------------------------------------------------------------
@@ -29,27 +29,27 @@ isSucc (S n) = True
29--------------------------------------------------------------------------------
29--------------------------------------------------------------------------------
31total plus : Nat -> Nat -> Nat
31total plus : Nat -> Nat -> Nat
32−plus O right = right
32+plus Z right = right
33plus (S left) right = S (plus left right)
33plus (S left) right = S (plus left right)
35total mult : Nat -> Nat -> Nat
35total mult : Nat -> Nat -> Nat
36−mult O right = O
36+mult Z right = Z
37mult (S left) right = plus right $ mult left right
37mult (S left) right = plus right $ mult left right
39total minus : Nat -> Nat -> Nat
39total minus : Nat -> Nat -> Nat
40−minus O right = O
40+minus Z right = Z
41−minus left O = left
41+minus left Z = left
42minus (S left) (S right) = minus left right
42minus (S left) (S right) = minus left right
44total power : Nat -> Nat -> Nat
44total power : Nat -> Nat -> Nat
45−power base O = S O
45+power base Z = S Z
46power base (S exp) = mult base $ power base exp
46power base (S exp) = mult base $ power base exp
48hyper : Nat -> Nat -> Nat -> Nat
48hyper : Nat -> Nat -> Nat -> Nat
49−hyper O a b = S b
49+hyper Z a b = S b
50−hyper (S O) a O = a
50+hyper (S Z) a Z = a
51−hyper (S(S O)) a O = O
51+hyper (S(S Z)) a Z = Z
52−hyper n a O = S O
52+hyper n a Z = S Z
53hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
53hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
@@ -58,7 +58,7 @@ hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
58--------------------------------------------------------------------------------
58--------------------------------------------------------------------------------
60data LTE : Nat -> Nat -> Type where
60data LTE : Nat -> Nat -> Type where
61− lteZero : LTE O right
61+ lteZero : LTE Z right
62 lteSucc : LTE left right -> LTE (S left) (S right)
62 lteSucc : LTE left right -> LTE (S left) (S right)
64total GTE : Nat -> Nat -> Type
64total GTE : Nat -> Nat -> Type
@@ -71,8 +71,8 @@ total GT : Nat -> Nat -> Type
71GT left right = LT right left
71GT left right = LT right left
73total lte : Nat -> Nat -> Bool
73total lte : Nat -> Nat -> Bool
74−lte O right = True
74+lte Z right = True
75−lte left O = False
75+lte left Z = False
76lte (S left) (S right) = lte left right
76lte (S left) (S right) = lte left right
78total gte : Nat -> Nat -> Bool
78total gte : Nat -> Nat -> Bool
@@ -103,18 +103,18 @@ maximum left right =
103--------------------------------------------------------------------------------
103--------------------------------------------------------------------------------
105instance Eq Nat where
105instance Eq Nat where
106− O == O = True
106+ Z == Z = True
107 (S l) == (S r) = l == r
107 (S l) == (S r) = l == r
108 _ == _ = False
108 _ == _ = False
110instance Cast Nat Integer where
110instance Cast Nat Integer where
111− cast O = 0
111+ cast Z = 0
112 cast (S k) = 1 + cast k
112 cast (S k) = 1 + cast k
114instance Ord Nat where
114instance Ord Nat where
115− compare O O = EQ
115+ compare Z Z = EQ
116− compare O (S k) = LT
116+ compare Z (S k) = LT
117− compare (S k) O = GT
117+ compare (S k) Z = GT
118 compare (S x) (S y) = compare x y
118 compare (S x) (S y) = compare x y
120instance Num Nat where
120instance Num Nat where
@@ -128,12 +128,12 @@ instance Num Nat where
129 %assert_total
129 %assert_total
130 fromInteger' : Integer -> Nat
130 fromInteger' : Integer -> Nat
131− fromInteger' 0 = O
131+ fromInteger' 0 = Z
132 fromInteger' n =
132 fromInteger' n =
133 if (n > 0) then
133 if (n > 0) then
134 S (fromInteger' (n - 1))
134 S (fromInteger' (n - 1))
138instance Cast Integer Nat where
138instance Cast Integer Nat where
139 cast = fromInteger
139 cast = fromInteger
@@ -171,10 +171,10 @@ instance Semigroup Additive where
171 getAdditive m => m
171 getAdditive m => m
173instance Monoid Multiplicative where
173instance Monoid Multiplicative where
174− neutral = getMultiplicative $ S O
174+ neutral = getMultiplicative $ S Z
176instance Monoid Additive where
176instance Monoid Additive where
177− neutral = getAdditive O
177+ neutral = getAdditive Z
179instance MeetSemilattice Nat where
179instance MeetSemilattice Nat where
180 meet = minimum
180 meet = minimum
@@ -185,14 +185,14 @@ instance JoinSemilattice Nat where
185instance Lattice Nat where { }
185instance Lattice Nat where { }
187instance BoundedJoinSemilattice Nat where
187instance BoundedJoinSemilattice Nat where
188− bottom = O
188+ bottom = Z
190--------------------------------------------------------------------------------
190--------------------------------------------------------------------------------
191-- Auxilliary notions
191-- Auxilliary notions
192--------------------------------------------------------------------------------
192--------------------------------------------------------------------------------
194total pred : Nat -> Nat
194total pred : Nat -> Nat
195−pred O = O
195+pred Z = Z
196pred (S n) = n
196pred (S n) = n
198--------------------------------------------------------------------------------
198--------------------------------------------------------------------------------
@@ -200,8 +200,8 @@ pred (S n) = n
200--------------------------------------------------------------------------------
200--------------------------------------------------------------------------------
202total fib : Nat -> Nat
202total fib : Nat -> Nat
203−fib O = O
203+fib Z = Z
204−fib (S O) = S O
204+fib (S Z) = S Z
205fib (S (S n)) = fib (S n) + fib n
205fib (S (S n)) = fib (S n) + fib n
207--------------------------------------------------------------------------------
207--------------------------------------------------------------------------------
@@ -213,11 +213,11 @@ fib (S (S n)) = fib (S n) + fib n
213--------------------------------------------------------------------------------
213--------------------------------------------------------------------------------
215total mod : Nat -> Nat -> Nat
215total mod : Nat -> Nat -> Nat
216−mod left O = left
216+mod left Z = left
217mod left (S right) = mod' left left right
217mod left (S right) = mod' left left right
219 total mod' : Nat -> Nat -> Nat -> Nat
219 total mod' : Nat -> Nat -> Nat -> Nat
220− mod' O centre right = centre
220+ mod' Z centre right = centre
221 mod' (S left) centre right =
221 mod' (S left) centre right =
222 if lte centre right then
222 if lte centre right then
@@ -225,21 +225,21 @@ mod left (S right) = mod' left left right
225 mod' left (centre - (S right)) right
225 mod' left (centre - (S right)) right
227total div : Nat -> Nat -> Nat
227total div : Nat -> Nat -> Nat
228−div left O = S left -- div by zero
228+div left Z = S left -- div by zero
229div left (S right) = div' left left right
229div left (S right) = div' left left right
231 total div' : Nat -> Nat -> Nat -> Nat
231 total div' : Nat -> Nat -> Nat -> Nat
232− div' O centre right = O
232+ div' Z centre right = Z
233 div' (S left) centre right =
233 div' (S left) centre right =
234 if lte centre right then
234 if lte centre right then
237 S (div' left (centre - (S right)) right)
237 S (div' left (centre - (S right)) right)
239%assert_total
239%assert_total
240log2 : Nat -> Nat
240log2 : Nat -> Nat
241−log2 O = O
241+log2 Z = Z
242−log2 (S O) = O
242+log2 (S Z) = Z
243log2 n = S (log2 (n `div` 2))
243log2 n = S (log2 (n `div` 2))
245--------------------------------------------------------------------------------
245--------------------------------------------------------------------------------
@@ -260,28 +260,28 @@ total plusZeroLeftNeutral : (right : Nat) -> 0 + right = right
260plusZeroLeftNeutral right = refl
260plusZeroLeftNeutral right = refl
262total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
262total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
263−plusZeroRightNeutral O = refl
263+plusZeroRightNeutral Z = refl
264plusZeroRightNeutral (S n) =
264plusZeroRightNeutral (S n) =
265 let inductiveHypothesis = plusZeroRightNeutral n in
265 let inductiveHypothesis = plusZeroRightNeutral n in
266 ?plusZeroRightNeutralStepCase
266 ?plusZeroRightNeutralStepCase
268total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
268total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
269 S (left + right) = left + (S right)
269 S (left + right) = left + (S right)
270−plusSuccRightSucc O right = refl
270+plusSuccRightSucc Z right = refl
271plusSuccRightSucc (S left) right =
271plusSuccRightSucc (S left) right =
272 let inductiveHypothesis = plusSuccRightSucc left right in
272 let inductiveHypothesis = plusSuccRightSucc left right in
273 ?plusSuccRightSuccStepCase
273 ?plusSuccRightSuccStepCase
275total plusCommutative : (left : Nat) -> (right : Nat) ->
275total plusCommutative : (left : Nat) -> (right : Nat) ->
276 left + right = right + left
276 left + right = right + left
277−plusCommutative O right = ?plusCommutativeBaseCase
277+plusCommutative Z right = ?plusCommutativeBaseCase
278plusCommutative (S left) right =
278plusCommutative (S left) right =
279 let inductiveHypothesis = plusCommutative left right in
279 let inductiveHypothesis = plusCommutative left right in
280 ?plusCommutativeStepCase
280 ?plusCommutativeStepCase
282total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
282total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
283 left + (centre + right) = (left + centre) + right
283 left + (centre + right) = (left + centre) + right
284−plusAssociative O centre right = refl
284+plusAssociative Z centre right = refl
285plusAssociative (S left) centre right =
285plusAssociative (S left) centre right =
286 let inductiveHypothesis = plusAssociative left centre right in
286 let inductiveHypothesis = plusAssociative left centre right in
287 ?plusAssociativeStepCase
287 ?plusAssociativeStepCase
@@ -299,38 +299,38 @@ plusOneSucc n = refl
300total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
300total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
301 (p : left + right = left + right') -> right = right'
301 (p : left + right = left + right') -> right = right'
302−plusLeftCancel O right right' p = ?plusLeftCancelBaseCase
302+plusLeftCancel Z right right' p = ?plusLeftCancelBaseCase
303plusLeftCancel (S left) right right' p =
303plusLeftCancel (S left) right right' p =
304 let inductiveHypothesis = plusLeftCancel left right right' in
304 let inductiveHypothesis = plusLeftCancel left right right' in
305 ?plusLeftCancelStepCase
305 ?plusLeftCancelStepCase
307total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
307total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
308 (p : left + right = left' + right) -> left = left'
308 (p : left + right = left' + right) -> left = left'
309−plusRightCancel left left' O p = ?plusRightCancelBaseCase
309+plusRightCancel left left' Z p = ?plusRightCancelBaseCase
310plusRightCancel left left' (S right) p =
310plusRightCancel left left' (S right) p =
311 let inductiveHypothesis = plusRightCancel left left' right in
311 let inductiveHypothesis = plusRightCancel left left' right in
312 ?plusRightCancelStepCase
312 ?plusRightCancelStepCase
314total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
314total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
315− (p : left + right = left) -> right = O
315+ (p : left + right = left) -> right = Z
316−plusLeftLeftRightZero O right p = ?plusLeftLeftRightZeroBaseCase
316+plusLeftLeftRightZero Z right p = ?plusLeftLeftRightZeroBaseCase
317plusLeftLeftRightZero (S left) right p =
317plusLeftLeftRightZero (S left) right p =
318 let inductiveHypothesis = plusLeftLeftRightZero left right in
318 let inductiveHypothesis = plusLeftLeftRightZero left right in
319 ?plusLeftLeftRightZeroStepCase
319 ?plusLeftLeftRightZeroStepCase
322−total multZeroLeftZero : (right : Nat) -> O * right = O
322+total multZeroLeftZero : (right : Nat) -> Z * right = Z
323multZeroLeftZero right = refl
323multZeroLeftZero right = refl
325−total multZeroRightZero : (left : Nat) -> left * O = O
325+total multZeroRightZero : (left : Nat) -> left * Z = Z
326−multZeroRightZero O = refl
326+multZeroRightZero Z = refl
327multZeroRightZero (S left) =
327multZeroRightZero (S left) =
328 let inductiveHypothesis = multZeroRightZero left in
328 let inductiveHypothesis = multZeroRightZero left in
329 ?multZeroRightZeroStepCase
329 ?multZeroRightZeroStepCase
331total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
331total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
332 left * (S right) = left + (left * right)
332 left * (S right) = left + (left * right)
333−multRightSuccPlus O right = refl
333+multRightSuccPlus Z right = refl
334multRightSuccPlus (S left) right =
334multRightSuccPlus (S left) right =
335 let inductiveHypothesis = multRightSuccPlus left right in
335 let inductiveHypothesis = multRightSuccPlus left right in
336 ?multRightSuccPlusStepCase
336 ?multRightSuccPlusStepCase
@@ -341,40 +341,40 @@ multLeftSuccPlus left right = refl
342total multCommutative : (left : Nat) -> (right : Nat) ->
342total multCommutative : (left : Nat) -> (right : Nat) ->
343 left * right = right * left
343 left * right = right * left
344−multCommutative O right = ?multCommutativeBaseCase
344+multCommutative Z right = ?multCommutativeBaseCase
345multCommutative (S left) right =
345multCommutative (S left) right =
346 let inductiveHypothesis = multCommutative left right in
346 let inductiveHypothesis = multCommutative left right in
347 ?multCommutativeStepCase
347 ?multCommutativeStepCase
349total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
349total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
350 left * (centre + right) = (left * centre) + (left * right)
350 left * (centre + right) = (left * centre) + (left * right)
351−multDistributesOverPlusRight O centre right = refl
351+multDistributesOverPlusRight Z centre right = refl
352multDistributesOverPlusRight (S left) centre right =
352multDistributesOverPlusRight (S left) centre right =
353 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
353 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
354 ?multDistributesOverPlusRightStepCase
354 ?multDistributesOverPlusRightStepCase
356total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
356total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
357 (left + centre) * right = (left * right) + (centre * right)
357 (left + centre) * right = (left * right) + (centre * right)
358−multDistributesOverPlusLeft O centre right = refl
358+multDistributesOverPlusLeft Z centre right = refl
359multDistributesOverPlusLeft (S left) centre right =
359multDistributesOverPlusLeft (S left) centre right =
360 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
360 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
361 ?multDistributesOverPlusLeftStepCase
361 ?multDistributesOverPlusLeftStepCase
363total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
363total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
364 left * (centre * right) = (left * centre) * right
364 left * (centre * right) = (left * centre) * right
365−multAssociative O centre right = refl
365+multAssociative Z centre right = refl
366multAssociative (S left) centre right =
366multAssociative (S left) centre right =
367 let inductiveHypothesis = multAssociative left centre right in
367 let inductiveHypothesis = multAssociative left centre right in
368 ?multAssociativeStepCase
368 ?multAssociativeStepCase
370total multOneLeftNeutral : (right : Nat) -> 1 * right = right
370total multOneLeftNeutral : (right : Nat) -> 1 * right = right
371−multOneLeftNeutral O = refl
371+multOneLeftNeutral Z = refl
372multOneLeftNeutral (S right) =
372multOneLeftNeutral (S right) =
373 let inductiveHypothesis = multOneLeftNeutral right in
373 let inductiveHypothesis = multOneLeftNeutral right in
374 ?multOneLeftNeutralStepCase
374 ?multOneLeftNeutralStepCase
376total multOneRightNeutral : (left : Nat) -> left * 1 = left
376total multOneRightNeutral : (left : Nat) -> left * 1 = left
377−multOneRightNeutral O = refl
377+multOneRightNeutral Z = refl
378multOneRightNeutral (S left) =
378multOneRightNeutral (S left) =
379 let inductiveHypothesis = multOneRightNeutral left in
379 let inductiveHypothesis = multOneRightNeutral left in
380 ?multOneRightNeutralStepCase
380 ?multOneRightNeutralStepCase
@@ -384,51 +384,51 @@ total minusSuccSucc : (left : Nat) -> (right : Nat) ->
384 (S left) - (S right) = left - right
384 (S left) - (S right) = left - right
385minusSuccSucc left right = refl
385minusSuccSucc left right = refl
387−total minusZeroLeft : (right : Nat) -> 0 - right = O
387+total minusZeroLeft : (right : Nat) -> 0 - right = Z
388minusZeroLeft right = refl
388minusZeroLeft right = refl
390total minusZeroRight : (left : Nat) -> left - 0 = left
390total minusZeroRight : (left : Nat) -> left - 0 = left
391−minusZeroRight O = refl
391+minusZeroRight Z = refl
392minusZeroRight (S left) = refl
392minusZeroRight (S left) = refl
394−total minusZeroN : (n : Nat) -> O = n - n
394+total minusZeroN : (n : Nat) -> Z = n - n
395−minusZeroN O = refl
395+minusZeroN Z = refl
396minusZeroN (S n) = minusZeroN n
396minusZeroN (S n) = minusZeroN n
398−total minusOneSuccN : (n : Nat) -> S O = (S n) - n
398+total minusOneSuccN : (n : Nat) -> S Z = (S n) - n
399−minusOneSuccN O = refl
399+minusOneSuccN Z = refl
400minusOneSuccN (S n) = minusOneSuccN n
400minusOneSuccN (S n) = minusOneSuccN n
402total minusSuccOne : (n : Nat) -> S n - 1 = n
402total minusSuccOne : (n : Nat) -> S n - 1 = n
403−minusSuccOne O = refl
403+minusSuccOne Z = refl
404minusSuccOne (S n) = refl
404minusSuccOne (S n) = refl
406−total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = O
406+total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = Z
407−minusPlusZero O m = refl
407+minusPlusZero Z m = refl
408minusPlusZero (S n) m = minusPlusZero n m
408minusPlusZero (S n) m = minusPlusZero n m
410total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
410total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
411 left - centre - right = left - (centre + right)
411 left - centre - right = left - (centre + right)
412−minusMinusMinusPlus O O right = refl
412+minusMinusMinusPlus Z Z right = refl
413−minusMinusMinusPlus (S left) O right = refl
413+minusMinusMinusPlus (S left) Z right = refl
414−minusMinusMinusPlus O (S centre) right = refl
414+minusMinusMinusPlus Z (S centre) right = refl
415minusMinusMinusPlus (S left) (S centre) right =
415minusMinusMinusPlus (S left) (S centre) right =
416 let inductiveHypothesis = minusMinusMinusPlus left centre right in
416 let inductiveHypothesis = minusMinusMinusPlus left centre right in
417 ?minusMinusMinusPlusStepCase
417 ?minusMinusMinusPlusStepCase
419total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
419total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
420 (left + right) - (left + right') = right - right'
420 (left + right) - (left + right') = right - right'
421−plusMinusLeftCancel O right right' = refl
421+plusMinusLeftCancel Z right right' = refl
422plusMinusLeftCancel (S left) right right' =
422plusMinusLeftCancel (S left) right right' =
423 let inductiveHypothesis = plusMinusLeftCancel left right right' in
423 let inductiveHypothesis = plusMinusLeftCancel left right right' in
424 ?plusMinusLeftCancelStepCase
424 ?plusMinusLeftCancelStepCase
426total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
426total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
427 (left - centre) * right = (left * right) - (centre * right)
427 (left - centre) * right = (left * right) - (centre * right)
428−multDistributesOverMinusLeft O O right = refl
428+multDistributesOverMinusLeft Z Z right = refl
429−multDistributesOverMinusLeft (S left) O right =
429+multDistributesOverMinusLeft (S left) Z right =
430 ?multDistributesOverMinusLeftBaseCase
430 ?multDistributesOverMinusLeftBaseCase
431−multDistributesOverMinusLeft O (S centre) right = refl
431+multDistributesOverMinusLeft Z (S centre) right = refl
432multDistributesOverMinusLeft (S left) (S centre) right =
432multDistributesOverMinusLeft (S left) (S centre) right =
433 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
433 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
434 ?multDistributesOverMinusLeftStepCase
434 ?multDistributesOverMinusLeftStepCase
@@ -445,35 +445,35 @@ powerSuccPowerLeft base exp = refl
446total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
446total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
447 (power base exp) * (power base exp') = power base (exp + exp')
447 (power base exp) * (power base exp') = power base (exp + exp')
448−multPowerPowerPlus base O exp' = ?multPowerPowerPlusBaseCase
448+multPowerPowerPlus base Z exp' = ?multPowerPowerPlusBaseCase
449multPowerPowerPlus base (S exp) exp' =
449multPowerPowerPlus base (S exp) exp' =
450 let inductiveHypothesis = multPowerPowerPlus base exp exp' in
450 let inductiveHypothesis = multPowerPowerPlus base exp exp' in
451 ?multPowerPowerPlusStepCase
451 ?multPowerPowerPlusStepCase
453−total powerZeroOne : (base : Nat) -> power base 0 = S O
453+total powerZeroOne : (base : Nat) -> power base 0 = S Z
454powerZeroOne base = refl
454powerZeroOne base = refl
456total powerOneNeutral : (base : Nat) -> power base 1 = base
456total powerOneNeutral : (base : Nat) -> power base 1 = base
457−powerOneNeutral O = refl
457+powerOneNeutral Z = refl
458powerOneNeutral (S base) =
458powerOneNeutral (S base) =
459 let inductiveHypothesis = powerOneNeutral base in
459 let inductiveHypothesis = powerOneNeutral base in
460 ?powerOneNeutralStepCase
460 ?powerOneNeutralStepCase
462−total powerOneSuccOne : (exp : Nat) -> power 1 exp = S O
462+total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
463−powerOneSuccOne O = refl
463+powerOneSuccOne Z = refl
464powerOneSuccOne (S exp) =
464powerOneSuccOne (S exp) =
465 let inductiveHypothesis = powerOneSuccOne exp in
465 let inductiveHypothesis = powerOneSuccOne exp in
466 ?powerOneSuccOneStepCase
466 ?powerOneSuccOneStepCase
468total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
468total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
469−powerSuccSuccMult O = refl
469+powerSuccSuccMult Z = refl
470powerSuccSuccMult (S base) =
470powerSuccSuccMult (S base) =
471 let inductiveHypothesis = powerSuccSuccMult base in
471 let inductiveHypothesis = powerSuccSuccMult base in
472 ?powerSuccSuccMultStepCase
472 ?powerSuccSuccMultStepCase
474total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
474total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
475 power (power base exp) exp' = power base (exp * exp')
475 power (power base exp) exp' = power base (exp * exp')
476−powerPowerMultPower base exp O = ?powerPowerMultPowerBaseCase
476+powerPowerMultPower base exp Z = ?powerPowerMultPowerBaseCase
477powerPowerMultPower base exp (S exp') =
477powerPowerMultPower base exp (S exp') =
478 let inductiveHypothesis = powerPowerMultPower base exp exp' in
478 let inductiveHypothesis = powerPowerMultPower base exp exp' in
479 ?powerPowerMultPowerStepCase
479 ?powerPowerMultPowerStepCase
@@ -484,9 +484,9 @@ predSucc n = refl
485total minusSuccPred : (left : Nat) -> (right : Nat) ->
485total minusSuccPred : (left : Nat) -> (right : Nat) ->
486 left - (S right) = pred (left - right)
486 left - (S right) = pred (left - right)
487−minusSuccPred O right = refl
487+minusSuccPred Z right = refl
488−minusSuccPred (S left) O =
488+minusSuccPred (S left) Z =
489− let inductiveHypothesis = minusSuccPred left O in
489+ let inductiveHypothesis = minusSuccPred left Z in
490 ?minusSuccPredStepCase
490 ?minusSuccPredStepCase
491minusSuccPred (S left) (S right) =
491minusSuccPred (S left) (S right) =
492 let inductiveHypothesis = minusSuccPred left right in
492 let inductiveHypothesis = minusSuccPred left right in
@@ -520,69 +520,69 @@ boolElimMultMultRight False right t f = refl
522total lteNTrue : (n : Nat) -> lte n n = True
522total lteNTrue : (n : Nat) -> lte n n = True
523−lteNTrue O = refl
523+lteNTrue Z = refl
524lteNTrue (S n) = lteNTrue n
524lteNTrue (S n) = lteNTrue n
526−total lteSuccZeroFalse : (n : Nat) -> lte (S n) O = False
526+total lteSuccZeroFalse : (n : Nat) -> lte (S n) Z = False
527−lteSuccZeroFalse O = refl
527+lteSuccZeroFalse Z = refl
528lteSuccZeroFalse (S n) = refl
528lteSuccZeroFalse (S n) = refl
530-- Minimum and maximum
530-- Minimum and maximum
531−total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = O
531+total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
532−minimumZeroZeroRight O = refl
532+minimumZeroZeroRight Z = refl
533minimumZeroZeroRight (S right) = minimumZeroZeroRight right
533minimumZeroZeroRight (S right) = minimumZeroZeroRight right
535−total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = O
535+total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
536−minimumZeroZeroLeft O = refl
536+minimumZeroZeroLeft Z = refl
537minimumZeroZeroLeft (S left) = refl
537minimumZeroZeroLeft (S left) = refl
539total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
539total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
540 minimum (S left) (S right) = S (minimum left right)
540 minimum (S left) (S right) = S (minimum left right)
541−minimumSuccSucc O O = refl
541+minimumSuccSucc Z Z = refl
542−minimumSuccSucc (S left) O = refl
542+minimumSuccSucc (S left) Z = refl
543−minimumSuccSucc O (S right) = refl
543+minimumSuccSucc Z (S right) = refl
544minimumSuccSucc (S left) (S right) =
544minimumSuccSucc (S left) (S right) =
545 let inductiveHypothesis = minimumSuccSucc left right in
545 let inductiveHypothesis = minimumSuccSucc left right in
546 ?minimumSuccSuccStepCase
546 ?minimumSuccSuccStepCase
548total minimumCommutative : (left : Nat) -> (right : Nat) ->
548total minimumCommutative : (left : Nat) -> (right : Nat) ->
549 minimum left right = minimum right left
549 minimum left right = minimum right left
550−minimumCommutative O O = refl
550+minimumCommutative Z Z = refl
551−minimumCommutative O (S right) = refl
551+minimumCommutative Z (S right) = refl
552−minimumCommutative (S left) O = refl
552+minimumCommutative (S left) Z = refl
553minimumCommutative (S left) (S right) =
553minimumCommutative (S left) (S right) =
554 let inductiveHypothesis = minimumCommutative left right in
554 let inductiveHypothesis = minimumCommutative left right in
555 ?minimumCommutativeStepCase
555 ?minimumCommutativeStepCase
557−total maximumZeroNRight : (right : Nat) -> maximum O right = right
557+total maximumZeroNRight : (right : Nat) -> maximum Z right = right
558−maximumZeroNRight O = refl
558+maximumZeroNRight Z = refl
559maximumZeroNRight (S right) = refl
559maximumZeroNRight (S right) = refl
561−total maximumZeroNLeft : (left : Nat) -> maximum left O = left
561+total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
562−maximumZeroNLeft O = refl
562+maximumZeroNLeft Z = refl
563maximumZeroNLeft (S left) = refl
563maximumZeroNLeft (S left) = refl
565total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
565total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
566 S (maximum left right) = maximum (S left) (S right)
566 S (maximum left right) = maximum (S left) (S right)
567−maximumSuccSucc O O = refl
567+maximumSuccSucc Z Z = refl
568−maximumSuccSucc (S left) O = refl
568+maximumSuccSucc (S left) Z = refl
569−maximumSuccSucc O (S right) = refl
569+maximumSuccSucc Z (S right) = refl
570maximumSuccSucc (S left) (S right) =
570maximumSuccSucc (S left) (S right) =
571 let inductiveHypothesis = maximumSuccSucc left right in
571 let inductiveHypothesis = maximumSuccSucc left right in
572 ?maximumSuccSuccStepCase
572 ?maximumSuccSuccStepCase
574total maximumCommutative : (left : Nat) -> (right : Nat) ->
574total maximumCommutative : (left : Nat) -> (right : Nat) ->
575 maximum left right = maximum right left
575 maximum left right = maximum right left
576−maximumCommutative O O = refl
576+maximumCommutative Z Z = refl
577−maximumCommutative (S left) O = refl
577+maximumCommutative (S left) Z = refl
578−maximumCommutative O (S right) = refl
578+maximumCommutative Z (S right) = refl
579maximumCommutative (S left) (S right) =
579maximumCommutative (S left) (S right) =
580 let inductiveHypothesis = maximumCommutative left right in
580 let inductiveHypothesis = maximumCommutative left right in
581 ?maximumCommutativeStepCase
581 ?maximumCommutativeStepCase
583-- div and mod
583-- div and mod
584−total modZeroZero : (n : Nat) -> mod 0 n = O
584+total modZeroZero : (n : Nat) -> mod 0 n = Z
585−modZeroZero O = refl
585+modZeroZero Z = refl
586modZeroZero (S n) = refl
586modZeroZero (S n) = refl
588--------------------------------------------------------------------------------
588--------------------------------------------------------------------------------
@@ -613,7 +613,7 @@ powerSuccSuccMultStepCase = proof {
613powerOneSuccOneStepCase = proof {
613powerOneSuccOneStepCase = proof {
615 rewrite inductiveHypothesis;
615 rewrite inductiveHypothesis;
616− rewrite sym (plusZeroRightNeutral (power (S O) exp));
616+ rewrite sym (plusZeroRightNeutral (power (S Z) exp));