Theorem: Algebra.FormallySmooth.localization_base
File: Mathlib/RingTheory/Smooth/Basic.lean

tactic: constructor
state_before: R S Rₘ Sₘ : Type u
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing Rₘ
inst✝¹⁰ : CommRing Sₘ
M : Submonoid R
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R Sₘ
inst✝⁷ : Algebra S Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : Algebra Rₘ Sₘ
inst✝⁴ : IsScalarTower R Rₘ Sₘ
inst✝³ : IsScalarTower R S Sₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝ : FormallySmooth R Sₘ
⊢ FormallySmooth Rₘ Sₘ
state_after: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing Rₘ
inst✝¹⁰ : CommRing Sₘ
M : Submonoid R
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R Sₘ
inst✝⁷ : Algebra S Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : Algebra Rₘ Sₘ
inst✝⁴ : IsScalarTower R Rₘ Sₘ
inst✝³ : IsScalarTower R S Sₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝ : FormallySmooth R Sₘ
⊢ ∀ ⦃B : Type u⦄ [inst : CommRing B] [inst_1 : Algebra Rₘ B] (I : Ideal B),
    I ^ 2 = ⊥ → Function.Surjective (Ideal.Quotient.mkₐ Rₘ I).comp

tactic: intro Q _ _ I e f
state_before: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing Rₘ
inst✝¹⁰ : CommRing Sₘ
M : Submonoid R
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R Sₘ
inst✝⁷ : Algebra S Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : Algebra Rₘ Sₘ
inst✝⁴ : IsScalarTower R Rₘ Sₘ
inst✝³ : IsScalarTower R S Sₘ
inst✝² : IsLocalization M Rₘ
inst✝¹ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝ : FormallySmooth R Sₘ
⊢ ∀ ⦃B : Type u⦄ [inst : CommRing B] [inst_1 : Algebra Rₘ B] (I : Ideal B),
    I ^ 2 = ⊥ → Function.Surjective (Ideal.Quotient.mkₐ Rₘ I).comp
state_after: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f

tactic: letI := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
state_before: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f
state_after: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f

tactic: letI : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
state_before: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f
state_after: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f

tactic: let f : Sₘ →ₐ[Rₘ] Q := by
  refine { FormallySmooth.lift I ⟨2, e⟩ (f.restrictScalars R) with commutes' := ?_ }
  intro r
  change
    (RingHom.comp (FormallySmooth.lift I ⟨2, e⟩ (f.restrictScalars R) : Sₘ →+* Q)
          (algebraMap _ _))
        r =
      algebraMap _ _ r
  congr 1
  refine IsLocalization.ringHom_ext M ?_
  rw [RingHom.comp_assoc, ← IsScalarTower.algebraMap_eq, ← IsScalarTower.algebraMap_eq,
    AlgHom.comp_algebraMap]
state_before: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f
state_after: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f✝

tactic: use f
state_before: case comp_surjective
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
⊢ ∃ a, (Ideal.Quotient.mkₐ Rₘ I).comp a = f✝
state_after: case h
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
⊢ (Ideal.Quotient.mkₐ Rₘ I).comp f = f✝

tactic: ext
state_before: case h
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
⊢ (Ideal.Quotient.mkₐ Rₘ I).comp f = f✝
state_after: case h.H
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
x✝ : Sₘ
⊢ ((Ideal.Quotient.mkₐ Rₘ I).comp f) x✝ = f✝ x✝

tactic: simp [f]
state_before: case h.H
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f✝ : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
f : Sₘ →ₐ[Rₘ] Q :=
  let __src := lift I ⋯ (AlgHom.restrictScalars R f✝);
  { toRingHom := __src.toRingHom, commutes' := ⋯ }
x✝ : Sₘ
⊢ ((Ideal.Quotient.mkₐ Rₘ I).comp f) x✝ = f✝ x✝
state_after: no goals

tactic: refine { FormallySmooth.lift I ⟨2, e⟩ (f.restrictScalars R) with commutes' := ?_ }
state_before: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ Sₘ →ₐ[Rₘ] Q
state_after: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∀ (r : Rₘ), (↑↑__src✝.toRingHom).toFun ((algebraMap Rₘ Sₘ) r) = (algebraMap Rₘ Q) r

tactic: intro r
state_before: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∀ (r : Rₘ), (↑↑__src✝.toRingHom).toFun ((algebraMap Rₘ Sₘ) r) = (algebraMap Rₘ Q) r
state_after: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ (↑↑__src✝.toRingHom).toFun ((algebraMap Rₘ Sₘ) r) = (algebraMap Rₘ Q) r

tactic: change
  (RingHom.comp (FormallySmooth.lift I ⟨2, e⟩ (f.restrictScalars R) : Sₘ →+* Q)
        (algebraMap _ _))
      r =
    algebraMap _ _ r
state_before: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ (↑↑__src✝.toRingHom).toFun ((algebraMap Rₘ Sₘ) r) = (algebraMap Rₘ Q) r
state_after: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ ((↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ)) r = (algebraMap Rₘ Q) r

tactic: congr 1
state_before: R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ ((↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ)) r = (algebraMap Rₘ Q) r
state_after: case e_a
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ (↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ) = algebraMap Rₘ Q

tactic: refine IsLocalization.ringHom_ext M ?_
state_before: case e_a
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ (↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ) = algebraMap Rₘ Q
state_after: case e_a
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ ((↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ)).comp (algebraMap R Rₘ) =
    (algebraMap Rₘ Q).comp (algebraMap R Rₘ)

tactic: rw [RingHom.comp_assoc, ← IsScalarTower.algebraMap_eq, ← IsScalarTower.algebraMap_eq,
  AlgHom.comp_algebraMap]
state_before: case e_a
R S Rₘ Sₘ : Type u
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing Rₘ
inst✝¹² : CommRing Sₘ
M : Submonoid R
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R Sₘ
inst✝⁹ : Algebra S Sₘ
inst✝⁸ : Algebra R Rₘ
inst✝⁷ : Algebra Rₘ Sₘ
inst✝⁶ : IsScalarTower R Rₘ Sₘ
inst✝⁵ : IsScalarTower R S Sₘ
inst✝⁴ : IsLocalization M Rₘ
inst✝³ : IsLocalization (Submonoid.map (algebraMap R S) M) Sₘ
inst✝² : FormallySmooth R Sₘ
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra Rₘ Q
I : Ideal Q
e : I ^ 2 = ⊥
f : Sₘ →ₐ[Rₘ] Q ⧸ I
this✝ : Algebra R Q := ((algebraMap Rₘ Q).comp (algebraMap R Rₘ)).toAlgebra
this : IsScalarTower R Rₘ Q := IsScalarTower.of_algebraMap_eq' rfl
r : Rₘ
⊢ ((↑(lift I ⋯ (AlgHom.restrictScalars R f))).comp (algebraMap Rₘ Sₘ)).comp (algebraMap R Rₘ) =
    (algebraMap Rₘ Q).comp (algebraMap R Rₘ)
state_after: no goals