Theorem: Algebra.FormallyUnramified.of_comp
File: Mathlib/RingTheory/Unramified/Basic.lean

Proof steps:
state_before: R : Type u
inst✝⁷ : CommSemiring R
A : Type u
inst✝⁶ : CommSemiring A
inst✝⁵ : Algebra R A
B : Type u
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : Algebra A B
inst✝¹ : IsScalarTower R A B
inst✝ : FormallyUnramified R B
⊢ FormallyUnramified A B
state_after: case comp_injective
R : Type u
inst✝⁷ : CommSemiring R
A : Type u
inst✝⁶ : CommSemiring A
inst✝⁵ : Algebra R A
B : Type u
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : Algebra A B
inst✝¹ : IsScalarTower R A B
inst✝ : FormallyUnramified R B
⊢ ∀ ⦃B_1 : Type u⦄ [inst : CommRing B_1] [inst_1 : Algebra A B_1] (I : Ideal B_1),
    I ^ 2 = ⊥ → Function.Injective (Ideal.Quotient.mkₐ A I).comp
tactic: constructor
state_before: case comp_injective
R : Type u
inst✝⁷ : CommSemiring R
A : Type u
inst✝⁶ : CommSemiring A
inst✝⁵ : Algebra R A
B : Type u
inst✝⁴ : Semiring B
inst✝³ : Algebra R B
inst✝² : Algebra A B
inst✝¹ : IsScalarTower R A B
inst✝ : FormallyUnramified R B
⊢ ∀ ⦃B_1 : Type u⦄ [inst : CommRing B_1] [inst_1 : Algebra A B_1] (I : Ideal B_1),
    I ^ 2 = ⊥ → Function.Injective (Ideal.Quotient.mkₐ A I).comp
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
⊢ f₁ = f₂
tactic: intro Q _ _ I e f₁ f₂ e'
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
⊢ f₁ = f₂
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
⊢ f₁ = f₂
tactic: letI := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
⊢ f₁ = f₂
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ f₁ = f₂
tactic: letI : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ f₁ = f₂
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ AlgHom.restrictScalars R f₁ = AlgHom.restrictScalars R f₂
tactic: refine AlgHom.restrictScalars_injective R ?_
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ AlgHom.restrictScalars R f₁ = AlgHom.restrictScalars R f₂
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∀ (x : B),
    (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₁) x) = (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₂) x)
tactic: refine FormallyUnramified.ext I ⟨2, e⟩ ?_
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
⊢ ∀ (x : B),
    (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₁) x) = (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₂) x)
state_after: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
x : B
⊢ (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₁) x) = (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₂) x)
tactic: intro x
state_before: case comp_injective
R : Type u
inst✝⁹ : CommSemiring R
A : Type u
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
B : Type u
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : IsScalarTower R A B
inst✝² : FormallyUnramified R B
Q : Type u
inst✝¹ : CommRing Q
inst✝ : Algebra A Q
I : Ideal Q
e : I ^ 2 = ⊥
f₁ f₂ : B →ₐ[A] Q
e' : (Ideal.Quotient.mkₐ A I).comp f₁ = (Ideal.Quotient.mkₐ A I).comp f₂
this✝ : Algebra R Q := ((algebraMap A Q).comp (algebraMap R A)).toAlgebra
this : IsScalarTower R A Q := IsScalarTower.of_algebraMap_eq' rfl
x : B
⊢ (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₁) x) = (Ideal.Quotient.mk I) ((AlgHom.restrictScalars R f₂) x)
state_after: no goals
tactic: exact AlgHom.congr_fun e' x