Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 72cff84

Browse files
committed
feat(order/symm_diff): The symmetric difference is involutive (#14959)
`a ∆ (a ∆ b) = b` and `b ∆ a ∆ a = b`.
1 parent b8c3e61 commit 72cff84

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

src/order/symm_diff.lean

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ The symmetric difference is the addition operator in the Boolean ring structure
2121
## Main declarations
2222
2323
* `symm_diff`: the symmetric difference operator, defined as `(A \ B) ⊔ (B \ A)`
24+
* `equiv.symm_diff`: Symmetric difference by `a` as an `equiv`.
2425
2526
In generalized Boolean algebras, the symmetric difference operator is:
2627
@@ -42,6 +43,8 @@ Proof from the Book" by John McCuan:
4243
boolean ring, generalized boolean algebra, boolean algebra, symmetric differences
4344
-/
4445

46+
open function
47+
4548
/-- The symmetric difference operator on a type with `⊔` and `\` is `(A \ B) ⊔ (B \ A)`. -/
4649
def symm_diff {α : Type*} [has_sup α] [has_sdiff α] (A B : α) : α := (A \ B) ⊔ (B \ A)
4750

@@ -151,6 +154,12 @@ calc a ∆ (b ∆ c) = (a \ (b ∆ c)) ⊔ ((b ∆ c) \ a) : symm_diff_def _ _
151154
... = (a \ (b ⊔ c)) ⊔ (b \ (a ⊔ c)) ⊔
152155
(c \ (a ⊔ b)) ⊔ (a ⊓ b ⊓ c) : by ac_refl
153156

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+
154163
lemma symm_diff_assoc : a ∆ b ∆ c = a ∆ (b ∆ c) :=
155164
by rw [symm_diff_symm_diff_left, symm_diff_symm_diff_right]
156165

@@ -164,21 +173,26 @@ lemma symm_diff_right_comm : a ∆ b ∆ c = a ∆ c ∆ b := by simp_rw [symm_d
164173
lemma symm_diff_symm_diff_symm_diff_comm : (a ∆ b) ∆ (c ∆ d) = (a ∆ c) ∆ (b ∆ d) :=
165174
by simp_rw [symm_diff_assoc, symm_diff_left_comm]
166175

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]
168178

169179
@[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
171191

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}
179193

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
182196

183197
@[simp] lemma symm_diff_eq_left : a ∆ b = a ↔ b = ⊥ :=
184198
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
190204
calc a ∆ b = ⊥ ↔ a ∆ b = a ∆ a : by rw symm_diff_self
191205
... ↔ a = b : by rw [symm_diff_right_inj, eq_comm]
192206

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-
201207
protected lemma disjoint.symm_diff_left (ha : disjoint a c) (hb : disjoint b c) :
202208
disjoint (a ∆ b) c :=
203209
by { rw symm_diff_eq_sup_sdiff_inf, exact (ha.sup_left hb).disjoint_sdiff_left }

0 commit comments

Comments
 (0)