@@ -22,7 +22,7 @@ import Prelude.Uninhabited
22%name Nat k,j,i,n,m
22%name Nat k,j,i,n,m
24instance Uninhabited (Z = S n) where
24instance Uninhabited (Z = S n) where
25− uninhabited refl impossible
25+ uninhabited Refl impossible
27--------------------------------------------------------------------------------
27--------------------------------------------------------------------------------
28-- Syntactic tests
28-- Syntactic tests
@@ -94,9 +94,9 @@ hyper (S pn) a (S pb) = hyper pn a (hyper (S pn) a pb)
94||| @ m the larger number
94||| @ m the larger number
95data LTE : (n, m : Nat) -> Type where
95data LTE : (n, m : Nat) -> Type where
96 ||| Zero is the smallest Nat
96 ||| Zero is the smallest Nat
97− lteZero : LTE Z right
97+ LTEZero : LTE Z right
98 ||| If n <= m, then n + 1 <= m + 1
98 ||| If n <= m, then n + 1 <= m + 1
99− lteSucc : LTE left right -> LTE (S left) (S right)
99+ LTESucc : LTE left right -> LTE (S left) (S right)
101||| Greater than or equal to
101||| Greater than or equal to
102total GTE : Nat -> Nat -> Type
102total GTE : Nat -> Nat -> Type
@@ -112,18 +112,18 @@ GT left right = LT right left
113||| A successor is never less than or equal zero
113||| A successor is never less than or equal zero
114succNotLTEzero : Not (S m `LTE` Z)
114succNotLTEzero : Not (S m `LTE` Z)
115−succNotLTEzero lteZero impossible
115+succNotLTEzero LTEZero impossible
117||| If two numbers are ordered, their predecessors are too
117||| If two numbers are ordered, their predecessors are too
118fromLteSucc : (S m `LTE` S n) -> (m `LTE` n)
118fromLteSucc : (S m `LTE` S n) -> (m `LTE` n)
119−fromLteSucc (lteSucc x) = x
119+fromLteSucc (LTESucc x) = x
121||| A decision procedure for `LTE`
121||| A decision procedure for `LTE`
122isLTE : (m, n : Nat) -> Dec (m `LTE` n)
122isLTE : (m, n : Nat) -> Dec (m `LTE` n)
123−isLTE Z n = Yes lteZero
123+isLTE Z n = Yes LTEZero
124isLTE (S k) Z = No succNotLTEzero
124isLTE (S k) Z = No succNotLTEzero
125isLTE (S k) (S j) with (isLTE k j)
125isLTE (S k) (S j) with (isLTE k j)
126− isLTE (S k) (S j) | (Yes prf) = Yes (lteSucc prf)
126+ isLTE (S k) (S j) | (Yes prf) = Yes (LTESucc prf)
127 isLTE (S k) (S j) | (No contra) = No (contra . fromLteSucc)
127 isLTE (S k) (S j) | (No contra) = No (contra . fromLteSucc)
129||| Boolean test than one Nat is less than or equal to another
129||| Boolean test than one Nat is less than or equal to another
@@ -329,18 +329,18 @@ lcm x y = divNat (x * y) (gcd x y)
329-- An informative comparison view
329-- An informative comparison view
330--------------------------------------------------------------------------------
330--------------------------------------------------------------------------------
331data CmpNat : Nat -> Nat -> Type where
331data CmpNat : Nat -> Nat -> Type where
332− cmpLT : (y : _) -> CmpNat x (x + S y)
332+ CmpLT : (y : _) -> CmpNat x (x + S y)
333− cmpEQ : CmpNat x x
333+ CmpEQ : CmpNat x x
334− cmpGT : (x : _) -> CmpNat (y + S x) y
334+ CmpGT : (x : _) -> CmpNat (y + S x) y
336total cmp : (x, y : Nat) -> CmpNat x y
336total cmp : (x, y : Nat) -> CmpNat x y
337−cmp Z Z = cmpEQ
337+cmp Z Z = CmpEQ
338−cmp Z (S k) = cmpLT _
338+cmp Z (S k) = CmpLT _
339−cmp (S k) Z = cmpGT _
339+cmp (S k) Z = CmpGT _
340cmp (S x) (S y) with (cmp x y)
340cmp (S x) (S y) with (cmp x y)
341− cmp (S x) (S (x + (S k))) | cmpLT k = cmpLT k
341+ cmp (S x) (S (x + (S k))) | CmpLT k = CmpLT k
342− cmp (S x) (S x) | cmpEQ = cmpEQ
342+ cmp (S x) (S x) | CmpEQ = CmpEQ
343− cmp (S (y + (S k))) (S y) | cmpGT k = cmpGT k
343+ cmp (S (y + (S k))) (S y) | CmpGT k = CmpGT k
345--------------------------------------------------------------------------------
345--------------------------------------------------------------------------------
346-- Properties
346-- Properties
@@ -351,26 +351,26 @@ cmp (S x) (S y) with (cmp x y)
351||| S preserves equality
351||| S preserves equality
352total eqSucc : (left : Nat) -> (right : Nat) -> (p : left = right) ->
352total eqSucc : (left : Nat) -> (right : Nat) -> (p : left = right) ->
353 S left = S right
353 S left = S right
354−eqSucc left _ refl = refl
354+eqSucc left _ Refl = Refl
356||| S is injective
356||| S is injective
357total succInjective : (left : Nat) -> (right : Nat) -> (p : S left = S right) ->
357total succInjective : (left : Nat) -> (right : Nat) -> (p : S left = S right) ->
358 left = right
358 left = right
359−succInjective left _ refl = refl
359+succInjective left _ Refl = Refl
362total plusZeroLeftNeutral : (right : Nat) -> 0 + right = right
362total plusZeroLeftNeutral : (right : Nat) -> 0 + right = right
363−plusZeroLeftNeutral right = refl
363+plusZeroLeftNeutral right = Refl
365total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
365total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
366−plusZeroRightNeutral Z = refl
366+plusZeroRightNeutral Z = Refl
367plusZeroRightNeutral (S n) =
367plusZeroRightNeutral (S n) =
368 let inductiveHypothesis = plusZeroRightNeutral n in
368 let inductiveHypothesis = plusZeroRightNeutral n in
369 ?plusZeroRightNeutralStepCase
369 ?plusZeroRightNeutralStepCase
371total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
371total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
372 S (left + right) = left + (S right)
372 S (left + right) = left + (S right)
373−plusSuccRightSucc Z right = refl
373+plusSuccRightSucc Z right = Refl
374plusSuccRightSucc (S left) right =
374plusSuccRightSucc (S left) right =
375 let inductiveHypothesis = plusSuccRightSucc left right in
375 let inductiveHypothesis = plusSuccRightSucc left right in
376 ?plusSuccRightSuccStepCase
376 ?plusSuccRightSuccStepCase
@@ -384,21 +384,21 @@ plusCommutative (S left) right =
385total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
385total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
386 left + (centre + right) = (left + centre) + right
386 left + (centre + right) = (left + centre) + right
387−plusAssociative Z centre right = refl
387+plusAssociative Z centre right = Refl
388plusAssociative (S left) centre right =
388plusAssociative (S left) centre right =
389 let inductiveHypothesis = plusAssociative left centre right in
389 let inductiveHypothesis = plusAssociative left centre right in
390 ?plusAssociativeStepCase
390 ?plusAssociativeStepCase
392total plusConstantRight : (left : Nat) -> (right : Nat) -> (c : Nat) ->
392total plusConstantRight : (left : Nat) -> (right : Nat) -> (c : Nat) ->
393 (p : left = right) -> left + c = right + c
393 (p : left = right) -> left + c = right + c
394−plusConstantRight left _ c refl = refl
394+plusConstantRight left _ c Refl = Refl
396total plusConstantLeft : (left : Nat) -> (right : Nat) -> (c : Nat) ->
396total plusConstantLeft : (left : Nat) -> (right : Nat) -> (c : Nat) ->
397 (p : left = right) -> c + left = c + right
397 (p : left = right) -> c + left = c + right
398−plusConstantLeft left _ c refl = refl
398+plusConstantLeft left _ c Refl = Refl
400total plusOneSucc : (right : Nat) -> 1 + right = S right
400total plusOneSucc : (right : Nat) -> 1 + right = S right
401−plusOneSucc n = refl
401+plusOneSucc n = Refl
403total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
403total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
404 (p : left + right = left + right') -> right = right'
404 (p : left + right = left + right') -> right = right'
@@ -423,24 +423,24 @@ plusLeftLeftRightZero (S left) right p =
425total multZeroLeftZero : (right : Nat) -> Z * right = Z
425total multZeroLeftZero : (right : Nat) -> Z * right = Z
426−multZeroLeftZero right = refl
426+multZeroLeftZero right = Refl
428total multZeroRightZero : (left : Nat) -> left * Z = Z
428total multZeroRightZero : (left : Nat) -> left * Z = Z
429−multZeroRightZero Z = refl
429+multZeroRightZero Z = Refl
430multZeroRightZero (S left) =
430multZeroRightZero (S left) =
431 let inductiveHypothesis = multZeroRightZero left in
431 let inductiveHypothesis = multZeroRightZero left in
432 ?multZeroRightZeroStepCase
432 ?multZeroRightZeroStepCase
434total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
434total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
435 left * (S right) = left + (left * right)
435 left * (S right) = left + (left * right)
436−multRightSuccPlus Z right = refl
436+multRightSuccPlus Z right = Refl
437multRightSuccPlus (S left) right =
437multRightSuccPlus (S left) right =
438 let inductiveHypothesis = multRightSuccPlus left right in
438 let inductiveHypothesis = multRightSuccPlus left right in
439 ?multRightSuccPlusStepCase
439 ?multRightSuccPlusStepCase
441total multLeftSuccPlus : (left : Nat) -> (right : Nat) ->
441total multLeftSuccPlus : (left : Nat) -> (right : Nat) ->
442 (S left) * right = right + (left * right)
442 (S left) * right = right + (left * right)
443−multLeftSuccPlus left right = refl
443+multLeftSuccPlus left right = Refl
445total multCommutative : (left : Nat) -> (right : Nat) ->
445total multCommutative : (left : Nat) -> (right : Nat) ->
446 left * right = right * left
446 left * right = right * left
@@ -451,33 +451,33 @@ multCommutative (S left) right =
452total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
452total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
453 left * (centre + right) = (left * centre) + (left * right)
453 left * (centre + right) = (left * centre) + (left * right)
454−multDistributesOverPlusRight Z centre right = refl
454+multDistributesOverPlusRight Z centre right = Refl
455multDistributesOverPlusRight (S left) centre right =
455multDistributesOverPlusRight (S left) centre right =
456 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
456 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
457 ?multDistributesOverPlusRightStepCase
457 ?multDistributesOverPlusRightStepCase
459total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
459total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
460 (left + centre) * right = (left * right) + (centre * right)
460 (left + centre) * right = (left * right) + (centre * right)
461−multDistributesOverPlusLeft Z centre right = refl
461+multDistributesOverPlusLeft Z centre right = Refl
462multDistributesOverPlusLeft (S left) centre right =
462multDistributesOverPlusLeft (S left) centre right =
463 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
463 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
464 ?multDistributesOverPlusLeftStepCase
464 ?multDistributesOverPlusLeftStepCase
466total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
466total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
467 left * (centre * right) = (left * centre) * right
467 left * (centre * right) = (left * centre) * right
468−multAssociative Z centre right = refl
468+multAssociative Z centre right = Refl
469multAssociative (S left) centre right =
469multAssociative (S left) centre right =
470 let inductiveHypothesis = multAssociative left centre right in
470 let inductiveHypothesis = multAssociative left centre right in
471 ?multAssociativeStepCase
471 ?multAssociativeStepCase
473total multOneLeftNeutral : (right : Nat) -> 1 * right = right
473total multOneLeftNeutral : (right : Nat) -> 1 * right = right
474−multOneLeftNeutral Z = refl
474+multOneLeftNeutral Z = Refl
475multOneLeftNeutral (S right) =
475multOneLeftNeutral (S right) =
476 let inductiveHypothesis = multOneLeftNeutral right in
476 let inductiveHypothesis = multOneLeftNeutral right in
477 ?multOneLeftNeutralStepCase
477 ?multOneLeftNeutralStepCase
479total multOneRightNeutral : (left : Nat) -> left * 1 = left
479total multOneRightNeutral : (left : Nat) -> left * 1 = left
480−multOneRightNeutral Z = refl
480+multOneRightNeutral Z = Refl
481multOneRightNeutral (S left) =
481multOneRightNeutral (S left) =
482 let inductiveHypothesis = multOneRightNeutral left in
482 let inductiveHypothesis = multOneRightNeutral left in
483 ?multOneRightNeutralStepCase
483 ?multOneRightNeutralStepCase
@@ -485,53 +485,53 @@ multOneRightNeutral (S left) =
486total minusSuccSucc : (left : Nat) -> (right : Nat) ->
486total minusSuccSucc : (left : Nat) -> (right : Nat) ->
487 (S left) - (S right) = left - right
487 (S left) - (S right) = left - right
488−minusSuccSucc left right = refl
488+minusSuccSucc left right = Refl
490total minusZeroLeft : (right : Nat) -> 0 - right = Z
490total minusZeroLeft : (right : Nat) -> 0 - right = Z
491−minusZeroLeft right = refl
491+minusZeroLeft right = Refl
493total minusZeroRight : (left : Nat) -> left - 0 = left
493total minusZeroRight : (left : Nat) -> left - 0 = left
494−minusZeroRight Z = refl
494+minusZeroRight Z = Refl
495−minusZeroRight (S left) = refl
495+minusZeroRight (S left) = Refl
497total minusZeroN : (n : Nat) -> Z = n - n
497total minusZeroN : (n : Nat) -> Z = n - n
498−minusZeroN Z = refl
498+minusZeroN Z = Refl
499minusZeroN (S n) = minusZeroN n
499minusZeroN (S n) = minusZeroN n
501total minusOneSuccN : (n : Nat) -> S Z = (S n) - n
501total minusOneSuccN : (n : Nat) -> S Z = (S n) - n
502−minusOneSuccN Z = refl
502+minusOneSuccN Z = Refl
503minusOneSuccN (S n) = minusOneSuccN n
503minusOneSuccN (S n) = minusOneSuccN n
505total minusSuccOne : (n : Nat) -> S n - 1 = n
505total minusSuccOne : (n : Nat) -> S n - 1 = n
506−minusSuccOne Z = refl
506+minusSuccOne Z = Refl
507−minusSuccOne (S n) = refl
507+minusSuccOne (S n) = Refl
509total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = Z
509total minusPlusZero : (n : Nat) -> (m : Nat) -> n - (n + m) = Z
510−minusPlusZero Z m = refl
510+minusPlusZero Z m = Refl
511minusPlusZero (S n) m = minusPlusZero n m
511minusPlusZero (S n) m = minusPlusZero n m
513total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
513total minusMinusMinusPlus : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
514 left - centre - right = left - (centre + right)
514 left - centre - right = left - (centre + right)
515−minusMinusMinusPlus Z Z right = refl
515+minusMinusMinusPlus Z Z right = Refl
516−minusMinusMinusPlus (S left) Z right = refl
516+minusMinusMinusPlus (S left) Z right = Refl
517−minusMinusMinusPlus Z (S centre) right = refl
517+minusMinusMinusPlus Z (S centre) right = Refl
518minusMinusMinusPlus (S left) (S centre) right =
518minusMinusMinusPlus (S left) (S centre) right =
519 let inductiveHypothesis = minusMinusMinusPlus left centre right in
519 let inductiveHypothesis = minusMinusMinusPlus left centre right in
520 ?minusMinusMinusPlusStepCase
520 ?minusMinusMinusPlusStepCase
522total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
522total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
523 (left + right) - (left + right') = right - right'
523 (left + right) - (left + right') = right - right'
524−plusMinusLeftCancel Z right right' = refl
524+plusMinusLeftCancel Z right right' = Refl
525plusMinusLeftCancel (S left) right right' =
525plusMinusLeftCancel (S left) right right' =
526 let inductiveHypothesis = plusMinusLeftCancel left right right' in
526 let inductiveHypothesis = plusMinusLeftCancel left right right' in
527 ?plusMinusLeftCancelStepCase
527 ?plusMinusLeftCancelStepCase
529total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
529total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
530 (left - centre) * right = (left * right) - (centre * right)
530 (left - centre) * right = (left * right) - (centre * right)
531−multDistributesOverMinusLeft Z Z right = refl
531+multDistributesOverMinusLeft Z Z right = Refl
532multDistributesOverMinusLeft (S left) Z right =
532multDistributesOverMinusLeft (S left) Z right =
533 ?multDistributesOverMinusLeftBaseCase
533 ?multDistributesOverMinusLeftBaseCase
534−multDistributesOverMinusLeft Z (S centre) right = refl
534+multDistributesOverMinusLeft Z (S centre) right = Refl
535multDistributesOverMinusLeft (S left) (S centre) right =
535multDistributesOverMinusLeft (S left) (S centre) right =
536 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
536 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
537 ?multDistributesOverMinusLeftStepCase
537 ?multDistributesOverMinusLeftStepCase
@@ -544,7 +544,7 @@ multDistributesOverMinusRight left centre right =
545total powerSuccPowerLeft : (base : Nat) -> (exp : Nat) -> power base (S exp) =
545total powerSuccPowerLeft : (base : Nat) -> (exp : Nat) -> power base (S exp) =
546 base * (power base exp)
546 base * (power base exp)
547−powerSuccPowerLeft base exp = refl
547+powerSuccPowerLeft base exp = Refl
549total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
549total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
550 (power base exp) * (power base exp') = power base (exp + exp')
550 (power base exp) * (power base exp') = power base (exp + exp')
@@ -554,22 +554,22 @@ multPowerPowerPlus base (S exp) exp' =
554 ?multPowerPowerPlusStepCase
554 ?multPowerPowerPlusStepCase
556total powerZeroOne : (base : Nat) -> power base 0 = S Z
556total powerZeroOne : (base : Nat) -> power base 0 = S Z
557−powerZeroOne base = refl
557+powerZeroOne base = Refl
559total powerOneNeutral : (base : Nat) -> power base 1 = base
559total powerOneNeutral : (base : Nat) -> power base 1 = base
560−powerOneNeutral Z = refl
560+powerOneNeutral Z = Refl
561powerOneNeutral (S base) =
561powerOneNeutral (S base) =
562 let inductiveHypothesis = powerOneNeutral base in
562 let inductiveHypothesis = powerOneNeutral base in
563 ?powerOneNeutralStepCase
563 ?powerOneNeutralStepCase
565total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
565total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
566−powerOneSuccOne Z = refl
566+powerOneSuccOne Z = Refl
567powerOneSuccOne (S exp) =
567powerOneSuccOne (S exp) =
568 let inductiveHypothesis = powerOneSuccOne exp in
568 let inductiveHypothesis = powerOneSuccOne exp in
569 ?powerOneSuccOneStepCase
569 ?powerOneSuccOneStepCase
571total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
571total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
572−powerSuccSuccMult Z = refl
572+powerSuccSuccMult Z = Refl
573powerSuccSuccMult (S base) =
573powerSuccSuccMult (S base) =
574 let inductiveHypothesis = powerSuccSuccMult base in
574 let inductiveHypothesis = powerSuccSuccMult base in
575 ?powerSuccSuccMultStepCase
575 ?powerSuccSuccMultStepCase
@@ -583,11 +583,11 @@ powerPowerMultPower base exp (S exp') =
585total predSucc : (n : Nat) -> pred (S n) = n
585total predSucc : (n : Nat) -> pred (S n) = n
586−predSucc n = refl
586+predSucc n = Refl
588total minusSuccPred : (left : Nat) -> (right : Nat) ->
588total minusSuccPred : (left : Nat) -> (right : Nat) ->
589 left - (S right) = pred (left - right)
589 left - (S right) = pred (left - right)
590−minusSuccPred Z right = refl
590+minusSuccPred Z right = Refl
591minusSuccPred (S left) Z =
591minusSuccPred (S left) Z =
592 let inductiveHypothesis = minusSuccPred left Z in
592 let inductiveHypothesis = minusSuccPred left Z in
593 ?minusSuccPredStepCase
593 ?minusSuccPredStepCase
@@ -598,125 +598,125 @@ minusSuccPred (S left) (S right) =
598-- boolElim
598-- boolElim
599total boolElimSuccSucc : (cond : Bool) -> (t : Nat) -> (f : Nat) ->
599total boolElimSuccSucc : (cond : Bool) -> (t : Nat) -> (f : Nat) ->
600 S (boolElim cond t f) = boolElim cond (S t) (S f)
600 S (boolElim cond t f) = boolElim cond (S t) (S f)
601−boolElimSuccSucc True t f = refl
601+boolElimSuccSucc True t f = Refl
602−boolElimSuccSucc False t f = refl
602+boolElimSuccSucc False t f = Refl
604total boolElimPlusPlusLeft : (cond : Bool) -> (left : Nat) -> (t : Nat) -> (f : Nat) ->
604total boolElimPlusPlusLeft : (cond : Bool) -> (left : Nat) -> (t : Nat) -> (f : Nat) ->
605 left + (boolElim cond t f) = boolElim cond (left + t) (left + f)
605 left + (boolElim cond t f) = boolElim cond (left + t) (left + f)
606−boolElimPlusPlusLeft True left t f = refl
606+boolElimPlusPlusLeft True left t f = Refl
607−boolElimPlusPlusLeft False left t f = refl
607+boolElimPlusPlusLeft False left t f = Refl
609total boolElimPlusPlusRight : (cond : Bool) -> (right : Nat) -> (t : Nat) -> (f : Nat) ->
609total boolElimPlusPlusRight : (cond : Bool) -> (right : Nat) -> (t : Nat) -> (f : Nat) ->
610 (boolElim cond t f) + right = boolElim cond (t + right) (f + right)
610 (boolElim cond t f) + right = boolElim cond (t + right) (f + right)
611−boolElimPlusPlusRight True right t f = refl
611+boolElimPlusPlusRight True right t f = Refl
612−boolElimPlusPlusRight False right t f = refl
612+boolElimPlusPlusRight False right t f = Refl
614total boolElimMultMultLeft : (cond : Bool) -> (left : Nat) -> (t : Nat) -> (f : Nat) ->
614total boolElimMultMultLeft : (cond : Bool) -> (left : Nat) -> (t : Nat) -> (f : Nat) ->
615 left * (boolElim cond t f) = boolElim cond (left * t) (left * f)
615 left * (boolElim cond t f) = boolElim cond (left * t) (left * f)
616−boolElimMultMultLeft True left t f = refl
616+boolElimMultMultLeft True left t f = Refl
617−boolElimMultMultLeft False left t f = refl
617+boolElimMultMultLeft False left t f = Refl
619total boolElimMultMultRight : (cond : Bool) -> (right : Nat) -> (t : Nat) -> (f : Nat) ->
619total boolElimMultMultRight : (cond : Bool) -> (right : Nat) -> (t : Nat) -> (f : Nat) ->
620 (boolElim cond t f) * right = boolElim cond (t * right) (f * right)
620 (boolElim cond t f) * right = boolElim cond (t * right) (f * right)
621−boolElimMultMultRight True right t f = refl
621+boolElimMultMultRight True right t f = Refl
622−boolElimMultMultRight False right t f = refl
622+boolElimMultMultRight False right t f = Refl
625total lteNTrue : (n : Nat) -> lte n n = True
625total lteNTrue : (n : Nat) -> lte n n = True
626−lteNTrue Z = refl
626+lteNTrue Z = Refl
627lteNTrue (S n) = lteNTrue n
627lteNTrue (S n) = lteNTrue n
629−total lteSuccZeroFalse : (n : Nat) -> lte (S n) Z = False
629+total LTESuccZeroFalse : (n : Nat) -> lte (S n) Z = False
630−lteSuccZeroFalse Z = refl
630+LTESuccZeroFalse Z = Refl
631−lteSuccZeroFalse (S n) = refl
631+LTESuccZeroFalse (S n) = Refl
633-- Minimum and maximum
633-- Minimum and maximum
634total maximumAssociative : (l,c,r : Nat) -> maximum l (maximum c r) = maximum (maximum l c) r
634total maximumAssociative : (l,c,r : Nat) -> maximum l (maximum c r) = maximum (maximum l c) r
635−maximumAssociative Z c r = refl
635+maximumAssociative Z c r = Refl
636−maximumAssociative (S k) Z r = refl
636+maximumAssociative (S k) Z r = Refl
637−maximumAssociative (S k) (S j) Z = refl
637+maximumAssociative (S k) (S j) Z = Refl
638−maximumAssociative (S k) (S j) (S i) = rewrite maximumAssociative k j i in refl
638+maximumAssociative (S k) (S j) (S i) = rewrite maximumAssociative k j i in Refl
640total maximumCommutative : (l, r : Nat) -> maximum l r = maximum r l
640total maximumCommutative : (l, r : Nat) -> maximum l r = maximum r l
641−maximumCommutative Z Z = refl
641+maximumCommutative Z Z = Refl
642−maximumCommutative Z (S k) = refl
642+maximumCommutative Z (S k) = Refl
643−maximumCommutative (S k) Z = refl
643+maximumCommutative (S k) Z = Refl
644−maximumCommutative (S k) (S j) = rewrite maximumCommutative k j in refl
644+maximumCommutative (S k) (S j) = rewrite maximumCommutative k j in Refl
646total maximumIdempotent : (n : Nat) -> maximum n n = n
646total maximumIdempotent : (n : Nat) -> maximum n n = n
647−maximumIdempotent Z = refl
647+maximumIdempotent Z = Refl
648maximumIdempotent (S k) = cong (maximumIdempotent k)
648maximumIdempotent (S k) = cong (maximumIdempotent k)
650total minimumAssociative : (l,c,r : Nat) -> minimum l (minimum c r) = minimum (minimum l c) r
650total minimumAssociative : (l,c,r : Nat) -> minimum l (minimum c r) = minimum (minimum l c) r
651−minimumAssociative Z c r = refl
651+minimumAssociative Z c r = Refl
652−minimumAssociative (S k) Z r = refl
652+minimumAssociative (S k) Z r = Refl
653−minimumAssociative (S k) (S j) Z = refl
653+minimumAssociative (S k) (S j) Z = Refl
654−minimumAssociative (S k) (S j) (S i) = rewrite minimumAssociative k j i in refl
654+minimumAssociative (S k) (S j) (S i) = rewrite minimumAssociative k j i in Refl
656total minimumCommutative : (l, r : Nat) -> minimum l r = minimum r l
656total minimumCommutative : (l, r : Nat) -> minimum l r = minimum r l
657−minimumCommutative Z Z = refl
657+minimumCommutative Z Z = Refl
658−minimumCommutative Z (S k) = refl
658+minimumCommutative Z (S k) = Refl
659−minimumCommutative (S k) Z = refl
659+minimumCommutative (S k) Z = Refl
660−minimumCommutative (S k) (S j) = rewrite minimumCommutative k j in refl
660+minimumCommutative (S k) (S j) = rewrite minimumCommutative k j in Refl
662total minimumIdempotent : (n : Nat) -> minimum n n = n
662total minimumIdempotent : (n : Nat) -> minimum n n = n
663−minimumIdempotent Z = refl
663+minimumIdempotent Z = Refl
664minimumIdempotent (S k) = cong (minimumIdempotent k)
664minimumIdempotent (S k) = cong (minimumIdempotent k)
666total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
666total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
667−minimumZeroZeroRight Z = refl
667+minimumZeroZeroRight Z = Refl
668minimumZeroZeroRight (S right) = minimumZeroZeroRight right
668minimumZeroZeroRight (S right) = minimumZeroZeroRight right
670total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
670total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
671−minimumZeroZeroLeft Z = refl
671+minimumZeroZeroLeft Z = Refl
672−minimumZeroZeroLeft (S left) = refl
672+minimumZeroZeroLeft (S left) = Refl
674total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
674total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
675 minimum (S left) (S right) = S (minimum left right)
675 minimum (S left) (S right) = S (minimum left right)
676−minimumSuccSucc Z Z = refl
676+minimumSuccSucc Z Z = Refl
677−minimumSuccSucc (S left) Z = refl
677+minimumSuccSucc (S left) Z = Refl
678−minimumSuccSucc Z (S right) = refl
678+minimumSuccSucc Z (S right) = Refl
679minimumSuccSucc (S left) (S right) =
679minimumSuccSucc (S left) (S right) =
680 let inductiveHypothesis = minimumSuccSucc left right in
680 let inductiveHypothesis = minimumSuccSucc left right in
681 ?minimumSuccSuccStepCase
681 ?minimumSuccSuccStepCase
683total maximumZeroNRight : (right : Nat) -> maximum Z right = right
683total maximumZeroNRight : (right : Nat) -> maximum Z right = right
684−maximumZeroNRight Z = refl
684+maximumZeroNRight Z = Refl
685−maximumZeroNRight (S right) = refl
685+maximumZeroNRight (S right) = Refl
687total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
687total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
688−maximumZeroNLeft Z = refl
688+maximumZeroNLeft Z = Refl
689−maximumZeroNLeft (S left) = refl
689+maximumZeroNLeft (S left) = Refl
691total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
691total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
692 S (maximum left right) = maximum (S left) (S right)
692 S (maximum left right) = maximum (S left) (S right)
693−maximumSuccSucc Z Z = refl
693+maximumSuccSucc Z Z = Refl
694−maximumSuccSucc (S left) Z = refl
694+maximumSuccSucc (S left) Z = Refl
695−maximumSuccSucc Z (S right) = refl
695+maximumSuccSucc Z (S right) = Refl
696maximumSuccSucc (S left) (S right) =
696maximumSuccSucc (S left) (S right) =
697 let inductiveHypothesis = maximumSuccSucc left right in
697 let inductiveHypothesis = maximumSuccSucc left right in
698 ?maximumSuccSuccStepCase
698 ?maximumSuccSuccStepCase
700total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
700total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
701−sucMaxL Z = refl
701+sucMaxL Z = Refl
702sucMaxL (S l) = cong (sucMaxL l)
702sucMaxL (S l) = cong (sucMaxL l)
704total sucMaxR : (l : Nat) -> maximum l (S l) = (S l)
704total sucMaxR : (l : Nat) -> maximum l (S l) = (S l)
705−sucMaxR Z = refl
705+sucMaxR Z = Refl
706sucMaxR (S l) = cong (sucMaxR l)
706sucMaxR (S l) = cong (sucMaxR l)
708total sucMinL : (l : Nat) -> minimum (S l) l = l
708total sucMinL : (l : Nat) -> minimum (S l) l = l
709−sucMinL Z = refl
709+sucMinL Z = Refl
710sucMinL (S l) = cong (sucMinL l)
710sucMinL (S l) = cong (sucMinL l)
712total sucMinR : (l : Nat) -> minimum l (S l) = l
712total sucMinR : (l : Nat) -> minimum l (S l) = l
713−sucMinR Z = refl
713+sucMinR Z = Refl
714sucMinR (S l) = cong (sucMinR l)
714sucMinR (S l) = cong (sucMinR l)
716-- div and mod
716-- div and mod
717total modZeroZero : (n : Nat) -> mod 0 n = Z
717total modZeroZero : (n : Nat) -> mod 0 n = Z
718−modZeroZero Z = refl
718+modZeroZero Z = Refl
719−modZeroZero (S n) = refl
719+modZeroZero (S n) = Refl
721--------------------------------------------------------------------------------
721--------------------------------------------------------------------------------