110 end |
110 end |
111 |
111 |
112 |
112 |
113 subsubsection {* Equational laws *} |
113 subsubsection {* Equational laws *} |
114 |
114 |
|
115 sublocale lower_semilattice < inf!: semilattice inf |
|
116 proof |
|
117 fix a b c |
|
118 show "(a \<sqinter> b) \<sqinter> c = a \<sqinter> (b \<sqinter> c)" |
|
119 by (rule antisym) (auto intro: le_infI1 le_infI2) |
|
120 show "a \<sqinter> b = b \<sqinter> a" |
|
121 by (rule antisym) auto |
|
122 show "a \<sqinter> a = a" |
|
123 by (rule antisym) auto |
|
124 qed |
|
125 |
115 context lower_semilattice |
126 context lower_semilattice |
116 begin |
127 begin |
117 |
128 |
|
129 lemma inf_assoc: "(x \<sqinter> y) \<sqinter> z = x \<sqinter> (y \<sqinter> z)" |
|
130 by (fact inf.assoc) |
|
131 |
118 lemma inf_commute: "(x \<sqinter> y) = (y \<sqinter> x)" |
132 lemma inf_commute: "(x \<sqinter> y) = (y \<sqinter> x)" |
119 by (rule antisym) auto |
133 by (fact inf.commute) |
120 |
134 |
121 lemma inf_assoc: "(x \<sqinter> y) \<sqinter> z = x \<sqinter> (y \<sqinter> z)" |
135 lemma inf_left_commute: "x \<sqinter> (y \<sqinter> z) = y \<sqinter> (x \<sqinter> z)" |
122 by (rule antisym) (auto intro: le_infI1 le_infI2) |
136 by (fact inf.left_commute) |
123 |
137 |
124 lemma inf_idem[simp]: "x \<sqinter> x = x" |
138 lemma inf_idem: "x \<sqinter> x = x" |
125 by (rule antisym) auto |
139 by (fact inf.idem) |
126 |
140 |
127 lemma inf_left_idem[simp]: "x \<sqinter> (x \<sqinter> y) = x \<sqinter> y" |
141 lemma inf_left_idem: "x \<sqinter> (x \<sqinter> y) = x \<sqinter> y" |
128 by (rule antisym) (auto intro: le_infI2) |
142 by (fact inf.left_idem) |
129 |
143 |
130 lemma inf_absorb1: "x \<sqsubseteq> y \<Longrightarrow> x \<sqinter> y = x" |
144 lemma inf_absorb1: "x \<sqsubseteq> y \<Longrightarrow> x \<sqinter> y = x" |
131 by (rule antisym) auto |
145 by (rule antisym) auto |
132 |
146 |
133 lemma inf_absorb2: "y \<sqsubseteq> x \<Longrightarrow> x \<sqinter> y = y" |
147 lemma inf_absorb2: "y \<sqsubseteq> x \<Longrightarrow> x \<sqinter> y = y" |
134 by (rule antisym) auto |
148 by (rule antisym) auto |
135 |
149 |
136 lemma inf_left_commute: "x \<sqinter> (y \<sqinter> z) = y \<sqinter> (x \<sqinter> z)" |
|
137 by (rule mk_left_commute [of inf]) (fact inf_assoc inf_commute)+ |
|
138 |
|
139 lemmas inf_aci = inf_commute inf_assoc inf_left_commute inf_left_idem |
150 lemmas inf_aci = inf_commute inf_assoc inf_left_commute inf_left_idem |
140 |
151 |
141 end |
152 end |
142 |
153 |
|
154 sublocale upper_semilattice < sup!: semilattice sup |
|
155 proof |
|
156 fix a b c |
|
157 show "(a \<squnion> b) \<squnion> c = a \<squnion> (b \<squnion> c)" |
|
158 by (rule antisym) (auto intro: le_supI1 le_supI2) |
|
159 show "a \<squnion> b = b \<squnion> a" |
|
160 by (rule antisym) auto |
|
161 show "a \<squnion> a = a" |
|
162 by (rule antisym) auto |
|
163 qed |
|
164 |
143 context upper_semilattice |
165 context upper_semilattice |
144 begin |
166 begin |
145 |
167 |
|
168 lemma sup_assoc: "(x \<squnion> y) \<squnion> z = x \<squnion> (y \<squnion> z)" |
|
169 by (fact sup.assoc) |
|
170 |
146 lemma sup_commute: "(x \<squnion> y) = (y \<squnion> x)" |
171 lemma sup_commute: "(x \<squnion> y) = (y \<squnion> x)" |
147 by (rule antisym) auto |
172 by (fact sup.commute) |
148 |
173 |
149 lemma sup_assoc: "(x \<squnion> y) \<squnion> z = x \<squnion> (y \<squnion> z)" |
174 lemma sup_left_commute: "x \<squnion> (y \<squnion> z) = y \<squnion> (x \<squnion> z)" |
150 by (rule antisym) (auto intro: le_supI1 le_supI2) |
175 by (fact sup.left_commute) |
151 |
176 |
152 lemma sup_idem[simp]: "x \<squnion> x = x" |
177 lemma sup_idem: "x \<squnion> x = x" |
153 by (rule antisym) auto |
178 by (fact sup.idem) |
154 |
179 |
155 lemma sup_left_idem[simp]: "x \<squnion> (x \<squnion> y) = x \<squnion> y" |
180 lemma sup_left_idem: "x \<squnion> (x \<squnion> y) = x \<squnion> y" |
156 by (rule antisym) (auto intro: le_supI2) |
181 by (fact sup.left_idem) |
157 |
182 |
158 lemma sup_absorb1: "y \<sqsubseteq> x \<Longrightarrow> x \<squnion> y = x" |
183 lemma sup_absorb1: "y \<sqsubseteq> x \<Longrightarrow> x \<squnion> y = x" |
159 by (rule antisym) auto |
184 by (rule antisym) auto |
160 |
185 |
161 lemma sup_absorb2: "x \<sqsubseteq> y \<Longrightarrow> x \<squnion> y = y" |
186 lemma sup_absorb2: "x \<sqsubseteq> y \<Longrightarrow> x \<squnion> y = y" |
162 by (rule antisym) auto |
187 by (rule antisym) auto |
163 |
|
164 lemma sup_left_commute: "x \<squnion> (y \<squnion> z) = y \<squnion> (x \<squnion> z)" |
|
165 by (rule mk_left_commute [of sup]) (fact sup_assoc sup_commute)+ |
|
166 |
188 |
167 lemmas sup_aci = sup_commute sup_assoc sup_left_commute sup_left_idem |
189 lemmas sup_aci = sup_commute sup_assoc sup_left_commute sup_left_idem |
168 |
190 |
169 end |
191 end |
170 |
192 |
512 by (rule ext)+ (auto intro: antisym) |
534 by (rule ext)+ (auto intro: antisym) |
513 |
535 |
514 lemmas le_maxI1 = min_max.sup_ge1 |
536 lemmas le_maxI1 = min_max.sup_ge1 |
515 lemmas le_maxI2 = min_max.sup_ge2 |
537 lemmas le_maxI2 = min_max.sup_ge2 |
516 |
538 |
|
539 lemmas min_ac = min_max.inf_assoc min_max.inf_commute |
|
540 min_max.inf.left_commute |
|
541 |
517 lemmas max_ac = min_max.sup_assoc min_max.sup_commute |
542 lemmas max_ac = min_max.sup_assoc min_max.sup_commute |
518 mk_left_commute [of max, OF min_max.sup_assoc min_max.sup_commute] |
543 min_max.sup.left_commute |
519 |
544 |
520 lemmas min_ac = min_max.inf_assoc min_max.inf_commute |
|
521 mk_left_commute [of min, OF min_max.inf_assoc min_max.inf_commute] |
|
522 |
545 |
523 |
546 |
524 subsection {* Bool as lattice *} |
547 subsection {* Bool as lattice *} |
525 |
548 |
526 instantiation bool :: boolean_algebra |
549 instantiation bool :: boolean_algebra |