1
+ module Haskell.Law.Ord.Word 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
+ open import Haskell.Prim.Word using ( Word )
8
+
9
+ open import Haskell.Law.Bool
10
+ open import Haskell.Law.Equality
11
+ open import Haskell.Law.Eq
12
+ open import Haskell.Law.Eq.Instances
13
+ open import Haskell.Law.Ord.Def
14
+ open import Haskell.Law.Ord.Nat
15
+
16
+ instance
17
+ iLawfulOrdWord : IsLawfulOrd Word
18
+
19
+ iLawfulOrdWord .comparability a b
20
+ with (w2n a) | (w2n b)
21
+ ... | x | y = comparability x y
22
+
23
+ iLawfulOrdWord .transitivity a b c h
24
+ with (w2n a) | (w2n b) | (w2n c)
25
+ ... | x | y | z = transitivity x y z h
26
+
27
+ iLawfulOrdWord .reflexivity a
28
+ with (w2n a)
29
+ ... | x = reflexivity x
30
+
31
+ iLawfulOrdWord .antisymmetry a b h
32
+ with (w2n a) | (w2n b)
33
+ ... | x | y = antisymmetry x y h
34
+
35
+ iLawfulOrdWord .lte2gte a b
36
+ with (w2n a) | (w2n b)
37
+ ... | x | y = lte2gte x y
38
+
39
+ iLawfulOrdWord .lt2LteNeq a b
40
+ with (w2n a) | (w2n b)
41
+ ... | x | y = lt2LteNeq x y
42
+
43
+ iLawfulOrdWord .lt2gt a b
44
+ with (w2n a) | (w2n b)
45
+ ... | x | y = lt2gt x y
46
+
47
+ iLawfulOrdWord .compareLt a b
48
+ with (w2n a) | (w2n b)
49
+ ... | x | y = compareLt x y
50
+
51
+ iLawfulOrdWord .compareGt a b
52
+ with (w2n a) | (w2n b)
53
+ ... | x | y = compareGt x y
54
+
55
+ iLawfulOrdWord .compareEq a b
56
+ with (w2n a) | (w2n b)
57
+ ... | x | y = compareEq x y
58
+
59
+ iLawfulOrdWord .min2if a b
60
+ with (w2n a) | (w2n b)
61
+ ... | x | y
62
+ rewrite lte2ngt x y
63
+ | ifFlip (y < x) a b
64
+ = eqReflexivity (if (y < x) then b else a)
65
+
66
+ iLawfulOrdWord .max2if a b
67
+ with (w2n a) | (w2n b)
68
+ ... | x | y
69
+ rewrite gte2nlt x y
70
+ | ifFlip (x < y) a b
71
+ = eqReflexivity (if (x < y) then b else a)
0 commit comments