@@ -21,6 +21,7 @@ The symmetric difference is the addition operator in the Boolean ring structure
21
21
## Main declarations
22
22
23
23
* `symm_diff`: the symmetric difference operator, defined as `(A \ B) ⊔ (B \ A)`
24
+ * `equiv.symm_diff`: Symmetric difference by `a` as an `equiv`.
24
25
25
26
In generalized Boolean algebras, the symmetric difference operator is:
26
27
@@ -42,6 +43,8 @@ Proof from the Book" by John McCuan:
42
43
boolean ring, generalized boolean algebra, boolean algebra, symmetric differences
43
44
-/
44
45
46
+ open function
47
+
45
48
/-- The symmetric difference operator on a type with `⊔` and `\` is `(A \ B) ⊔ (B \ A)`. -/
46
49
def symm_diff {α : Type *} [has_sup α] [has_sdiff α] (A B : α) : α := (A \ B) ⊔ (B \ A)
47
50
@@ -151,6 +154,12 @@ calc a ∆ (b ∆ c) = (a \ (b ∆ c)) ⊔ ((b ∆ c) \ a) : symm_diff_def _ _
151
154
... = (a \ (b ⊔ c)) ⊔ (b \ (a ⊔ c)) ⊔
152
155
(c \ (a ⊔ b)) ⊔ (a ⊓ b ⊓ c) : by ac_refl
153
156
157
+ @[simp] lemma symm_diff_symm_diff_inf : a ∆ b ∆ (a ⊓ b) = a ⊔ b :=
158
+ by rw [symm_diff_eq_iff_sdiff_eq (symm_diff_le_sup _ _), sup_sdiff_symm_diff]
159
+
160
+ @[simp] lemma inf_symm_diff_symm_diff : (a ⊓ b) ∆ (a ∆ b) = a ⊔ b :=
161
+ by rw [symm_diff_comm, symm_diff_symm_diff_inf]
162
+
154
163
lemma symm_diff_assoc : a ∆ b ∆ c = a ∆ (b ∆ c) :=
155
164
by rw [symm_diff_symm_diff_left, symm_diff_symm_diff_right]
156
165
@@ -164,21 +173,26 @@ lemma symm_diff_right_comm : a ∆ b ∆ c = a ∆ c ∆ b := by simp_rw [symm_d
164
173
lemma symm_diff_symm_diff_symm_diff_comm : (a ∆ b) ∆ (c ∆ d) = (a ∆ c) ∆ (b ∆ d) :=
165
174
by simp_rw [symm_diff_assoc, symm_diff_left_comm]
166
175
167
- @[simp] lemma symm_diff_symm_diff_self : a ∆ (a ∆ b) = b := by simp [←symm_diff_assoc]
176
+ @[simp] lemma symm_diff_symm_diff_cancel_left : a ∆ (a ∆ b) = b := by simp [←symm_diff_assoc]
177
+ @[simp] lemma symm_diff_symm_diff_cancel_right : b ∆ a ∆ a = b := by simp [symm_diff_assoc]
168
178
169
179
@[simp] lemma symm_diff_symm_diff_self' : a ∆ b ∆ a = b :=
170
- by rw [symm_diff_comm, ←symm_diff_assoc, symm_diff_self, bot_symm_diff]
180
+ by rw [symm_diff_comm,symm_diff_symm_diff_cancel_left]
181
+
182
+ lemma symm_diff_left_involutive (a : α) : involutive (∆ a) := symm_diff_symm_diff_cancel_right _
183
+ lemma symm_diff_right_involutive (a : α) : involutive ((∆) a) := symm_diff_symm_diff_cancel_left _
184
+ lemma symm_diff_left_injective (a : α) : injective (∆ a) := (symm_diff_left_involutive _).injective
185
+ lemma symm_diff_right_injective (a : α) : injective ((∆) a) :=
186
+ (symm_diff_right_involutive _).injective
187
+ lemma symm_diff_left_surjective (a : α) : surjective (∆ a) :=
188
+ (symm_diff_left_involutive _).surjective
189
+ lemma symm_diff_right_surjective (a : α) : surjective ((∆) a) :=
190
+ (symm_diff_right_involutive _).surjective
171
191
172
- @[simp] lemma symm_diff_right_inj : a ∆ b = a ∆ c ↔ b = c :=
173
- begin
174
- split; intro h,
175
- { have H1 := congr_arg ((∆) a) h,
176
- rwa [symm_diff_symm_diff_self, symm_diff_symm_diff_self] at H1, },
177
- { rw h, },
178
- end
192
+ variables {a b c}
179
193
180
- @[simp] lemma symm_diff_left_inj : a ∆ b = c ∆ b ↔ a = c :=
181
- by rw [symm_diff_comm a b, symm_diff_comm c b, symm_diff_right_inj]
194
+ @[simp] lemma symm_diff_left_inj : a ∆ b = c ∆ b ↔ a = c := (symm_diff_left_injective _).eq_iff
195
+ @[simp] lemma symm_diff_right_inj : a ∆ b = a ∆ c ↔ b = c := (symm_diff_right_injective _).eq_iff
182
196
183
197
@[simp] lemma symm_diff_eq_left : a ∆ b = a ↔ b = ⊥ :=
184
198
calc a ∆ b = a ↔ a ∆ b = a ∆ ⊥ : by rw symm_diff_bot
@@ -190,14 +204,6 @@ calc a ∆ b = a ↔ a ∆ b = a ∆ ⊥ : by rw symm_diff_bot
190
204
calc a ∆ b = ⊥ ↔ a ∆ b = a ∆ a : by rw symm_diff_self
191
205
... ↔ a = b : by rw [symm_diff_right_inj, eq_comm]
192
206
193
- @[simp] lemma symm_diff_symm_diff_inf : a ∆ b ∆ (a ⊓ b) = a ⊔ b :=
194
- by rw [symm_diff_eq_iff_sdiff_eq (symm_diff_le_sup _ _), sup_sdiff_symm_diff]
195
-
196
- @[simp] lemma inf_symm_diff_symm_diff : (a ⊓ b) ∆ (a ∆ b) = a ⊔ b :=
197
- by rw [symm_diff_comm, symm_diff_symm_diff_inf]
198
-
199
- variables {a b c}
200
-
201
207
protected lemma disjoint.symm_diff_left (ha : disjoint a c) (hb : disjoint b c) :
202
208
disjoint (a ∆ b) c :=
203
209
by { rw symm_diff_eq_sup_sdiff_inf, exact (ha.sup_left hb).disjoint_sdiff_left }
0 commit comments