Reshuffle orders (#91)

This commit is contained in:
Patrick Stevens
2019-12-29 12:11:21 +00:00
committed by GitHub
parent 876396eaaa
commit b6ef9b46f2
57 changed files with 476 additions and 462 deletions

View File

@@ -9,7 +9,7 @@ open import Numbers.Naturals.Order
open import Groups.Definition
open import Numbers.BinaryNaturals.Definition
open import Semirings.Definition
open import Orders
open import Orders.Total.Definition
module Numbers.BinaryNaturals.Addition where

View File

@@ -8,7 +8,7 @@ open import Numbers.Naturals.Order
open import Numbers.Naturals.Definition
open import Groups.Definition
open import Semirings.Definition
open import Orders
open import Orders.Total.Definition
module Numbers.BinaryNaturals.Definition where

View File

@@ -1,6 +1,6 @@
{-# OPTIONS --warning=error --safe --without-K #-}
open import WellFoundedInduction
open import Orders.WellFounded.Induction
open import LogicalFormulae
open import Functions
open import Lists.Lists
@@ -9,7 +9,7 @@ open import Numbers.Naturals.Order.Lemmas
open import Numbers.Naturals.Semiring
open import Groups.Definition
open import Numbers.BinaryNaturals.Definition
open import Orders
open import Orders.Total.Definition
open import Semirings.Definition
module Numbers.BinaryNaturals.Order where
@@ -288,25 +288,25 @@ module Numbers.BinaryNaturals.Order where
chopDouble a b i with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
chopDouble a b zero | inl (inl a<b) with TotalOrder.totality TotalOrder (2 *N binNatToN a) (2 *N binNatToN b)
chopDouble a b zero | inl (inl a<b) | inl (inl x) = refl
chopDouble a b zero | inl (inl a<b) | inl (inr b<a) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) b<a (lessRespectsMultiplicationLeft (binNatToN a) (binNatToN b) 2 a<b (le 1 refl))))
chopDouble a b zero | inl (inl a<b) | inr a=b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) a=b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
chopDouble a b zero | inl (inl a<b) | inl (inr b<a) = exFalso (TotalOrder.irreflexive TotalOrder (TotalOrder.<Transitive TotalOrder b<a (lessRespectsMultiplicationLeft (binNatToN a) (binNatToN b) 2 a<b (le 1 refl))))
chopDouble a b zero | inl (inl a<b) | inr a=b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) a=b = exFalso (TotalOrder.irreflexive TotalOrder a<b)
chopDouble a b one | inl (inl a<b) with TotalOrder.totality TotalOrder (2 *N binNatToN a) (2 *N binNatToN b)
chopDouble a b one | inl (inl a<b) | inl (inl 2a<2b) = refl
chopDouble a b one | inl (inl a<b) | inl (inr 2b<2a) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) a<b (cancelInequalityLeft {2} 2b<2a)))
chopDouble a b one | inl (inl a<b) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
chopDouble a b one | inl (inl a<b) | inl (inr 2b<2a) = exFalso (TotalOrder.irreflexive TotalOrder (TotalOrder.<Transitive (TotalOrder) a<b (cancelInequalityLeft {2} 2b<2a)))
chopDouble a b one | inl (inl a<b) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (TotalOrder.irreflexive (TotalOrder) a<b)
chopDouble a b zero | inl (inr b<a) with TotalOrder.totality TotalOrder (2 *N binNatToN a) (2 *N binNatToN b)
chopDouble a b zero | inl (inr b<a) | inl (inl 2a<2b) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) b<a (cancelInequalityLeft {2} {binNatToN a} {binNatToN b} 2a<2b)))
chopDouble a b zero | inl (inr b<a) | inl (inl 2a<2b) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) b<a (cancelInequalityLeft {2} {binNatToN a} {binNatToN b} 2a<2b)))
chopDouble a b zero | inl (inr b<a) | inl (inr 2b<2a) = refl
chopDouble a b zero | inl (inr b<a) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
chopDouble a b zero | inl (inr b<a) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
chopDouble a b one | inl (inr b<a) with TotalOrder.totality TotalOrder (2 *N binNatToN a) (2 *N binNatToN b)
chopDouble a b one | inl (inr b<a) | inl (inl 2a<2b) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) b<a (cancelInequalityLeft {2} 2a<2b)))
chopDouble a b one | inl (inr b<a) | inl (inl 2a<2b) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) b<a (cancelInequalityLeft {2} 2a<2b)))
chopDouble a b one | inl (inr b<a) | inl (inr x) = refl
chopDouble a b one | inl (inr b<a) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
chopDouble a b one | inl (inr b<a) | inr 2a=2b rewrite productCancelsLeft 2 (binNatToN a) (binNatToN b) (le 1 refl) 2a=2b = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
chopDouble a b i | inr x with TotalOrder.totality TotalOrder (binNatToN (i :: a)) (binNatToN (i :: b))
chopDouble a b zero | inr a=b | inl (inl a<b) rewrite a=b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
chopDouble a b one | inr a=b | inl (inl a<b) rewrite a=b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
chopDouble a b zero | inr a=b | inl (inr b<a) rewrite a=b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
chopDouble a b one | inr a=b | inl (inr b<a) rewrite a=b = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
chopDouble a b zero | inr a=b | inl (inl a<b) rewrite a=b = exFalso (TotalOrder.irreflexive (TotalOrder) a<b)
chopDouble a b one | inr a=b | inl (inl a<b) rewrite a=b = exFalso (TotalOrder.irreflexive (TotalOrder) a<b)
chopDouble a b zero | inr a=b | inl (inr b<a) rewrite a=b = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
chopDouble a b one | inr a=b | inl (inr b<a) rewrite a=b = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
chopDouble a b i | inr a=b | inr x = refl
succNotLess : {n : } succ n <N n False
@@ -315,12 +315,12 @@ module Numbers.BinaryNaturals.Order where
<BIsInherited : (a b : BinNat) a <BInherited b a <B b
<BIsInherited [] b with TotalOrder.totality TotalOrder 0 (binNatToN b)
<BIsInherited [] b | inl (inl x) with inspect (binNatToN b)
<BIsInherited [] b | inl (inl x) | 0 with pr rewrite binNatToNZero b pr | pr = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) x)
<BIsInherited [] b | inl (inl x) | 0 with pr rewrite binNatToNZero b pr | pr = exFalso (TotalOrder.irreflexive (TotalOrder) x)
<BIsInherited [] b | inl (inl x) | (succ bl) with pr rewrite pr = equalityCommutative (zeroLess b λ p zeroNotSucc bl b p pr)
<BIsInherited [] b | inr 0=b rewrite canonicalSecond [] b Equal | binNatToNZero b (equalityCommutative 0=b) = refl
<BIsInherited (a :: as) [] with TotalOrder.totality TotalOrder (binNatToN (a :: as)) 0
<BIsInherited (a :: as) [] | inl (inr x) with inspect (binNatToN (a :: as))
<BIsInherited (a :: as) [] | inl (inr x) | zero with pr rewrite binNatToNZero (a :: as) pr | pr = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) x)
<BIsInherited (a :: as) [] | inl (inr x) | zero with pr rewrite binNatToNZero (a :: as) pr | pr = exFalso (TotalOrder.irreflexive (TotalOrder) x)
<BIsInherited (a :: as) [] | inl (inr x) | succ y with pr rewrite pr = equalityCommutative (zeroLess' (a :: as) λ i zeroNotSucc y (a :: as) i pr)
<BIsInherited (a :: as) [] | inr x rewrite canonicalFirst (a :: as) [] Equal | binNatToNZero (a :: as) x = refl
<BIsInherited (zero :: a) (zero :: b) = transitivity (chopDouble a b zero) (<BIsInherited a b)
@@ -331,21 +331,21 @@ module Numbers.BinaryNaturals.Order where
t : a <BInherited b FirstLess
t with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
t | inl (inl x) = refl
t | inl (inr x) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) x a<b))
t | inr x rewrite x = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
t | inl (inr x) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) x a<b))
t | inr x rewrite x = exFalso (TotalOrder.irreflexive (TotalOrder) a<b)
indHyp : FirstLess go<B Equal a b
indHyp = transitivity (equalityCommutative t) (<BIsInherited a b)
<BIsInherited (zero :: a) (one :: b) | inl (inl 2a<2b+1) | inl (inr b<a) = exFalso (noIntegersBetweenXAndSuccX {2 *N binNatToN a} (2 *N binNatToN b) (lessRespectsMultiplicationLeft (binNatToN b) (binNatToN a) 2 b<a (le 1 refl)) 2a<2b+1)
<BIsInherited (zero :: a) (one :: b) | inl (inl 2a<2b+1) | inr a=b rewrite a=b | canonicalFirst a b FirstLess | canonicalSecond (canonical a) b FirstLess | transitivity (equalityCommutative (binToBin a)) (transitivity (applyEquality NToBinNat a=b) (binToBin b)) = equalityCommutative (lemma1 (canonical b))
<BIsInherited (zero :: a) (one :: b) | inl (inr 2b+1<2a) with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
<BIsInherited (zero :: a) (one :: b) | inl (inr 2b+1<2a) | inl (inl a<b) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) 2b+1<2a (PartialOrder.<Transitive (TotalOrder.order TotalOrder) (lessRespectsMultiplicationLeft (binNatToN a) (binNatToN b) 2 a<b (le 1 refl)) (le zero refl))))
<BIsInherited (zero :: a) (one :: b) | inl (inr 2b+1<2a) | inl (inl a<b) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) 2b+1<2a (TotalOrder.<Transitive (TotalOrder) (lessRespectsMultiplicationLeft (binNatToN a) (binNatToN b) 2 a<b (le 1 refl)) (le zero refl))))
<BIsInherited (zero :: a) (one :: b) | inl (inr 2b+1<2a) | inl (inr b<a) = equalityCommutative (equalToFirstGreater FirstLess a b (equalityCommutative indHyp))
where
t : a <BInherited b FirstGreater
t with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
t | inl (inl x) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) x b<a))
t | inl (inl x) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) x b<a))
t | inl (inr x) = refl
t | inr x rewrite x = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
t | inr x rewrite x = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
indHyp : FirstGreater go<B Equal a b
indHyp = transitivity (equalityCommutative t) (<BIsInherited a b)
<BIsInherited (zero :: a) (one :: b) | inl (inr 2b+1<2a) | inr a=b rewrite a=b = exFalso (succNotLess 2b+1<2a)
@@ -356,12 +356,12 @@ module Numbers.BinaryNaturals.Order where
where
t : a <BInherited b FirstLess
t with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
t | inl (inr x) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) x a<b))
t | inl (inr x) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) x a<b))
t | inl (inl x) = refl
t | inr x rewrite x = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) a<b)
t | inr x rewrite x = exFalso (TotalOrder.irreflexive (TotalOrder) a<b)
indHyp : FirstLess go<B Equal a b
indHyp = transitivity (equalityCommutative t) (<BIsInherited a b)
<BIsInherited (one :: a) (zero :: b) | inl (inl 2a+1<2b) | inl (inr b<a) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) 2a+1<2b (PartialOrder.<Transitive (TotalOrder.order TotalOrder) (lessRespectsMultiplicationLeft (binNatToN b) (binNatToN a) 2 b<a (le 1 refl)) (le zero refl))))
<BIsInherited (one :: a) (zero :: b) | inl (inl 2a+1<2b) | inl (inr b<a) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) 2a+1<2b (TotalOrder.<Transitive (TotalOrder) (lessRespectsMultiplicationLeft (binNatToN b) (binNatToN a) 2 b<a (le 1 refl)) (le zero refl))))
<BIsInherited (one :: a) (zero :: b) | inl (inl 2a+1<2b) | inr a=b rewrite a=b = exFalso (succNotLess 2a+1<2b)
<BIsInherited (one :: a) (zero :: b) | inl (inr 2b<2a+1) with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
<BIsInherited (one :: a) (zero :: b) | inl (inr 2b<2a+1) | inl (inl a<b) = exFalso (noIntegersBetweenXAndSuccX {2 *N binNatToN b} (2 *N binNatToN a) (lessRespectsMultiplicationLeft (binNatToN a) (binNatToN b) 2 a<b (le 1 refl)) 2b<2a+1)
@@ -369,9 +369,9 @@ module Numbers.BinaryNaturals.Order where
where
t : a <BInherited b FirstGreater
t with TotalOrder.totality TotalOrder (binNatToN a) (binNatToN b)
t | inl (inl x) = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) (PartialOrder.<Transitive (TotalOrder.order TotalOrder) x b<a))
t | inl (inl x) = exFalso (TotalOrder.irreflexive (TotalOrder) (TotalOrder.<Transitive (TotalOrder) x b<a))
t | inl (inr x) = refl
t | inr x rewrite x = exFalso (PartialOrder.irreflexive (TotalOrder.order TotalOrder) b<a)
t | inr x rewrite x = exFalso (TotalOrder.irreflexive (TotalOrder) b<a)
indHyp : FirstGreater go<B Equal a b
indHyp = transitivity (equalityCommutative t) (<BIsInherited a b)
<BIsInherited (one :: a) (zero :: b) | inl (inr 2b<2a+1) | inr a=b rewrite a=b | canonicalFirst a b FirstGreater | canonicalSecond (canonical a) b FirstGreater | transitivity (equalityCommutative (binToBin a)) (transitivity (applyEquality NToBinNat a=b) (binToBin b)) = equalityCommutative (lemma1 (canonical b))

View File

@@ -10,7 +10,7 @@ open import Numbers.BinaryNaturals.Addition
open import Numbers.BinaryNaturals.SubtractionGo
open import Numbers.BinaryNaturals.SubtractionGoPreservesCanonicalRight
open import Numbers.BinaryNaturals.SubtractionGoPreservesCanonicalLeft
open import Orders
open import Orders.Total.Definition
open import Semirings.Definition
open import Maybe

View File

@@ -4,7 +4,6 @@ open import LogicalFormulae
open import Lists.Lists
open import Numbers.Naturals.Naturals
open import Numbers.BinaryNaturals.Definition
open import Orders
open import Semirings.Definition
open import Maybe