0 | module Algebra.ZeroOneOmega
2 | import Algebra.Semiring
3 | import Algebra.Preorder
8 | data ZeroOneOmega = Rig0 | Rig1 | RigW
10 | %name ZeroOneOmega
rig
13 | Preorder ZeroOneOmega where
18 | preorderRefl {x = Rig0} = Refl
19 | preorderRefl {x = Rig1} = Refl
20 | preorderRefl {x = RigW} = Refl
21 | preorderTrans {x = Rig0} _ _ = Refl
22 | preorderTrans {x = Rig1} {y = Rig0} _ _ impossible
23 | preorderTrans {x = Rig1} {y = Rig1} _ yz = yz
24 | preorderTrans {x = Rig1} {y = RigW} {z = Rig0} _ _ impossible
25 | preorderTrans {x = Rig1} {y = RigW} {z = Rig1} _ _ = Refl
26 | preorderTrans {x = Rig1} {y = RigW} {z = RigW} _ _ = Refl
27 | preorderTrans {x = RigW} {y = Rig0} _ _ impossible
28 | preorderTrans {x = RigW} {y = Rig1} _ _ impossible
29 | preorderTrans {x = RigW} {y = RigW} _ yz = yz
32 | Eq ZeroOneOmega where
33 | (==) Rig0 Rig0 = True
34 | (==) Rig1 Rig1 = True
35 | (==) RigW RigW = True
39 | Show ZeroOneOmega where
45 | rigPlus : ZeroOneOmega -> ZeroOneOmega -> ZeroOneOmega
51 | rigMult : ZeroOneOmega -> ZeroOneOmega -> ZeroOneOmega
52 | rigMult Rig0 _ = Rig0
53 | rigMult _ Rig0 = Rig0
60 | Semiring ZeroOneOmega where
68 | Top ZeroOneOmega where
70 | topAbs {x = Rig0} = Refl
71 | topAbs {x = Rig1} = Refl
72 | topAbs {x = RigW} = Refl
76 | rigPlusAssociative : (x, y, z : ZeroOneOmega) ->
77 | rigPlus x (rigPlus y z) = rigPlus (rigPlus x y) z
78 | rigPlusAssociative Rig0 _ _ = Refl
79 | rigPlusAssociative Rig1 Rig0 _ = Refl
80 | rigPlusAssociative Rig1 Rig1 Rig0 = Refl
81 | rigPlusAssociative Rig1 Rig1 Rig1 = Refl
82 | rigPlusAssociative Rig1 Rig1 RigW = Refl
83 | rigPlusAssociative Rig1 RigW Rig0 = Refl
84 | rigPlusAssociative Rig1 RigW Rig1 = Refl
85 | rigPlusAssociative Rig1 RigW RigW = Refl
86 | rigPlusAssociative RigW Rig0 _ = Refl
87 | rigPlusAssociative RigW Rig1 Rig0 = Refl
88 | rigPlusAssociative RigW Rig1 Rig1 = Refl
89 | rigPlusAssociative RigW Rig1 RigW = Refl
90 | rigPlusAssociative RigW RigW Rig0 = Refl
91 | rigPlusAssociative RigW RigW Rig1 = Refl
92 | rigPlusAssociative RigW RigW RigW = Refl
94 | rigPlusCommutative : (x, y : ZeroOneOmega) ->
95 | rigPlus x y = rigPlus y x
96 | rigPlusCommutative Rig0 Rig0 = Refl
97 | rigPlusCommutative Rig0 Rig1 = Refl
98 | rigPlusCommutative Rig0 RigW = Refl
99 | rigPlusCommutative Rig1 Rig0 = Refl
100 | rigPlusCommutative Rig1 Rig1 = Refl
101 | rigPlusCommutative Rig1 RigW = Refl
102 | rigPlusCommutative RigW Rig0 = Refl
103 | rigPlusCommutative RigW Rig1 = Refl
104 | rigPlusCommutative RigW RigW = Refl
106 | rigMultAssociative : (x, y, z : ZeroOneOmega) ->
107 | rigMult x (rigMult y z) = rigMult (rigMult x y) z
108 | rigMultAssociative Rig0 _ _ = Refl
109 | rigMultAssociative Rig1 Rig0 _ = Refl
110 | rigMultAssociative Rig1 Rig1 Rig0 = Refl
111 | rigMultAssociative Rig1 Rig1 Rig1 = Refl
112 | rigMultAssociative Rig1 Rig1 RigW = Refl
113 | rigMultAssociative Rig1 RigW Rig0 = Refl
114 | rigMultAssociative Rig1 RigW Rig1 = Refl
115 | rigMultAssociative Rig1 RigW RigW = Refl
116 | rigMultAssociative RigW Rig0 _ = Refl
117 | rigMultAssociative RigW Rig1 Rig0 = Refl
118 | rigMultAssociative RigW Rig1 Rig1 = Refl
119 | rigMultAssociative RigW Rig1 RigW = Refl
120 | rigMultAssociative RigW RigW Rig0 = Refl
121 | rigMultAssociative RigW RigW Rig1 = Refl
122 | rigMultAssociative RigW RigW RigW = Refl
124 | rigMultCommutative : (x, y : ZeroOneOmega) ->
125 | rigMult x y = rigMult y x
126 | rigMultCommutative Rig0 Rig0 = Refl
127 | rigMultCommutative Rig0 Rig1 = Refl
128 | rigMultCommutative Rig0 RigW = Refl
129 | rigMultCommutative Rig1 Rig0 = Refl
130 | rigMultCommutative Rig1 Rig1 = Refl
131 | rigMultCommutative Rig1 RigW = Refl
132 | rigMultCommutative RigW Rig0 = Refl
133 | rigMultCommutative RigW Rig1 = Refl
134 | rigMultCommutative RigW RigW = Refl