Theorem: Ideal.ker_quotient_lift
File: Mathlib/RingTheory/Ideal/QuotientOperations.lean

tactic: apply Ideal.ext
state_before: R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
⊢ RingHom.ker (Quotient.lift I f H) = map (Quotient.mk I) (RingHom.ker f)

tactic: intro x
state_before: case h
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
⊢ ∀ (x : R ⧸ I), x ∈ RingHom.ker (Quotient.lift I f H) ↔ x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: constructor
state_before: case h
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
⊢ x ∈ RingHom.ker (Quotient.lift I f H) ↔ x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: intro hx
state_before: case h.mp
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
⊢ x ∈ RingHom.ker (Quotient.lift I f H) → x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: obtain ⟨y, hy⟩ := Quotient.mk_surjective x
state_before: case h.mp
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
hx : x ∈ RingHom.ker (Quotient.lift I f H)
⊢ x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: rw [RingHom.mem_ker, ← hy, Ideal.Quotient.lift_mk, ← RingHom.mem_ker] at hx
state_before: case h.mp.intro
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
hx : x ∈ RingHom.ker (Quotient.lift I f H)
y : R
hy : ↑(Quotient.mk I) y = x
⊢ x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: rw [← hy, mem_map_iff_of_surjective (Quotient.mk I) Quotient.mk_surjective]
state_before: case h.mp.intro
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
y : R
hx : y ∈ RingHom.ker f
hy : ↑(Quotient.mk I) y = x
⊢ x ∈ map (Quotient.mk I) (RingHom.ker f)

tactic: exact ⟨y, hx, rfl⟩
state_before: case h.mp.intro
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
y : R
hx : y ∈ RingHom.ker f
hy : ↑(Quotient.mk I) y = x
⊢ ∃ x, x ∈ RingHom.ker f ∧ ↑(Quotient.mk I) x = ↑(Quotient.mk I) y

tactic: intro hx
state_before: case h.mpr
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
⊢ x ∈ map (Quotient.mk I) (RingHom.ker f) → x ∈ RingHom.ker (Quotient.lift I f H)

tactic: rw [mem_map_iff_of_surjective (Quotient.mk I)  Quotient.mk_surjective] at hx
state_before: case h.mpr
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
hx : x ∈ map (Quotient.mk I) (RingHom.ker f)
⊢ x ∈ RingHom.ker (Quotient.lift I f H)

tactic: obtain ⟨y, hy⟩ := hx
state_before: case h.mpr
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
hx : ∃ x_1, x_1 ∈ RingHom.ker f ∧ ↑(Quotient.mk I) x_1 = x
⊢ x ∈ RingHom.ker (Quotient.lift I f H)

tactic: rw [RingHom.mem_ker, ← hy.right, Ideal.Quotient.lift_mk]
state_before: case h.mpr.intro
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
y : R
hy : y ∈ RingHom.ker f ∧ ↑(Quotient.mk I) y = x
⊢ x ∈ RingHom.ker (Quotient.lift I f H)

tactic: exact hy.left
state_before: case h.mpr.intro
R : Type u
S✝ : Type v
F : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S✝
S : Type v
inst✝ : CommRing S
I : Ideal R
f : R →+* S
H : I ≤ RingHom.ker f
x : R ⧸ I
y : R
hy : y ∈ RingHom.ker f ∧ ↑(Quotient.mk I) y = x
⊢ ↑f y = 0