Skip to content

Commit 39f4954

Browse files
committed
Integer Ord proof
1 parent 0b431a6 commit 39f4954

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

lib/Haskell/Law/Ord/Def.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ gt2gte x y h
176176
-- Postulated instances
177177

178178
postulate instance
179-
iLawfulOrdInteger : IsLawfulOrd Integer
179+
-- iLawfulOrdInteger : IsLawfulOrd Integer
180180

181181
iLawfulOrdInt : IsLawfulOrd Int
182182

lib/Haskell/Law/Ord/Integer.agda

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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

Comments
 (0)