1+ module Haskell.Law.Ord.Integer where
2+
3+ open import Haskell.Prim
4+ open import Haskell.Prim.Bool
5+ open import Haskell.Prim.Eq
6+ open import Haskell.Prim.Ord
7+
8+ open import Haskell.Law.Bool
9+ open import Haskell.Law.Eq
10+ open import Haskell.Law.Equality
11+ open import Haskell.Law.Ord.Def
12+ open import Haskell.Law.Ord.Nat
13+ open import Haskell.Law.Nat
14+
15+ injectEqSym : ∀ ( a b c d : Nat ) {e e₁ : Bool} { f : Bool → Bool → Bool } →
16+ f (e || a == b ) ( e₁ || c == d) ≡ f (e || b == a) (e₁ || d == c)
17+ injectEqSym a b c d
18+ rewrite eqSymmetry a b
19+ | eqSymmetry c d
20+ = refl
21+
22+ inverseEqSym : ∀ ( a b c d : Nat ) (e f : Bool) →
23+ ((e || a == b ) && (f || c == d)) ≡ ((f || d == c) && (e || b == a))
24+ inverseEqSym a b c d e f
25+ rewrite &&-sym (e || a == b) (f || c == d)
26+ = injectEqSym c d a b {f} {e} {_&&_}
27+
28+ instance
29+ iLawfulOrdInteger : IsLawfulOrd Integer
30+
31+
32+ iLawfulOrdInteger .comparability (pos n) (pos m) = comparability n m
33+ iLawfulOrdInteger .comparability (pos n) (negsuc m) = refl
34+ iLawfulOrdInteger .comparability (negsuc n) (pos m) = refl
35+ iLawfulOrdInteger .comparability (negsuc n) (negsuc m)
36+ rewrite injectEqSym n m m n {m < n} {n < m} {_||_}
37+ = comparability m n
38+
39+ iLawfulOrdInteger .transitivity (pos n) (pos m) (pos o) h₁ = transitivity n m o h₁
40+ iLawfulOrdInteger .transitivity (pos n) (pos m) (negsuc o) h₁
41+ rewrite &&-sym (n <= m) False
42+ = h₁
43+ iLawfulOrdInteger .transitivity (negsuc n) y (pos o) h₁ = refl
44+ iLawfulOrdInteger .transitivity (negsuc n) (negsuc m) (negsuc o) h₁
45+ rewrite eqSymmetry n o
46+ = transitivity o m n (trans (inverseEqSym o m m n (o < m) (m < n)) h₁)
47+
48+ iLawfulOrdInteger .reflexivity (pos n) = reflexivity n
49+ iLawfulOrdInteger .reflexivity (negsuc n) = reflexivity n
50+
51+ iLawfulOrdInteger .antisymmetry (pos n) (pos m) h₁ = antisymmetry n m h₁
52+ iLawfulOrdInteger .antisymmetry (negsuc n) (negsuc m) h₁ = antisymmetry n m
53+ $ trans (inverseEqSym n m m n (n < m) (m < n)) h₁
54+
55+ iLawfulOrdInteger .lte2gte x y = {! !}
56+ iLawfulOrdInteger .lt2LteNeq x y = {! !}
57+ iLawfulOrdInteger .lt2gt x y = {! !}
58+ iLawfulOrdInteger .compareLt x y = {! !}
59+ iLawfulOrdInteger .compareGt x y = {! !}
60+ iLawfulOrdInteger .compareEq x y = {! !}
61+ iLawfulOrdInteger .min2if x y = {! !}
62+ iLawfulOrdInteger .max2if x y = {! !}
0 commit comments