Zulip Chat Archive
Stream: new members
Topic: Improving proofs about `symmDiff`
Bbbbbbbbba (Jan 19 2026 at 01:52):
This is not that bad but I do feel that I am missing something about symmDiff or about parity logic. I am open to changing the definition of Context.boundary to use Odd _ in place of _ % 2 = 1 if it leads to a nicer proof.
import Mathlib
open Set symmDiff
variable {V E : Type*}
structure Context (V E : Type*) where
incidence : E → Set V
weight : E → ℝ
weight_nonneg : ∀ e, 0 ≤ weight e
variable {ctx : Context V E}
def Context.boundary (C : Set E) : Set V := {v | {e ∈ C | v ∈ ctx.incidence e}.ncard % 2 = 1}
variable [Finite E]
lemma boundary_symmDiff (A B : Set E) :
ctx.boundary (A ∆ B) = (ctx.boundary A) ∆ (ctx.boundary B) := by
ext v
simp only [Context.boundary, mem_symmDiff]
set Av := {e ∈ A | v ∈ ctx.incidence e}
set Bv := {e ∈ B | v ∈ ctx.incidence e}
have h_split : {e | (e ∈ A ∧ e ∉ B ∨ e ∈ B ∧ e ∉ A) ∧ v ∈ ctx.incidence e} =
(Av ∪ Bv) \ (Av ∩ Bv) := by ext e; simp [Av, Bv]; tauto
have h_symm_diff : ((Av ∪ Bv) \ (Av ∩ Bv)).ncard + 2 * (Av ∩ Bv).ncard = Av.ncard + Bv.ncard := by
rw [← (ncard_union_add_ncard_inter Av Bv), two_mul, ← add_assoc, ncard_diff_add_ncard_of_subset]
exact fun e he ↦ Or.inl he.1
have h_symm_diff : ((Av ∪ Bv) \ (Av ∩ Bv)).ncard % 2 = (Av.ncard + Bv.ncard) % 2 := by
rw [← h_symm_diff]; simp
simp [h_split, h_symm_diff, Av, Bv]; omega
Last updated: Feb 28 2026 at 14:05 UTC