Zulip Chat Archive
Stream: Is there code for X?
Topic: Push an endomorphism accross a surjective homomorphism
Daniel Weber (Jun 19 2024 at 08:38):
I have a surjective homomorphism f : R →+ R2
, and an endomorphism g : R →+ R
which is closed on f
's kernel. I want to lift g
to a R2 →+ R2
, by f ∘ g ∘ f^-1
. Is there a way to do that in Mathlib?
mwe:
import Mathlib
variable (R : Type*) [AddCommGroup R] (R2 : Type*) [AddCommGroup R2]
example (g : R →+ R) (f : R →+ R2) (h1 : Function.Surjective f)
(h2 : ∀ x ∈ (AddMonoidHom.ker f), g x ∈ (AddMonoidHom.ker f)) : R2 →+ R2 :=
sorry
Kevin Buzzard (Jun 19 2024 at 10:02):
Here are the ingredients (note that the quotient group symbol ⧸
isn't /
, it's \/
in VS Code):
import Mathlib.Tactic
variable (R : Type*) [AddCommGroup R] (R2 : Type*) [AddCommGroup R2]
(S : Type*) [AddCommGroup S]
open Function
-- descent of an additive group hom
example (f : R →+ R2) (gtilde : R →+ S) (h : f.ker ≤ gtilde.ker) :
R ⧸ f.ker →+ S := QuotientAddGroup.lift f.ker gtilde h
-- diagram commutes
example (f : R →+ R2) (gtilde : R →+ S) (h : f.ker ≤ gtilde.ker) (r : R) :
QuotientAddGroup.lift f.ker gtilde h (QuotientAddGroup.mk r) = gtilde r := rfl -- (!)
-- relationship between quotient group and surjective hom
noncomputable example (f : R →+ R2) (hf : Surjective f) : R ⧸ f.ker ≃+ R2 :=
QuotientAddGroup.quotientKerEquivOfSurjective f hf
-- diagram commutes
example (f : R →+ R2) (hf : Surjective f) (r : R) :
QuotientAddGroup.quotientKerEquivOfSurjective f hf (QuotientAddGroup.mk r) = f r := rfl
Eric Wieser (Jun 19 2024 at 11:26):
Is this docs#AddMonoidHom.liftOfSurjective ?
Kevin Buzzard (Jun 19 2024 at 11:51):
Plus a little bit more, yes.
Last updated: May 02 2025 at 03:31 UTC