@@ -407,28 +407,29 @@ total plusZeroRightNeutral : (left : Nat) -> left + 0 = left
407plusZeroRightNeutral Z = Refl
407plusZeroRightNeutral Z = Refl
408plusZeroRightNeutral (S n) =
408plusZeroRightNeutral (S n) =
409 let inductiveHypothesis = plusZeroRightNeutral n in
409 let inductiveHypothesis = plusZeroRightNeutral n in
410− ?plusZeroRightNeutralStepCase
410+ rewrite inductiveHypothesis in Refl
412total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
412total plusSuccRightSucc : (left : Nat) -> (right : Nat) ->
413 S (left + right) = left + (S right)
413 S (left + right) = left + (S right)
414plusSuccRightSucc Z right = Refl
414plusSuccRightSucc Z right = Refl
415plusSuccRightSucc (S left) right =
415plusSuccRightSucc (S left) right =
416 let inductiveHypothesis = plusSuccRightSucc left right in
416 let inductiveHypothesis = plusSuccRightSucc left right in
417− ?plusSuccRightSuccStepCase
417+ rewrite inductiveHypothesis in Refl
419total plusCommutative : (left : Nat) -> (right : Nat) ->
419total plusCommutative : (left : Nat) -> (right : Nat) ->
420 left + right = right + left
420 left + right = right + left
421−plusCommutative Z right = ?plusCommutativeBaseCase
421+plusCommutative Z right = rewrite plusZeroRightNeutral right in Refl
422plusCommutative (S left) right =
422plusCommutative (S left) right =
423 let inductiveHypothesis = plusCommutative left right in
423 let inductiveHypothesis = plusCommutative left right in
424− ?plusCommutativeStepCase
424+ rewrite inductiveHypothesis in
425+ rewrite plusSuccRightSucc right left in Refl
426total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
427total plusAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
427 left + (centre + right) = (left + centre) + right
428 left + (centre + right) = (left + centre) + right
428plusAssociative Z centre right = Refl
429plusAssociative Z centre right = Refl
429plusAssociative (S left) centre right =
430plusAssociative (S left) centre right =
430 let inductiveHypothesis = plusAssociative left centre right in
431 let inductiveHypothesis = plusAssociative left centre right in
431− ?plusAssociativeStepCase
432+ rewrite inductiveHypothesis in Refl
433total plusConstantRight : (left : Nat) -> (right : Nat) -> (c : Nat) ->
434total plusConstantRight : (left : Nat) -> (right : Nat) -> (c : Nat) ->
434 (p : left = right) -> left + c = right + c
435 (p : left = right) -> left + c = right + c
@@ -443,24 +444,26 @@ plusOneSucc n = Refl
444total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
445total plusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
445 (p : left + right = left + right') -> right = right'
446 (p : left + right = left + right') -> right = right'
446−plusLeftCancel Z right right' p = ?plusLeftCancelBaseCase
447+plusLeftCancel Z right right' p = p
447plusLeftCancel (S left) right right' p =
448plusLeftCancel (S left) right right' p =
448 let inductiveHypothesis = plusLeftCancel left right right' in
449 let inductiveHypothesis = plusLeftCancel left right right' in
449− ?plusLeftCancelStepCase
450+ inductiveHypothesis (succInjective _ _ p)
451total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
452total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
452 (p : left + right = left' + right) -> left = left'
453 (p : left + right = left' + right) -> left = left'
453−plusRightCancel left left' Z p = ?plusRightCancelBaseCase
454+plusRightCancel left left' Z p = rewrite sym (plusZeroRightNeutral left) in
455+ rewrite sym (plusZeroRightNeutral left') in
454plusRightCancel left left' (S right) p =
457plusRightCancel left left' (S right) p =
455− let inductiveHypothesis = plusRightCancel left left' right in
458+ plusRightCancel left left' right
456− ?plusRightCancelStepCase
459+ (succInjective _ _ (rewrite plusSuccRightSucc left right in
460+ rewrite plusSuccRightSucc left' right in p))
458total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
462total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
459 (p : left + right = left) -> right = Z
463 (p : left + right = left) -> right = Z
460−plusLeftLeftRightZero Z right p = ?plusLeftLeftRightZeroBaseCase
464+plusLeftLeftRightZero Z right p = p
461plusLeftLeftRightZero (S left) right p =
465plusLeftLeftRightZero (S left) right p =
462− let inductiveHypothesis = plusLeftLeftRightZero left right in
466+ plusLeftLeftRightZero left right (succInjective _ _ p)
463− ?plusLeftLeftRightZeroStepCase
466total multZeroLeftZero : (right : Nat) -> Z * right = Z
469total multZeroLeftZero : (right : Nat) -> Z * right = Z
@@ -468,16 +471,18 @@ multZeroLeftZero right = Refl
469total multZeroRightZero : (left : Nat) -> left * Z = Z
472total multZeroRightZero : (left : Nat) -> left * Z = Z
470multZeroRightZero Z = Refl
473multZeroRightZero Z = Refl
471−multZeroRightZero (S left) =
474+multZeroRightZero (S left) = multZeroRightZero left
472− let inductiveHypothesis = multZeroRightZero left in
473− ?multZeroRightZeroStepCase
475total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
476total multRightSuccPlus : (left : Nat) -> (right : Nat) ->
476 left * (S right) = left + (left * right)
477 left * (S right) = left + (left * right)
477multRightSuccPlus Z right = Refl
478multRightSuccPlus Z right = Refl
478multRightSuccPlus (S left) right =
479multRightSuccPlus (S left) right =
479 let inductiveHypothesis = multRightSuccPlus left right in
480 let inductiveHypothesis = multRightSuccPlus left right in
480− ?multRightSuccPlusStepCase
481+ rewrite inductiveHypothesis in
482+ rewrite plusAssociative left right (mult left right) in
483+ rewrite plusAssociative right left (mult left right) in
484+ rewrite plusCommutative right left in
482total multLeftSuccPlus : (left : Nat) -> (right : Nat) ->
487total multLeftSuccPlus : (left : Nat) -> (right : Nat) ->
483 (S left) * right = right + (left * right)
488 (S left) * right = right + (left * right)
@@ -485,43 +490,57 @@ multLeftSuccPlus left right = Refl
486total multCommutative : (left : Nat) -> (right : Nat) ->
491total multCommutative : (left : Nat) -> (right : Nat) ->
487 left * right = right * left
492 left * right = right * left
488−multCommutative Z right = ?multCommutativeBaseCase
493+multCommutative Z right = rewrite multZeroRightZero right in Refl
489multCommutative (S left) right =
494multCommutative (S left) right =
490 let inductiveHypothesis = multCommutative left right in
495 let inductiveHypothesis = multCommutative left right in
491− ?multCommutativeStepCase
496+ rewrite inductiveHypothesis in
497+ rewrite multRightSuccPlus right left in
493total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
500total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
494 left * (centre + right) = (left * centre) + (left * right)
501 left * (centre + right) = (left * centre) + (left * right)
495multDistributesOverPlusRight Z centre right = Refl
502multDistributesOverPlusRight Z centre right = Refl
496multDistributesOverPlusRight (S left) centre right =
503multDistributesOverPlusRight (S left) centre right =
497 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
504 let inductiveHypothesis = multDistributesOverPlusRight left centre right in
498− ?multDistributesOverPlusRightStepCase
505+ rewrite inductiveHypothesis in
506+ rewrite plusAssociative (plus centre (mult left centre)) right (mult left right) in
507+ rewrite sym (plusAssociative centre (mult left centre) right) in
508+ rewrite plusCommutative (mult left centre) right in
509+ rewrite plusAssociative centre right (mult left centre) in
510+ rewrite plusAssociative (plus centre right) (mult left centre) (mult left right) in
500total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
513total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
501 (left + centre) * right = (left * right) + (centre * right)
514 (left + centre) * right = (left * right) + (centre * right)
502multDistributesOverPlusLeft Z centre right = Refl
515multDistributesOverPlusLeft Z centre right = Refl
503multDistributesOverPlusLeft (S left) centre right =
516multDistributesOverPlusLeft (S left) centre right =
504 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
517 let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
505− ?multDistributesOverPlusLeftStepCase
518+ rewrite inductiveHypothesis in
519+ rewrite plusAssociative right (mult left right) (mult centre right) in
507total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
522total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
508 left * (centre * right) = (left * centre) * right
523 left * (centre * right) = (left * centre) * right
509multAssociative Z centre right = Refl
524multAssociative Z centre right = Refl
510multAssociative (S left) centre right =
525multAssociative (S left) centre right =
511 let inductiveHypothesis = multAssociative left centre right in
526 let inductiveHypothesis = multAssociative left centre right in
512− ?multAssociativeStepCase
527+ rewrite inductiveHypothesis in
528+ rewrite multDistributesOverPlusLeft centre (mult left centre) right in
514total multOneLeftNeutral : (right : Nat) -> 1 * right = right
531total multOneLeftNeutral : (right : Nat) -> 1 * right = right
515multOneLeftNeutral Z = Refl
532multOneLeftNeutral Z = Refl
516multOneLeftNeutral (S right) =
533multOneLeftNeutral (S right) =
517 let inductiveHypothesis = multOneLeftNeutral right in
534 let inductiveHypothesis = multOneLeftNeutral right in
518− ?multOneLeftNeutralStepCase
535+ rewrite inductiveHypothesis in
520total multOneRightNeutral : (left : Nat) -> left * 1 = left
538total multOneRightNeutral : (left : Nat) -> left * 1 = left
521multOneRightNeutral Z = Refl
539multOneRightNeutral Z = Refl
522multOneRightNeutral (S left) =
540multOneRightNeutral (S left) =
523 let inductiveHypothesis = multOneRightNeutral left in
541 let inductiveHypothesis = multOneRightNeutral left in
524− ?multOneRightNeutralStepCase
542+ rewrite inductiveHypothesis in
527total minusSuccSucc : (left : Nat) -> (right : Nat) ->
546total minusSuccSucc : (left : Nat) -> (right : Nat) ->
@@ -558,29 +577,37 @@ minusMinusMinusPlus (S left) Z right = Refl
558minusMinusMinusPlus Z (S centre) right = Refl
577minusMinusMinusPlus Z (S centre) right = Refl
559minusMinusMinusPlus (S left) (S centre) right =
578minusMinusMinusPlus (S left) (S centre) right =
560 let inductiveHypothesis = minusMinusMinusPlus left centre right in
579 let inductiveHypothesis = minusMinusMinusPlus left centre right in
561− ?minusMinusMinusPlusStepCase
580+ rewrite inductiveHypothesis in
563total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
583total plusMinusLeftCancel : (left : Nat) -> (right : Nat) -> (right' : Nat) ->
564 (left + right) - (left + right') = right - right'
584 (left + right) - (left + right') = right - right'
565plusMinusLeftCancel Z right right' = Refl
585plusMinusLeftCancel Z right right' = Refl
566plusMinusLeftCancel (S left) right right' =
586plusMinusLeftCancel (S left) right right' =
567 let inductiveHypothesis = plusMinusLeftCancel left right right' in
587 let inductiveHypothesis = plusMinusLeftCancel left right right' in
568− ?plusMinusLeftCancelStepCase
588+ rewrite inductiveHypothesis in
570total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
591total multDistributesOverMinusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
571 (left - centre) * right = (left * right) - (centre * right)
592 (left - centre) * right = (left * right) - (centre * right)
572multDistributesOverMinusLeft Z Z right = Refl
593multDistributesOverMinusLeft Z Z right = Refl
573multDistributesOverMinusLeft (S left) Z right =
594multDistributesOverMinusLeft (S left) Z right =
574− ?multDistributesOverMinusLeftBaseCase
595+ rewrite (minusZeroRight (plus right (mult left right))) in Refl
575multDistributesOverMinusLeft Z (S centre) right = Refl
596multDistributesOverMinusLeft Z (S centre) right = Refl
576multDistributesOverMinusLeft (S left) (S centre) right =
597multDistributesOverMinusLeft (S left) (S centre) right =
577 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
598 let inductiveHypothesis = multDistributesOverMinusLeft left centre right in
578− ?multDistributesOverMinusLeftStepCase
599+ rewrite inductiveHypothesis in
600+ rewrite plusMinusLeftCancel right (mult left right) (mult centre right) in
580total multDistributesOverMinusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
603total multDistributesOverMinusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
581 left * (centre - right) = (left * centre) - (left * right)
604 left * (centre - right) = (left * centre) - (left * right)
582multDistributesOverMinusRight left centre right =
605multDistributesOverMinusRight left centre right =
583− ?multDistributesOverMinusRightBody
606+ rewrite multCommutative left (minus centre right) in
607+ rewrite multDistributesOverMinusLeft centre right left in
608+ rewrite multCommutative centre left in
609+ rewrite multCommutative right left in
586total powerSuccPowerLeft : (base : Nat) -> (exp : Nat) -> power base (S exp) =
613total powerSuccPowerLeft : (base : Nat) -> (exp : Nat) -> power base (S exp) =
@@ -589,10 +616,13 @@ powerSuccPowerLeft base exp = Refl
590total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
617total multPowerPowerPlus : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
591 (power base exp) * (power base exp') = power base (exp + exp')
618 (power base exp) * (power base exp') = power base (exp + exp')
592−multPowerPowerPlus base Z exp' = ?multPowerPowerPlusBaseCase
619+multPowerPowerPlus base Z exp' =
620+ rewrite sym (plusZeroRightNeutral (power base exp')) in Refl
593multPowerPowerPlus base (S exp) exp' =
621multPowerPowerPlus base (S exp) exp' =
594 let inductiveHypothesis = multPowerPowerPlus base exp exp' in
622 let inductiveHypothesis = multPowerPowerPlus base exp exp' in
595− ?multPowerPowerPlusStepCase
623+ rewrite sym inductiveHypothesis in
624+ rewrite sym (multAssociative base (power base exp) (power base exp')) in
597total powerZeroOne : (base : Nat) -> power base 0 = S Z
627total powerZeroOne : (base : Nat) -> power base 0 = S Z
598powerZeroOne base = Refl
628powerZeroOne base = Refl
@@ -601,26 +631,27 @@ total powerOneNeutral : (base : Nat) -> power base 1 = base
601powerOneNeutral Z = Refl
631powerOneNeutral Z = Refl
602powerOneNeutral (S base) =
632powerOneNeutral (S base) =
603 let inductiveHypothesis = powerOneNeutral base in
633 let inductiveHypothesis = powerOneNeutral base in
604− ?powerOneNeutralStepCase
634+ rewrite inductiveHypothesis in Refl
606total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
636total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
607powerOneSuccOne Z = Refl
637powerOneSuccOne Z = Refl
608powerOneSuccOne (S exp) =
638powerOneSuccOne (S exp) =
609 let inductiveHypothesis = powerOneSuccOne exp in
639 let inductiveHypothesis = powerOneSuccOne exp in
610− ?powerOneSuccOneStepCase
640+ rewrite inductiveHypothesis in Refl
612total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
642total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
613powerSuccSuccMult Z = Refl
643powerSuccSuccMult Z = Refl
614−powerSuccSuccMult (S base) =
644+powerSuccSuccMult (S base) = rewrite multOneRightNeutral base in Refl
615− let inductiveHypothesis = powerSuccSuccMult base in
616− ?powerSuccSuccMultStepCase
618total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
646total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
619 power (power base exp) exp' = power base (exp * exp')
647 power (power base exp) exp' = power base (exp * exp')
620−powerPowerMultPower base exp Z = ?powerPowerMultPowerBaseCase
648+powerPowerMultPower base exp Z = rewrite multZeroRightZero exp in Refl
621powerPowerMultPower base exp (S exp') =
649powerPowerMultPower base exp (S exp') =
622 let inductiveHypothesis = powerPowerMultPower base exp exp' in
650 let inductiveHypothesis = powerPowerMultPower base exp exp' in
623− ?powerPowerMultPowerStepCase
651+ rewrite inductiveHypothesis in
652+ rewrite multRightSuccPlus exp exp' in
653+ rewrite sym (multPowerPowerPlus base exp (mult exp exp')) in
626total predSucc : (n : Nat) -> pred (S n) = n
657total predSucc : (n : Nat) -> pred (S n) = n
@@ -630,11 +661,10 @@ total minusSuccPred : (left : Nat) -> (right : Nat) ->
630 left - (S right) = pred (left - right)
661 left - (S right) = pred (left - right)
631minusSuccPred Z right = Refl
662minusSuccPred Z right = Refl
632minusSuccPred (S left) Z =
663minusSuccPred (S left) Z =
633− let inductiveHypothesis = minusSuccPred left Z in
664+ rewrite minusZeroRight left in Refl
634− ?minusSuccPredStepCase
635minusSuccPred (S left) (S right) =
665minusSuccPred (S left) (S right) =
636 let inductiveHypothesis = minusSuccPred left right in
666 let inductiveHypothesis = minusSuccPred left right in
637− ?minusSuccPredStepCase'
667+ rewrite inductiveHypothesis in Refl
639-- ifThenElse
669-- ifThenElse
640total ifThenElseSuccSucc : (cond : Bool) -> (t : Nat) -> (f : Nat) ->
670total ifThenElseSuccSucc : (cond : Bool) -> (t : Nat) -> (f : Nat) ->
@@ -717,9 +747,7 @@ total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
717minimumSuccSucc Z Z = Refl
747minimumSuccSucc Z Z = Refl
718minimumSuccSucc (S left) Z = Refl
748minimumSuccSucc (S left) Z = Refl
719minimumSuccSucc Z (S right) = Refl
749minimumSuccSucc Z (S right) = Refl
720−minimumSuccSucc (S left) (S right) =
750+minimumSuccSucc (S left) (S right) = Refl
721− let inductiveHypothesis = minimumSuccSucc left right in
722− ?minimumSuccSuccStepCase
724total maximumZeroNRight : (right : Nat) -> maximum Z right = right
752total maximumZeroNRight : (right : Nat) -> maximum Z right = right
725maximumZeroNRight Z = Refl
753maximumZeroNRight Z = Refl
@@ -734,9 +762,7 @@ total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
734maximumSuccSucc Z Z = Refl
762maximumSuccSucc Z Z = Refl
735maximumSuccSucc (S left) Z = Refl
763maximumSuccSucc (S left) Z = Refl
736maximumSuccSucc Z (S right) = Refl
764maximumSuccSucc Z (S right) = Refl
737−maximumSuccSucc (S left) (S right) =
765+maximumSuccSucc (S left) (S right) = Refl
738− let inductiveHypothesis = maximumSuccSucc left right in
739− ?maximumSuccSuccStepCase
741total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
767total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
742sucMaxL Z = Refl
768sucMaxL Z = Refl
@@ -754,252 +780,3 @@ total sucMinR : (l : Nat) -> minimum l (S l) = l
754sucMinR Z = Refl
780sucMinR Z = Refl
755sucMinR (S l) = cong (sucMinR l)
781sucMinR (S l) = cong (sucMinR l)
757−--------------------------------------------------------------------------------
759−--------------------------------------------------------------------------------
761−powerPowerMultPowerStepCase = proof {
763− rewrite sym inductiveHypothesis;
764− rewrite sym (multRightSuccPlus exp exp');
765− rewrite (multPowerPowerPlus base exp (mult exp exp'));
769−powerPowerMultPowerBaseCase = proof {
771− rewrite sym (multZeroRightZero exp);
775−powerSuccSuccMultStepCase = proof {
777− rewrite (multOneRightNeutral base);
778− rewrite sym (multOneRightNeutral base);
782−powerOneSuccOneStepCase = proof {
784− rewrite inductiveHypothesis;
785− rewrite sym (plusZeroRightNeutral (power (S Z) exp));
789−powerOneNeutralStepCase = proof {
791− rewrite inductiveHypothesis;
795−multAssociativeStepCase = proof {
797− rewrite sym (multDistributesOverPlusLeft centre (mult left centre) right);
798− rewrite inductiveHypothesis;
802−minusSuccPredStepCase' = proof {
804− rewrite sym inductiveHypothesis;
808−minusSuccPredStepCase = proof {
810− rewrite (minusZeroRight left);
814−multPowerPowerPlusStepCase = proof {
816− rewrite inductiveHypothesis;
817− rewrite (multAssociative base (power base exp) (power base exp'));
821−multPowerPowerPlusBaseCase = proof {
823− rewrite (plusZeroRightNeutral (power base exp'));
827−multOneRightNeutralStepCase = proof {
829− rewrite inductiveHypothesis;
833−multOneLeftNeutralStepCase = proof {
835− rewrite (plusZeroRightNeutral right);
839−multDistributesOverPlusLeftStepCase = proof {
841− rewrite sym inductiveHypothesis;
842− rewrite sym (plusAssociative right (mult left right) (mult centre right));
846−multDistributesOverPlusRightStepCase = proof {
848− rewrite sym inductiveHypothesis;
849− rewrite sym (plusAssociative (plus centre (mult left centre)) right (mult left right));
850− rewrite (plusAssociative centre (mult left centre) right);
851− rewrite sym (plusCommutative (mult left centre) right);
852− rewrite sym (plusAssociative centre right (mult left centre));
853− rewrite sym (plusAssociative (plus centre right) (mult left centre) (mult left right));
857−multCommutativeStepCase = proof {
859− rewrite sym (multRightSuccPlus right left);
860− rewrite inductiveHypothesis;
864−multCommutativeBaseCase = proof {
866− rewrite (multZeroRightZero right);
870−multRightSuccPlusStepCase = proof {
872− rewrite inductiveHypothesis;
873− rewrite sym inductiveHypothesis;
874− rewrite sym (plusAssociative right left (mult left right));
875− rewrite sym (plusCommutative right left);
876− rewrite (plusAssociative left right (mult left right));
880−multZeroRightZeroStepCase = proof {
882− rewrite inductiveHypothesis;
886−plusAssociativeStepCase = proof {
888− rewrite inductiveHypothesis;
892−plusCommutativeStepCase = proof {
894− rewrite (plusSuccRightSucc right left);
895− rewrite inductiveHypothesis;
899−plusSuccRightSuccStepCase = proof {
901− rewrite inductiveHypothesis;
905−plusCommutativeBaseCase = proof {
907− rewrite sym (plusZeroRightNeutral right);
911−plusZeroRightNeutralStepCase = proof {
913− rewrite inductiveHypothesis;
917−maximumSuccSuccStepCase = proof {
919− rewrite sym (ifThenElseSuccSucc (lte left right) (S right) (S left));
923−minimumSuccSuccStepCase = proof {
925− rewrite (ifThenElseSuccSucc (lte left right) (S left) (S right));
929−multDistributesOverMinusRightBody = proof {
931− rewrite sym (multCommutative left (minus centre right));
932− rewrite sym (multDistributesOverMinusLeft centre right left);
933− rewrite sym (multCommutative centre left);
934− rewrite sym (multCommutative right left);
938−multDistributesOverMinusLeftStepCase = proof {
940− rewrite sym (plusMinusLeftCancel right (mult left right) (mult centre right));
944−multDistributesOverMinusLeftBaseCase = proof {
946− rewrite (minusZeroRight (plus right (mult left right)));
950−plusMinusLeftCancelStepCase = proof {
952− rewrite inductiveHypothesis;
956−minusMinusMinusPlusStepCase = proof {
958− rewrite inductiveHypothesis;
962−plusLeftLeftRightZeroBaseCase = proof {
968−plusLeftLeftRightZeroStepCase = proof {
970− refine inductiveHypothesis;
971− let p' = succInjective (plus left right) left p;
976−plusRightCancelStepCase = proof {
978− refine inductiveHypothesis;
979− refine succInjective _ _ ?;
980− rewrite sym (plusSuccRightSucc left right);
981− rewrite sym (plusSuccRightSucc left' right);
986−plusRightCancelBaseCase = proof {
988− rewrite (plusZeroRightNeutral left);
989− rewrite (plusZeroRightNeutral left');
994−plusLeftCancelStepCase = proof {
996− let injectiveProof = succInjective (plus left right) (plus left right') p;
997− rewrite (inductiveHypothesis injectiveProof);
1001−plusLeftCancelBaseCase = proof {