Theorem: Algebra.FiniteType.isNoetherianRing
File: Mathlib/RingTheory/FiniteType.lean

Proof steps:
state_before: R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
⊢ IsNoetherianRing S
state_after: case intro
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ IsNoetherianRing S
tactic: obtain ⟨s, hs⟩ := h.1
state_before: case intro
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ IsNoetherianRing S
state_after: case intro.hf
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ Surjective ⇑(MvPolynomial.aeval Subtype.val).toRingHom
tactic: apply
    isNoetherianRing_of_surjective (MvPolynomial s R) S
      (MvPolynomial.aeval (↑) : MvPolynomial s R →ₐ[R] S).toRingHom
state_before: case intro.hf
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ Surjective ⇑(MvPolynomial.aeval Subtype.val).toRingHom
state_after: case intro.hf
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ ↑⊤ = Set.univ
tactic: erw [← Set.range_iff_surjective, ← AlgHom.coe_range, ←
    Algebra.adjoin_range_eq_range_aeval, Subtype.range_coe_subtype, Finset.setOf_mem, hs]
state_before: case intro.hf
R✝ : Type uR
S✝ : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹⁴ : CommSemiring R✝
inst✝¹³ : CommSemiring S✝
inst✝¹² : Semiring A
inst✝¹¹ : Semiring B
inst✝¹⁰ : Algebra R✝ S✝
inst✝⁹ : Algebra R✝ A
inst✝⁸ : Algebra R✝ B
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R✝ M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : Algebra R S
h : FiniteType R S
inst✝ : IsNoetherianRing R
s : Finset S
hs : adjoin R ↑s = ⊤
⊢ ↑⊤ = Set.univ
state_after: no goals
tactic: rfl