Theorem: Ideal.fg_ker_comp
File: Mathlib/RingTheory/Finiteness.lean

Proof steps:
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this : Algebra R S := f.toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
tactic: letI : Algebra R S := RingHom.toAlgebra f
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this : Algebra R S := f.toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝ : Algebra R S := f.toAlgebra
this : Algebra R A := (g.comp f).toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
tactic: letI : Algebra R A := RingHom.toAlgebra (g.comp f)
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝ : Algebra R S := f.toAlgebra
this : Algebra R A := (g.comp f).toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝¹ : Algebra R S := f.toAlgebra
this✝ : Algebra R A := (g.comp f).toAlgebra
this : Algebra S A := g.toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
tactic: letI : Algebra S A := RingHom.toAlgebra g
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝¹ : Algebra R S := f.toAlgebra
this✝ : Algebra R A := (g.comp f).toAlgebra
this : Algebra S A := g.toAlgebra
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
⊢ (RingHom.ker (g.comp f)).FG
tactic: letI : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun _ => rfl
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
⊢ (RingHom.ker (g.comp f)).FG
tactic: let f₁ := Algebra.linearMap R S
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
⊢ (RingHom.ker (g.comp f)).FG
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
g₁ : S →ₗ[R] A := (IsScalarTower.toAlgHom R S A).toLinearMap
⊢ (RingHom.ker (g.comp f)).FG
tactic: let g₁ := (IsScalarTower.toAlgHom R S A).toLinearMap
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_3
S : Type u_4
A : Type u_5
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : (RingHom.ker f).FG
hg : (RingHom.ker g).FG
hsur : Surjective ⇑f
this✝² : Algebra R S := f.toAlgebra
this✝¹ : Algebra R A := (g.comp f).toAlgebra
this✝ : Algebra S A := g.toAlgebra
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
g₁ : S →ₗ[R] A := (IsScalarTower.toAlgHom R S A).toLinearMap
⊢ (RingHom.ker (g.comp f)).FG
state_after: no goals
tactic: exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur