teorth/PFR
Source indexedlemma · leanprover/lean4:v4.33.0-rc1
goursat
PFR.HomPFR · PFR/HomPFR.lean:46 to 65
Source documentation
Let be a subgroup of . Then there exists a subgroup of , a subgroup of , and a homomorphism such that In particular, .
Exact Lean statement
lemma goursat (H : Submodule (ZMod 2) (G × G')) :
∃ (H₀ : Submodule (ZMod 2) G) (H₁ : Submodule (ZMod 2) G') (φ : G →+ G'),
(∀ x : G × G', x ∈ H ↔ (x.1 ∈ H₀ ∧ x.2 - φ x.1 ∈ H₁)) ∧
Nat.card H = Nat.card H₀ * Nat.card H₁Complete declaration
Lean source
Full Lean sourceLean 4
lemma goursat (H : Submodule (ZMod 2) (G × G')) : ∃ (H₀ : Submodule (ZMod 2) G) (H₁ : Submodule (ZMod 2) G') (φ : G →+ G'), (∀ x : G × G', x ∈ H ↔ (x.1 ∈ H₀ ∧ x.2 - φ x.1 ∈ H₁)) ∧ Nat.card H = Nat.card H₀ * Nat.card H₁ := by obtain ⟨S₁, S₂, f, φ, hf, hf_inv⟩ := H.exists_equiv_fst_sndModFst use S₁, S₂, φ constructor ; swap · show Nat.card H = _ exact Eq.trans (Nat.card_eq_of_bijective f f.bijective) (Nat.card_prod S₁ S₂) · intro x · constructor · intro hx let x : H := { val := x, property := hx } · constructor · exact Set.mem_of_eq_of_mem (hf x).1.symm (f x).1.property · exact Set.mem_of_eq_of_mem (hf x).2.symm (f x).2.property · intro hx · let x₁ : S₁ := { val := x.1, property := hx.1 } let x₂ : S₂ := { val := x.2 - φ x.1, property := hx.2 } exact Set.mem_of_eq_of_mem (by rw [hf_inv, sub_add_cancel]) (f.symm (x₁, x₂)).property