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

Proof steps:
state_before: R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
⊢ let leq := ⋯;
  (quotientMap I g' ⋯).comp (quotientMap (comap g' I) f ⋯) = (quotientMap I f' ⋯).comp (quotientMap (comap f' I) g leq)
state_after: R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
a : R ⧸ comap f (comap g' I)
⊢ ((quotientMap I g' ⋯).comp (quotientMap (comap g' I) f ⋯)) a =
    ((quotientMap I f' ⋯).comp (quotientMap (comap f' I) g ⋯)) a
tactic: refine RingHom.ext fun a => ?_
state_before: R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
a : R ⧸ comap f (comap g' I)
⊢ ((quotientMap I g' ⋯).comp (quotientMap (comap g' I) f ⋯)) a =
    ((quotientMap I f' ⋯).comp (quotientMap (comap f' I) g ⋯)) a
state_after: case intro
R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
r : R
⊢ ((quotientMap I g' ⋯).comp (quotientMap (comap g' I) f ⋯)) ((Quotient.mk (comap f (comap g' I))) r) =
    ((quotientMap I f' ⋯).comp (quotientMap (comap f' I) g ⋯)) ((Quotient.mk (comap f (comap g' I))) r)
tactic: obtain ⟨r, rfl⟩ := Quotient.mk_surjective a
state_before: case intro
R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
r : R
⊢ ((quotientMap I g' ⋯).comp (quotientMap (comap g' I) f ⋯)) ((Quotient.mk (comap f (comap g' I))) r) =
    ((quotientMap I f' ⋯).comp (quotientMap (comap f' I) g ⋯)) ((Quotient.mk (comap f (comap g' I))) r)
state_after: case intro
R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
r : R
⊢ (Quotient.mk I) (g' (f r)) = (Quotient.mk I) (f' (g r))
tactic: simp only [RingHom.comp_apply, quotientMap_mk]
state_before: case intro
R : Type u
S✝ : Type v
F : Type w
inst✝⁹ : CommRing R
inst✝⁸ : Semiring S✝
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁷ : CommSemiring R₁
inst✝⁶ : CommSemiring R₂
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
S : Type v
inst✝² : CommRing S
R' : Type u_5
S' : Type u_6
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : f'.comp g = g'.comp f
I : Ideal S'
r : R
⊢ (Quotient.mk I) (g' (f r)) = (Quotient.mk I) (f' (g r))
state_after: no goals
tactic: exact (Ideal.Quotient.mk I).congr_arg (_root_.trans (g'.comp_apply f r).symm
    (hfg ▸ f'.comp_apply g r))