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

tactic: refine RingHom.ext fun a => ?_
state_before: R : Type u
S : Type v
F : Type w
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing S
R₁ : Type ?u.1497719
R₂ : Type ?u.1497722
A : Type ?u.1497725
B : Type ?u.1497728
inst✝⁸ : CommSemiring R₁
inst✝⁷ : CommSemiring R₂
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
inst✝² : Algebra R₁ B
R' : Type u_1
S' : Type u_2
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : RingHom.comp f' g = RingHom.comp g' f
I : Ideal S'
⊢ let leq := (_ : comap f (comap g' I) ≤ comap g (comap f' I));
  RingHom.comp (quotientMap I g' (_ : comap g' I ≤ comap g' I))
      (quotientMap (comap g' I) f (_ : comap f (comap g' I) ≤ comap f (comap g' I))) =
    RingHom.comp (quotientMap I f' (_ : comap f' I ≤ comap f' I)) (quotientMap (comap f' I) g leq)

tactic: obtain ⟨r, rfl⟩ := Quotient.mk_surjective a
state_before: R : Type u
S : Type v
F : Type w
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing S
R₁ : Type ?u.1497719
R₂ : Type ?u.1497722
A : Type ?u.1497725
B : Type ?u.1497728
inst✝⁸ : CommSemiring R₁
inst✝⁷ : CommSemiring R₂
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
inst✝² : Algebra R₁ B
R' : Type u_1
S' : Type u_2
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : RingHom.comp f' g = RingHom.comp g' f
I : Ideal S'
a : R ⧸ comap f (comap g' I)
⊢ ↑(RingHom.comp (quotientMap I g' (_ : comap g' I ≤ comap g' I))
          (quotientMap (comap g' I) f (_ : comap f (comap g' I) ≤ comap f (comap g' I))))
      a =
    ↑(RingHom.comp (quotientMap I f' (_ : comap f' I ≤ comap f' I))
          (quotientMap (comap f' I) g (_ : comap f (comap g' I) ≤ comap g (comap f' I))))
      a

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✝⁹ : CommRing S
R₁ : Type ?u.1497719
R₂ : Type ?u.1497722
A : Type ?u.1497725
B : Type ?u.1497728
inst✝⁸ : CommSemiring R₁
inst✝⁷ : CommSemiring R₂
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
inst✝² : Algebra R₁ B
R' : Type u_1
S' : Type u_2
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : RingHom.comp f' g = RingHom.comp g' f
I : Ideal S'
r : R
⊢ ↑(RingHom.comp (quotientMap I g' (_ : comap g' I ≤ comap g' I))
          (quotientMap (comap g' I) f (_ : comap f (comap g' I) ≤ comap f (comap g' I))))
      (↑(Quotient.mk (comap f (comap g' I))) r) =
    ↑(RingHom.comp (quotientMap I f' (_ : comap f' I ≤ comap f' I))
          (quotientMap (comap f' I) g (_ : comap f (comap g' I) ≤ comap g (comap f' I))))
      (↑(Quotient.mk (comap f (comap g' I))) r)

tactic: exact congr_arg (Ideal.Quotient.mk I) (_root_.trans (g'.comp_apply f r).symm
  (hfg ▸ f'.comp_apply g r))
state_before: case intro
R : Type u
S : Type v
F : Type w
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing S
R₁ : Type ?u.1497719
R₂ : Type ?u.1497722
A : Type ?u.1497725
B : Type ?u.1497728
inst✝⁸ : CommSemiring R₁
inst✝⁷ : CommSemiring R₂
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra R₁ A
inst✝³ : Algebra R₂ A
inst✝² : Algebra R₁ B
R' : Type u_1
S' : Type u_2
inst✝¹ : CommRing R'
inst✝ : CommRing S'
f : R →+* S
f' : R' →+* S'
g : R →+* R'
g' : S →+* S'
hfg : RingHom.comp f' g = RingHom.comp g' f
I : Ideal S'
r : R
⊢ ↑(Quotient.mk I) (↑g' (↑f r)) = ↑(Quotient.mk I) (↑f' (↑g r))