Hide more stuff (#124)

This commit is contained in:
Patrick Stevens
2020-04-19 07:54:37 +01:00
committed by GitHub
parent 3afdc6d45b
commit e660eceb43
11 changed files with 348 additions and 346 deletions

View File

@@ -15,6 +15,7 @@ open import Maybe
module Numbers.BinaryNaturals.Subtraction where
private
aMinusAGo : (a : BinNat) mapMaybe canonical (go zero a a) yes []
aMinusAGo [] = refl
aMinusAGo (zero :: a) with aMinusAGo a
@@ -397,13 +398,14 @@ module Numbers.BinaryNaturals.Subtraction where
bad' : one :: a :: as one :: [] False
bad' ()
doublingLemma : (y : BinNat) NToBinNat (2 *N binNatToN y) canonical (zero :: y)
doublingLemma y with inspect (canonical y)
doublingLemma y | [] with pr rewrite binNatToNZero' y pr | pr = refl
doublingLemma y | (a :: as) with pr with inspect (binNatToN y)
doublingLemma y | (a :: as) with pr | zero with pr2 rewrite binNatToNZero y pr2 = exFalso (nonEmptyNotEmpty (equalityCommutative pr))
doublingLemma y | (a :: as) with pr | succ bl with pr2 rewrite pr | pr2 | doubleIsBitShift' bl | equalityCommutative pr = applyEquality (zero ::_) (equalityCommutative (transitivity (equalityCommutative (binToBin y)) (applyEquality NToBinNat pr2)))
doublingLemma : (y : BinNat) NToBinNat (2 *N binNatToN y) canonical (zero :: y)
doublingLemma y with inspect (canonical y)
doublingLemma y | [] with pr rewrite binNatToNZero' y pr | pr = refl
doublingLemma y | (a :: as) with pr with inspect (binNatToN y)
doublingLemma y | (a :: as) with pr | zero with pr2 rewrite binNatToNZero y pr2 = exFalso (nonEmptyNotEmpty (equalityCommutative pr))
doublingLemma y | (a :: as) with pr | succ bl with pr2 rewrite pr | pr2 | doubleIsBitShift' bl | equalityCommutative pr = applyEquality (zero ::_) (equalityCommutative (transitivity (equalityCommutative (binToBin y)) (applyEquality NToBinNat pr2)))
private
doubling : (a : ) {y : BinNat} (NToBinNat a zero :: y) binNatToN y +N (binNatToN y +N 0) a
doubling a {y} pr = NToBinNatInj (binNatToN y +N (binNatToN y +N zero)) a (transitivity (transitivity (equalityCommutative (NToBinNatIsCanonical (binNatToN y +N (binNatToN y +N zero)))) (doublingLemma y)) (applyEquality canonical (equalityCommutative pr)))