@@ -9,7 +9,7 @@ import Prelude.Cast
99%default total
1010
1111data Nat
12− = O
12+ = Z
1313 | S Nat
1414
1515--------------------------------------------------------------------------------
@@ -17,11 +17,11 @@ data Nat
1717--------------------------------------------------------------------------------
1818
1919total isZero : Nat -> Bool
20−isZero O = True
20+isZero Z = True
2121isZero (S n) = False
2222
2323total isSucc : Nat -> Bool
24−isSucc O = False
24+isSucc Z = False
2525isSucc (S n) = True
2626
2727--------------------------------------------------------------------------------
@@ -29,27 +29,27 @@ isSucc (S n) = True
2929--------------------------------------------------------------------------------
3030
3131total plus : Nat -> Nat -> Nat
32−plus O right = right
32+plus Z right = right
3333plus (S left) right = S (plus left right)
3434
3535total mult : Nat -> Nat -> Nat
36−mult O right = O
36+mult Z right = Z
3737mult (S left) right = plus right $ mult left right
3838
3939total minus : Nat -> Nat -> Nat
40−minus O right = O
41−minus left O = left
40+minus Z right = Z
41+minus left Z = left
4242minus (S left) (S right) = minus left right
4343
4444total power : Nat -> Nat -> Nat
45−power base O = S O
45+power base Z = S Z
4646power base (S exp) = mult base $ power base exp
4747
4848hyper : Nat -> Nat -> Nat -> Nat
49−hyper O a b = S b
50−hyper (S O) a O = a
51−hyper (S(S O)) a O = O
52−hyper n a O = S O
49+hyper Z a b = S b
50+hyper (S Z) a Z = a
51+hyper (S(S Z)) a Z = Z
52+hyper n a Z = S Z
5353hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
5454
5555
@@ -58,7 +58,7 @@ hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
5858--------------------------------------------------------------------------------
5959
6060data LTE : Nat -> Nat -> Type where
61− lteZero : LTE O right
61+ lteZero : LTE Z right
6262 lteSucc : LTE left right -> LTE (S left) (S right)
6363
6464total GTE : Nat -> Nat -> Type
@@ -71,8 +71,8 @@ total GT : Nat -> Nat -> Type
7171GT left right = LT right left
7272
7373total lte : Nat -> Nat -> Bool
74−lte O right = True
75−lte left O = False
74+lte Z right = True
75+lte left Z = False
7676lte (S left) (S right) = lte left right
7777
7878total gte : Nat -> Nat -> Bool
@@ -103,18 +103,18 @@ maximum left right =
103103--------------------------------------------------------------------------------
104104
105105instance Eq Nat where
106− O == O = True
106+ Z == Z = True
107107 (S l) == (S r) = l == r
108108 _ == _ = False
109109
110110instance Cast Nat Integer where
111− cast O = 0
111+ cast Z = 0
112112 cast (S k) = 1 + cast k
113113
114114instance Ord Nat where
115− compare O O = EQ
116− compare O (S k) = LT
117− compare (S k) O = GT
115+ compare Z Z = EQ
116+ compare Z (S k) = LT
117+ compare (S k) Z = GT
118118 compare (S x) (S y) = compare x y
119119
120120instance Num Nat where
@@ -128,12 +128,12 @@ instance Num Nat where
128128 where
129129 %assert_total
130130 fromInteger' : Integer -> Nat
131− fromInteger' 0 = O
131+ fromInteger' 0 = Z
132132 fromInteger' n =
133133 if (n > 0) then
134134 S (fromInteger' (n - 1))
135135 else
136− O
136+ Z
137137
138138instance Cast Integer Nat where
139139 cast = fromInteger
@@ -171,10 +171,10 @@ instance Semigroup Additive where
171171 getAdditive m => m
172172
173173instance Monoid Multiplicative where
174− neutral = getMultiplicative $ S O
174+ neutral = getMultiplicative $ S Z
175175
176176instance Monoid Additive where
177− neutral = getAdditive O
177+ neutral = getAdditive Z
178178
179179instance MeetSemilattice Nat where
180180 meet = minimum
@@ -185,14 +185,14 @@ instance JoinSemilattice Nat where
185185instance Lattice Nat where { }
186186
187187instance BoundedJoinSemilattice Nat where
188− bottom = O
188+ bottom = Z
189189
190190--------------------------------------------------------------------------------
191191-- Auxilliary notions
192192--------------------------------------------------------------------------------
193193
194194total pred : Nat -> Nat
195−pred O = O
195+pred Z = Z
196196pred (S n) = n
197197
198198--------------------------------------------------------------------------------
@@ -200,8 +200,8 @@ pred (S n) = n
200200--------------------------------------------------------------------------------
201201
202202total fib : Nat -> Nat
203−fib O = O
204−fib (S O) = S O
203+fib Z = Z
204+fib (S Z) = S Z
205205fib (S (S n)) = fib (S n) + fib n
206206
207207--------------------------------------------------------------------------------
@@ -213,11 +213,11 @@ fib (S (S n)) = fib (S n) + fib n
213213--------------------------------------------------------------------------------
214214
215215total mod : Nat -> Nat -> Nat
216−mod left O = left
216+mod left Z = left
217217mod left (S right) = mod' left left right
218218 where
219219 total mod' : Nat -> Nat -> Nat -> Nat
220− mod' O centre right = centre
220+ mod' Z centre right = centre
221221 mod' (S left) centre right =
222222 if lte centre right then
223223 centre
@@ -225,21 +225,21 @@ mod left (S right) = mod' left left right
225225 mod' left (centre - (S right)) right
226226
227227total div : Nat -> Nat -> Nat
228−div left O = S left -- div by zero
228+div left Z = S left -- div by zero
229229div left (S right) = div' left left right
230230 where
231231 total div' : Nat -> Nat -> Nat -> Nat
232− div' O centre right = O
232+ div' Z centre right = Z
233233 div' (S left) centre right =
234234 if lte centre right then
235− O
235+ Z
236236 else
237237 S (div' left (centre - (S right)) right)
238238
239239%assert_total
240240log2 : Nat -> Nat
241−log2 O = O
242−log2 (S O) = O
241+log2 Z = Z
242+log2 (S Z) = Z
243243log2 n = S (log2 (n `div` 2))
244244
245245--------------------------------------------------------------------------------
@@ -260,28 +260,28 @@ total plusZeroLeftNeutral : (right : Nat) -> 0 + right = right
260260plusZeroLeftNeutral right = refl
261261
262262total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
263−plusZeroRightNeutral O = refl
263+plusZeroRightNeutral Z = refl
264264plusZeroRightNeutral (S n) =
265265 let inductiveHypothesis = plusZeroRightNeutral n in
266266 ?plusZeroRightNeutralStepCase
267267
268268total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
269269 S (left + right) = left + (S right)
270−plusSuccRightSucc O right = refl
270+plusSuccRightSucc Z right = refl
271271plusSuccRightSucc (S left) right =
272272 let inductiveHypothesis = plusSuccRightSucc left right in
273273 ?plusSuccRightSuccStepCase
274274
275275total plusCommutative : (left : Nat) -> (right : Nat) ->
276276 left + right = right + left
277−plusCommutative O right = ?plusCommutativeBaseCase
277+plusCommutative Z right = ?plusCommutativeBaseCase
278278plusCommutative (S left) right =
279279 let inductiveHypothesis = plusCommutative left right in
280280 ?plusCommutativeStepCase
281281
282282total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
283283 left + (centre + right) = (left + centre) + right
284−plusAssociative O centre right = refl
284+plusAssociative Z centre right = refl
285285plusAssociative (S left) centre right =
286286 let inductiveHypothesis = plusAssociative left centre right in
287287 ?plusAssociativeStepCase
@@ -299,38 +299,38 @@ plusOneSucc n = refl
299299
300300total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
301301 (p : left + right = left + right') -> right = right'
302−plusLeftCancel O right right' p = ?plusLeftCancelBaseCase
302+plusLeftCancel Z right right' p = ?plusLeftCancelBaseCase
303303plusLeftCancel (S left) right right' p =
304304 let inductiveHypothesis = plusLeftCancel left right right' in
305305 ?plusLeftCancelStepCase
306306
307307total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
308308 (p : left + right = left' + right) -> left = left'
309−plusRightCancel left left' O p = ?plusRightCancelBaseCase
309+plusRightCancel left left' Z p = ?plusRightCancelBaseCase
310310plusRightCancel left left' (S right) p =
311311 let inductiveHypothesis = plusRightCancel left left' right in
312312 ?plusRightCancelStepCase
313313
314314total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
315− (p : left + right = left) -> right = O
316−plusLeftLeftRightZero O right p = ?plusLeftLeftRightZeroBaseCase
315+ (p : left + right = left) -> right = Z
316+plusLeftLeftRightZero Z right p = ?plusLeftLeftRightZeroBaseCase
317317plusLeftLeftRightZero (S left) right p =
318318 let inductiveHypothesis = plusLeftLeftRightZero left right in
319319 ?plusLeftLeftRightZeroStepCase
320320
321321-- Mult
322−total multZeroLeftZero : (right : Nat) -> O * right = O
322+total multZeroLeftZero : (right : Nat) -> Z * right = Z
323323multZeroLeftZero right = refl
324324
325−total multZeroRightZero : (left : Nat) -> left * O = O
326−multZeroRightZero O = refl
325+total multZeroRightZero : (left : Nat) -> left * Z = Z
326+multZeroRightZero Z = refl
327327multZeroRightZero (S left) =
328328 let inductiveHypothesis = multZeroRightZero left in
329329 ?multZeroRightZeroStepCase
330330
331331total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
332332 left * (S right) = left + (left * right)
333−multRightSuccPlus O right = refl
333+multRightSuccPlus Z right = refl
334334multRightSuccPlus (S left) right =
335335 let inductiveHypothesis = multRightSuccPlus left right in
336336 ?multRightSuccPlusStepCase
@@ -341,40 +341,40 @@ multLeftSuccPlus left right = refl
341341
342342total multCommutative : (left : Nat) -> (right : Nat) ->
343343 left * right = right * left
344−multCommutative O right = ?multCommutativeBaseCase
344+multCommutative Z right = ?multCommutativeBaseCase
345345multCommutative (S left) right =
346346 let inductiveHypothesis = multCommutative left right in
347347 ?multCommutativeStepCase
348348
349349total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
350350 left * (centre + right) = (left * centre) + (left * right)
351−multDistributesOverPlusRight O centre right = refl
351+multDistributesOverPlusRight Z centre right = refl
352352multDistributesOverPlusRight (S left) centre right =
353353 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
354354 ?multDistributesOverPlusRightStepCase
355355
356356total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
357357 (left + centre) * right = (left * right) + (centre * right)
358−multDistributesOverPlusLeft O centre right = refl
358+multDistributesOverPlusLeft Z centre right = refl
359359multDistributesOverPlusLeft (S left) centre right =
360360 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
361361 ?multDistributesOverPlusLeftStepCase
362362
363363total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
364364 left * (centre * right) = (left * centre) * right
365−multAssociative O centre right = refl
365+multAssociative Z centre right = refl
366366multAssociative (S left) centre right =
367367 let inductiveHypothesis = multAssociative left centre right in
368368 ?multAssociativeStepCase
369369
370370total multOneLeftNeutral : (right : Nat) -> 1 * right = right
371−multOneLeftNeutral O = refl
371+multOneLeftNeutral Z = refl
372372multOneLeftNeutral (S right) =
373373 let inductiveHypothesis = multOneLeftNeutral right in
374374 ?multOneLeftNeutralStepCase
375375
376376total multOneRightNeutral : (left : Nat) -> left * 1 = left
377−multOneRightNeutral O = refl
377+multOneRightNeutral Z = refl
378378multOneRightNeutral (S left) =
379379 let inductiveHypothesis = multOneRightNeutral left in
380380 ?multOneRightNeutralStepCase
@@ -384,51 +384,51 @@ total minusSuccSucc : (left : Nat) -> (right : Nat) ->
384384 (S left) - (S right) = left - right
385385minusSuccSucc left right = refl
386386
387−total minusZeroLeft : (right : Nat) -> 0 - right = O
387+total minusZeroLeft : (right : Nat) -> 0 - right = Z
388388minusZeroLeft right = refl
389389
390390total minusZeroRight : (left : Nat) -> left - 0 = left
391−minusZeroRight O = refl
391+minusZeroRight Z = refl
392392minusZeroRight (S left) = refl
393393
394−total minusZeroN : (n : Nat) -> O = n - n
395−minusZeroN O = refl
394+total minusZeroN : (n : Nat) -> Z = n - n
395+minusZeroN Z = refl
396396minusZeroN (S n) = minusZeroN n
397397
398−total minusOneSuccN : (n : Nat) -> S O = (S n) - n
399−minusOneSuccN O = refl
398+total minusOneSuccN : (n : Nat) -> S Z = (S n) - n
399+minusOneSuccN Z = refl
400400minusOneSuccN (S n) = minusOneSuccN n
401401
402402total minusSuccOne : (n : Nat) -> S n - 1 = n
403−minusSuccOne O = refl
403+minusSuccOne Z = refl
404404minusSuccOne (S n) = refl
405405
406−total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = O
407−minusPlusZero O m = refl
406+total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = Z
407+minusPlusZero Z m = refl
408408minusPlusZero (S n) m = minusPlusZero n m
409409
410410total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
411411 left - centre - right = left - (centre + right)
412−minusMinusMinusPlus O O right = refl
413−minusMinusMinusPlus (S left) O right = refl
414−minusMinusMinusPlus O (S centre) right = refl
412+minusMinusMinusPlus Z Z right = refl
413+minusMinusMinusPlus (S left) Z right = refl
414+minusMinusMinusPlus Z (S centre) right = refl
415415minusMinusMinusPlus (S left) (S centre) right =
416416 let inductiveHypothesis = minusMinusMinusPlus left centre right in
417417 ?minusMinusMinusPlusStepCase
418418
419419total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
420420 (left + right) - (left + right') = right - right'
421−plusMinusLeftCancel O right right' = refl
421+plusMinusLeftCancel Z right right' = refl
422422plusMinusLeftCancel (S left) right right' =
423423 let inductiveHypothesis = plusMinusLeftCancel left right right' in
424424 ?plusMinusLeftCancelStepCase
425425
426426total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
427427 (left - centre) * right = (left * right) - (centre * right)
428−multDistributesOverMinusLeft O O right = refl
429−multDistributesOverMinusLeft (S left) O right =
428+multDistributesOverMinusLeft Z Z right = refl
429+multDistributesOverMinusLeft (S left) Z right =
430430 ?multDistributesOverMinusLeftBaseCase
431−multDistributesOverMinusLeft O (S centre) right = refl
431+multDistributesOverMinusLeft Z (S centre) right = refl
432432multDistributesOverMinusLeft (S left) (S centre) right =
433433 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
434434 ?multDistributesOverMinusLeftStepCase
@@ -445,35 +445,35 @@ powerSuccPowerLeft base exp = refl
445445
446446total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
447447 (power base exp) * (power base exp') = power base (exp + exp')
448−multPowerPowerPlus base O exp' = ?multPowerPowerPlusBaseCase
448+multPowerPowerPlus base Z exp' = ?multPowerPowerPlusBaseCase
449449multPowerPowerPlus base (S exp) exp' =
450450 let inductiveHypothesis = multPowerPowerPlus base exp exp' in
451451 ?multPowerPowerPlusStepCase
452452
453−total powerZeroOne : (base : Nat) -> power base 0 = S O
453+total powerZeroOne : (base : Nat) -> power base 0 = S Z
454454powerZeroOne base = refl
455455
456456total powerOneNeutral : (base : Nat) -> power base 1 = base
457−powerOneNeutral O = refl
457+powerOneNeutral Z = refl
458458powerOneNeutral (S base) =
459459 let inductiveHypothesis = powerOneNeutral base in
460460 ?powerOneNeutralStepCase
461461
462−total powerOneSuccOne : (exp : Nat) -> power 1 exp = S O
463−powerOneSuccOne O = refl
462+total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
463+powerOneSuccOne Z = refl
464464powerOneSuccOne (S exp) =
465465 let inductiveHypothesis = powerOneSuccOne exp in
466466 ?powerOneSuccOneStepCase
467467
468468total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
469−powerSuccSuccMult O = refl
469+powerSuccSuccMult Z = refl
470470powerSuccSuccMult (S base) =
471471 let inductiveHypothesis = powerSuccSuccMult base in
472472 ?powerSuccSuccMultStepCase
473473
474474total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
475475 power (power base exp) exp' = power base (exp * exp')
476−powerPowerMultPower base exp O = ?powerPowerMultPowerBaseCase
476+powerPowerMultPower base exp Z = ?powerPowerMultPowerBaseCase
477477powerPowerMultPower base exp (S exp') =
478478 let inductiveHypothesis = powerPowerMultPower base exp exp' in
479479 ?powerPowerMultPowerStepCase
@@ -484,9 +484,9 @@ predSucc n = refl
484484
485485total minusSuccPred : (left : Nat) -> (right : Nat) ->
486486 left - (S right) = pred (left - right)
487−minusSuccPred O right = refl
488−minusSuccPred (S left) O =
489− let inductiveHypothesis = minusSuccPred left O in
487+minusSuccPred Z right = refl
488+minusSuccPred (S left) Z =
489+ let inductiveHypothesis = minusSuccPred left Z in
490490 ?minusSuccPredStepCase
491491minusSuccPred (S left) (S right) =
492492 let inductiveHypothesis = minusSuccPred left right in
@@ -520,69 +520,69 @@ boolElimMultMultRight False right t f = refl
520520
521521-- Orders
522522total lteNTrue : (n : Nat) -> lte n n = True
523−lteNTrue O = refl
523+lteNTrue Z = refl
524524lteNTrue (S n) = lteNTrue n
525525
526−total lteSuccZeroFalse : (n : Nat) -> lte (S n) O = False
527−lteSuccZeroFalse O = refl
526+total lteSuccZeroFalse : (n : Nat) -> lte (S n) Z = False
527+lteSuccZeroFalse Z = refl
528528lteSuccZeroFalse (S n) = refl
529529
530530-- Minimum and maximum
531−total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = O
532−minimumZeroZeroRight O = refl
531+total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
532+minimumZeroZeroRight Z = refl
533533minimumZeroZeroRight (S right) = minimumZeroZeroRight right
534534
535−total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = O
536−minimumZeroZeroLeft O = refl
535+total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
536+minimumZeroZeroLeft Z = refl
537537minimumZeroZeroLeft (S left) = refl
538538
539539total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
540540 minimum (S left) (S right) = S (minimum left right)
541−minimumSuccSucc O O = refl
542−minimumSuccSucc (S left) O = refl
543−minimumSuccSucc O (S right) = refl
541+minimumSuccSucc Z Z = refl
542+minimumSuccSucc (S left) Z = refl
543+minimumSuccSucc Z (S right) = refl
544544minimumSuccSucc (S left) (S right) =
545545 let inductiveHypothesis = minimumSuccSucc left right in
546546 ?minimumSuccSuccStepCase
547547
548548total minimumCommutative : (left : Nat) -> (right : Nat) ->
549549 minimum left right = minimum right left
550−minimumCommutative O O = refl
551−minimumCommutative O (S right) = refl
552−minimumCommutative (S left) O = refl
550+minimumCommutative Z Z = refl
551+minimumCommutative Z (S right) = refl
552+minimumCommutative (S left) Z = refl
553553minimumCommutative (S left) (S right) =
554554 let inductiveHypothesis = minimumCommutative left right in
555555 ?minimumCommutativeStepCase
556556
557−total maximumZeroNRight : (right : Nat) -> maximum O right = right
558−maximumZeroNRight O = refl
557+total maximumZeroNRight : (right : Nat) -> maximum Z right = right
558+maximumZeroNRight Z = refl
559559maximumZeroNRight (S right) = refl
560560
561−total maximumZeroNLeft : (left : Nat) -> maximum left O = left
562−maximumZeroNLeft O = refl
561+total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
562+maximumZeroNLeft Z = refl
563563maximumZeroNLeft (S left) = refl
564564
565565total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
566566 S (maximum left right) = maximum (S left) (S right)
567−maximumSuccSucc O O = refl
568−maximumSuccSucc (S left) O = refl
569−maximumSuccSucc O (S right) = refl
567+maximumSuccSucc Z Z = refl
568+maximumSuccSucc (S left) Z = refl
569+maximumSuccSucc Z (S right) = refl
570570maximumSuccSucc (S left) (S right) =
571571 let inductiveHypothesis = maximumSuccSucc left right in
572572 ?maximumSuccSuccStepCase
573573
574574total maximumCommutative : (left : Nat) -> (right : Nat) ->
575575 maximum left right = maximum right left
576−maximumCommutative O O = refl
577−maximumCommutative (S left) O = refl
578−maximumCommutative O (S right) = refl
576+maximumCommutative Z Z = refl
577+maximumCommutative (S left) Z = refl
578+maximumCommutative Z (S right) = refl
579579maximumCommutative (S left) (S right) =
580580 let inductiveHypothesis = maximumCommutative left right in
581581 ?maximumCommutativeStepCase
582582
583583-- div and mod
584−total modZeroZero : (n : Nat) -> mod 0 n = O
585−modZeroZero O = refl
584+total modZeroZero : (n : Nat) -> mod 0 n = Z
585+modZeroZero Z = refl
586586modZeroZero (S n) = refl
587587
588588--------------------------------------------------------------------------------
@@ -613,7 +613,7 @@ powerSuccSuccMultStepCase = proof {
613613powerOneSuccOneStepCase = proof {
614614 intros;
615615 rewrite inductiveHypothesis;
616− rewrite sym (plusZeroRightNeutral (power (S O) exp));
616+ rewrite sym (plusZeroRightNeutral (power (S Z) exp));
617617 trivial;
618618}
619619