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

tactic: letI : Algebra R S := RingHom.toAlgebra f
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: letI : Algebra R A := RingHom.toAlgebra (g.comp f)
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this : Algebra R S := RingHom.toAlgebra f
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: letI : Algebra S A := RingHom.toAlgebra g
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this✝ : Algebra R S := RingHom.toAlgebra f
this : Algebra R A := RingHom.toAlgebra (RingHom.comp g f)
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: letI : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun _ => rfl
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this✝¹ : Algebra R S := RingHom.toAlgebra f
this✝ : Algebra R A := RingHom.toAlgebra (RingHom.comp g f)
this : Algebra S A := RingHom.toAlgebra g
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: let f₁ := Algebra.linearMap R S
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this✝² : Algebra R S := RingHom.toAlgebra f
this✝¹ : Algebra R A := RingHom.toAlgebra (RingHom.comp g f)
this✝ : Algebra S A := RingHom.toAlgebra g
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: let g₁ := (IsScalarTower.toAlgHom R S A).toLinearMap
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this✝² : Algebra R S := RingHom.toAlgebra f
this✝¹ : Algebra R A := RingHom.toAlgebra (RingHom.comp g f)
this✝ : Algebra S A := RingHom.toAlgebra g
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
⊢ FG (RingHom.ker (RingHom.comp g f))

tactic: exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur
state_before: R✝ : Type ?u.349218
M : Type ?u.349221
inst✝⁵ : Semiring R✝
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R✝ M
R : Type u_1
S : Type u_2
A : Type u_3
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing A
f : R →+* S
g : S →+* A
hf : FG (RingHom.ker f)
hg : FG (RingHom.ker g)
hsur : Surjective ↑f
this✝² : Algebra R S := RingHom.toAlgebra f
this✝¹ : Algebra R A := RingHom.toAlgebra (RingHom.comp g f)
this✝ : Algebra S A := RingHom.toAlgebra g
this : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun x => rfl
f₁ : R →ₗ[R] S := Algebra.linearMap R S
g₁ : S →ₗ[R] A := AlgHom.toLinearMap (IsScalarTower.toAlgHom R S A)
⊢ FG (RingHom.ker (RingHom.comp g f))