case intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
⊢ IsIntegral R x
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
HS : FG (↑Subalgebra.toSubmodule S)
x : A
hx : x ∈ S
⊢ IsIntegral R x
cases' HS with y hy
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R (?m.368651 lx)
hlx2 : ↑(Finsupp.total A A R id) lx = x
⊢ IsIntegral R x
case intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
⊢ IsIntegral R x
obtain ⟨lx, hlx1, hlx2⟩ :
  ∃ (l : A →₀ R), l ∈ Finsupp.supported R R ↑y ∧ (Finsupp.total A A R id) l = x := by
  rwa [← @Finsupp.mem_span_image_iff_total A A R _ _ _ id (↑y) x, Set.image_id (y : Set A), hy]
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R (?m.368651 lx)
hlx2 : ↑(Finsupp.total A A R id) lx = x
⊢ IsIntegral R x
have hyS : ∀ {p}, p ∈ y → p ∈ S := fun {p} hp =>
  show p ∈ Subalgebra.toSubmodule S by
    rw [← hy]
    exact subset_span hp
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this : ∀ (jk : { x // x ∈ y ×ˢ y }), (↑jk).fst * (↑jk).snd ∈ ↑Subalgebra.toSubmodule S
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
⊢ IsIntegral R x
have : ∀ jk : (y ×ˢ y : Finset (A × A)),
    jk.1.1 * jk.1.2 ∈ (Subalgebra.toSubmodule S) := fun jk =>
  S.mul_mem (hyS (Finset.mem_product.1 jk.2).1) (hyS (Finset.mem_product.1 jk.2).2)
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this : ∀ (jk : { x // x ∈ y ×ˢ y }), (↑jk).fst * (↑jk).snd ∈ span R (id '' ↑y)
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this : ∀ (jk : { x // x ∈ y ×ˢ y }), (↑jk).fst * (↑jk).snd ∈ ↑Subalgebra.toSubmodule S
⊢ IsIntegral R x
rw [← hy, ← Set.image_id (y : Set A)] at this
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this :
  ∀ (jk : { x // x ∈ y ×ˢ y }), ∃ l, l ∈ Finsupp.supported R R ↑y ∧ ↑(Finsupp.total A A R id) l = (↑jk).fst * (↑jk).snd
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this : ∀ (jk : { x // x ∈ y ×ˢ y }), (↑jk).fst * (↑jk).snd ∈ span R (id '' ↑y)
⊢ IsIntegral R x
simp only [Finsupp.mem_span_image_iff_total] at this
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
this :
  ∀ (jk : { x // x ∈ y ×ˢ y }), ∃ l, l ∈ Finsupp.supported R R ↑y ∧ ↑(Finsupp.total A A R id) l = (↑jk).fst * (↑jk).snd
⊢ IsIntegral R x
choose ly hly1 hly2 using this
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
⊢ IsIntegral R x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
⊢ IsIntegral R x
let S₀ : Subring R :=
  Subring.closure ↑(lx.frange ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
⊢ IsIntegral R x
refine' isIntegral_ofSubring S₀ _
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
⊢ IsIntegral { x // x ∈ S₀ } x
letI : CommRing S₀ := SubringClass.toCommRing S₀
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
⊢ IsIntegral { x // x ∈ S₀ } x
letI : Algebra S₀ A := Algebra.ofSubring S₀
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
⊢ IsIntegral { x // x ∈ S₀ } x
let S₁ : Subring A :=
  { carrier := span S₀ (insert 1 ↑y : Set A)
    one_mem' := subset_span <| Or.inl rfl
    mul_mem' := fun {p q} hp hq => this <| mul_mem_mul hp hq
    zero_mem' := (span S₀ (insert 1 ↑y : Set A)).zero_mem
    add_mem' := fun {_ _} => (span S₀ (insert 1 ↑y : Set A)).add_mem
    neg_mem' := fun {_} => (span S₀ (insert 1 ↑y : Set A)).neg_mem }
case foo
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y

case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ IsIntegral { x // x ∈ S₀ } x
have foo : ∀ z, z ∈ S₁ ↔ z ∈ Algebra.adjoin (↥S₀) (y : Set A)
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
⊢ IsIntegral { x // x ∈ S₀ } x
case foo
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y

case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
⊢ IsIntegral { x // x ∈ S₀ } x
simp [this]
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ IsIntegral { x // x ∈ S₀ } x
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
⊢ IsIntegral { x // x ∈ S₀ } x
haveI : IsNoetherianRing S₀ := is_noetherian_subring_closure _ (Finset.finite_toSet _)
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ x ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ IsIntegral { x // x ∈ S₀ } x
refine'
  isIntegral_of_submodule_noetherian (Algebra.adjoin S₀ ↑y)
    (isNoetherian_of_fg_of_noetherian _
      ⟨insert 1 y, by
        rw [Finset.coe_insert]
        ext z
        simp only [Finset.coe_sort_coe, Finset.univ_eq_attach, Finset.mem_coe,
          Subalgebra.mem_toSubmodule]
        convert foo z⟩)
    _ _
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ ∑ a in lx.support, ↑lx a • id a ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ x ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
rw [← hlx2, Finsupp.total_apply, Finsupp.sum]
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
⊢ ↑lx r • id r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ ∑ a in lx.support, ↑lx a • id a ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
refine' Subalgebra.sum_mem _ fun r hr => _
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ ↑lx r • id r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
⊢ ↑lx r • id r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
have : lx r ∈ S₀ :=
  Subring.subset_closure (Finset.mem_union_left _ (Finset.mem_image_of_mem _ hr))
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ { val := ↑lx r, property := this } • r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ ↑lx r • id r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
change (⟨_, this⟩ : S₀) • r ∈ _
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : ↑lx.support ⊆ ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ { val := ↑lx r, property := this } • r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ { val := ↑lx r, property := this } • r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
rw [Finsupp.mem_supported] at hlx1
no goals
case intro.intro.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : ↑lx.support ⊆ ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝⁴ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝³ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝² : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝¹ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this✝ : IsNoetherianRing { x // x ∈ S₀ }
r : A
hr : r ∈ lx.support
this : ↑lx r ∈ S₀
⊢ { val := ↑lx r, property := this } • r ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
exact Subalgebra.smul_mem _ (Algebra.subset_adjoin <| hlx1 hr) _
no goals
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
⊢ ∃ l, l ∈ Finsupp.supported R R ↑y ∧ ↑(Finsupp.total A A R id) l = x
rwa [← @Finsupp.mem_span_image_iff_total A A R _ _ _ id (↑y) x, Set.image_id (y : Set A), hy]
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
p : A
hp : p ∈ y
⊢ p ∈ span R ↑y
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
p : A
hp : p ∈ y
⊢ p ∈ ↑Subalgebra.toSubmodule S
rw [← hy]
no goals
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
p : A
hp : p ∈ y
⊢ p ∈ span R ↑y
exact subset_span hp
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
⊢ span { x // x ∈ S₀ } (insert 1 ↑y * insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
⊢ span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
rw [span_mul_span]
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
z : A
hz : z ∈ insert 1 ↑y * insert 1 ↑y
⊢ z ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
⊢ span { x // x ∈ S₀ } (insert 1 ↑y * insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
refine' span_le.2 fun z hz => _
case intro.intro.intro.inl.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
q : A
hq : q ∈ insert 1 ↑y
hz : 1 * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ 1 * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))

case intro.intro.intro.inr.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hq : q ∈ insert 1 ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ p * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
z : A
hz : z ∈ insert 1 ↑y * insert 1 ↑y
⊢ z ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
rcases Set.mem_mul.1 hz with ⟨p, q, rfl | hp, hq, rfl⟩
case intro.intro.intro.inr.intro.inl
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p : A
hp : p ∈ ↑y
hz : p * 1 ∈ insert 1 ↑y * insert 1 ↑y
⊢ p * 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))

case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ p * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
case intro.intro.intro.inr.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hq : q ∈ insert 1 ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ p * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
rcases hq with (rfl | hq)
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ ↑(Finsupp.total A A R id) (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) ∈
    ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ p * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
erw [← hly2 ⟨(p, q), Finset.mem_product.2 ⟨hp, hq⟩⟩]
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ ∑ a in (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support,
      ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) a • id a ∈
    ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ ↑(Finsupp.total A A R id) (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) ∈
    ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
rw [Finsupp.total_apply, Finsupp.sum]
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
⊢ ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t • id t ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
⊢ ∑ a in (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support,
      ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) a • id a ∈
    ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
refine' (span S₀ (insert 1 ↑y : Set A)).sum_mem fun t ht => _
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
this : ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t ∈ S₀
⊢ ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t • id t ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
⊢ ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t • id t ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
have : ly ⟨(p, q), Finset.mem_product.2 ⟨hp, hq⟩⟩ t ∈ S₀ :=
  Subring.subset_closure
    (Finset.mem_union_right _ <|
      Finset.mem_biUnion.2
        ⟨⟨(p, q), Finset.mem_product.2 ⟨hp, hq⟩⟩, Finset.mem_univ _,
          Finsupp.mem_frange.2 ⟨Finsupp.mem_support_iff.1 ht, _, rfl⟩⟩)
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
this : ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t ∈ S₀
⊢ { val := ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t, property := this } • t ∈
    span { x // x ∈ S₀ } (insert 1 ↑y)
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
this : ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t ∈ S₀
⊢ ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t • id t ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
change (⟨_, this⟩ : S₀) • t ∈ _
no goals
case intro.intro.intro.inr.intro.inr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p q : A
hp : p ∈ ↑y
hz : p * q ∈ insert 1 ↑y * insert 1 ↑y
hq : q ∈ ↑y
t : A
ht : t ∈ (ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }).support
this : ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t ∈ S₀
⊢ { val := ↑(ly { val := (p, q), property := (_ : (p, q) ∈ y ×ˢ y) }) t, property := this } • t ∈
    span { x // x ∈ S₀ } (insert 1 ↑y)
exact smul_mem _ _ (subset_span <| Or.inr <| hly1 _ ht)
case intro.intro.intro.inl.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
q : A
hq : q ∈ insert 1 ↑y
hz : 1 * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
case intro.intro.intro.inl.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
q : A
hq : q ∈ insert 1 ↑y
hz : 1 * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ 1 * q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
rw [one_mul]
no goals
case intro.intro.intro.inl.intro
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
q : A
hq : q ∈ insert 1 ↑y
hz : 1 * q ∈ insert 1 ↑y * insert 1 ↑y
⊢ q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
exact subset_span hq
case intro.intro.intro.inr.intro.inl
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p : A
hp : p ∈ ↑y
hz : p * 1 ∈ insert 1 ↑y * insert 1 ↑y
⊢ p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
case intro.intro.intro.inr.intro.inl
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p : A
hp : p ∈ ↑y
hz : p * 1 ∈ insert 1 ↑y * insert 1 ↑y
⊢ p * 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
rw [mul_one]
no goals
case intro.intro.intro.inr.intro.inl
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
p : A
hp : p ∈ ↑y
hz : p * 1 ∈ insert 1 ↑y * insert 1 ↑y
⊢ p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))
exact subset_span (Or.inr hp)
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
⊢ z ∈ S₁ ↔ z ∈ Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
⊢ S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
ext z
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y) ↔ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
⊢ z ∈ S₁ ↔ z ∈ Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
suffices
  z ∈ span (↥S₀) (insert 1 ↑y : Set A) ↔
    z ∈ Subalgebra.toSubmodule (Algebra.adjoin (↥S₀) (y : Set A)) by
  simpa
case h.mp
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
⊢ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)

case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y) ↔ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
constructor <;> intro hz
no goals
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
this : z ∈ span { x // x ∈ S₀ } (insert 1 ↑y) ↔ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ z ∈ S₁ ↔ z ∈ Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
simpa
no goals
case h.mp
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
⊢ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
exact
  (span_le.2
    (Set.insert_subset.2 ⟨(Algebra.adjoin S₀ (y : Set A)).one_mem, Algebra.subset_adjoin⟩)) hz
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
rw [Subalgebra.mem_toSubmodule, Algebra.mem_adjoin_iff] at hz
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y) ≤ S₁
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
suffices Subring.closure (Set.range (algebraMap (↥S₀) A) ∪ ↑y) ≤ S₁ by exact this hz
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ Set.range ↑(algebraMap { x // x ∈ S₀ } A) ⊆ ↑S₁
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y) ≤ S₁
refine' Subring.closure_le.2 (Set.union_subset _ fun t ht => subset_span <| Or.inr ht)
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ ∀ (y : { x // x ∈ S₀ }), ↑(algebraMap { x // x ∈ S₀ } A) y ∈ ↑S₁
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ Set.range ↑(algebraMap { x // x ∈ S₀ } A) ⊆ ↑S₁
rw [Set.range_subset_iff]
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
y' : { x // x ∈ S₀ }
⊢ ↑(algebraMap { x // x ∈ S₀ } A) y' ∈ ↑S₁
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
⊢ ∀ (y : { x // x ∈ S₀ }), ↑(algebraMap { x // x ∈ S₀ } A) y ∈ ↑S₁
intro y'
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
y' : { x // x ∈ S₀ }
⊢ y' • 1 ∈ ↑S₁
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
y' : { x // x ∈ S₀ }
⊢ ↑(algebraMap { x // x ∈ S₀ } A) y' ∈ ↑S₁
rw [Algebra.algebraMap_eq_smul_one]
no goals
case h.mpr
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝¹ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
y' : { x // x ∈ S₀ }
⊢ y' • 1 ∈ ↑S₁
exact smul_mem (span S₀ (insert (1 : A) (y : Set A))) y' (subset_span (Or.inl rfl))
no goals
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝² : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝¹ : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
z : A
hz : z ∈ Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y)
this : Subring.closure (Set.range ↑(algebraMap { x // x ∈ S₀ } A) ∪ ↑y) ≤ S₁
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y)
exact this hz
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ span { x // x ∈ S₀ } (insert 1 ↑y) = ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ span { x // x ∈ S₀ } ↑(insert 1 y) = ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
rw [Finset.coe_insert]
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
z : A
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y) ↔ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
⊢ span { x // x ∈ S₀ } (insert 1 ↑y) = ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
ext z
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
z : A
⊢ z ∈
      span
        { x //
          x ∈ Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion (Finset.attach (y ×ˢ y)) (Finsupp.frange ∘ ly)) }
        (insert 1 ↑y) ↔
    z ∈
      Algebra.adjoin
        { x //
          x ∈ Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion (Finset.attach (y ×ˢ y)) (Finsupp.frange ∘ ly)) }
        ↑y
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
z : A
⊢ z ∈ span { x // x ∈ S₀ } (insert 1 ↑y) ↔ z ∈ ↑Subalgebra.toSubmodule (Algebra.adjoin { x // x ∈ S₀ } ↑y)
simp only [Finset.coe_sort_coe, Finset.univ_eq_attach, Finset.mem_coe,
  Subalgebra.mem_toSubmodule]
no goals
case h
R : Type u_1
A : Type u_2
B : Type ?u.347819
S✝ : Type ?u.347822
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : CommRing S✝
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S✝
S : Subalgebra R A
x : A
hx : x ∈ S
y : Finset A
hy : span R ↑y = ↑Subalgebra.toSubmodule S
lx : A →₀ R
hlx1 : lx ∈ Finsupp.supported R R ↑y
hlx2 : ↑(Finsupp.total A A R id) lx = x
hyS : ∀ {p : A}, p ∈ y → p ∈ S
ly : { x // x ∈ y ×ˢ y } → A →₀ R
hly1 : ∀ (jk : { x // x ∈ y ×ˢ y }), ly jk ∈ Finsupp.supported R R ↑y
hly2 : ∀ (jk : { x // x ∈ y ×ˢ y }), ↑(Finsupp.total A A R id) (ly jk) = (↑jk).fst * (↑jk).snd
S₀ : Subring R := Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion Finset.univ (Finsupp.frange ∘ ly))
this✝³ : CommRing { x // x ∈ S₀ } := SubringClass.toCommRing S₀
this✝² : Algebra { x // x ∈ S₀ } A := Algebra.ofSubring S₀
this✝¹ : span { x // x ∈ S₀ } (insert 1 ↑y) * span { x // x ∈ S₀ } (insert 1 ↑y) ≤ span { x // x ∈ S₀ } (insert 1 ↑y)
S₁ : Subring A :=
  {
    toSubsemiring :=
      {
        toSubmonoid :=
          {
            toSubsemigroup :=
              { carrier := ↑(span { x // x ∈ S₀ } (insert 1 ↑y)),
                mul_mem' :=
                  (_ :
                    ∀ {p q : A},
                      p ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) →
                        q ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y)) → p * q ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
            one_mem' := (_ : 1 ∈ ↑(span { x // x ∈ S₀ } (insert 1 ↑y))) },
        add_mem' :=
          (_ :
            ∀ {x x_1 : A},
              x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) →
                x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → x + x_1 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)),
        zero_mem' := (_ : 0 ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) },
    neg_mem' := (_ : ∀ {x : A}, x ∈ span { x // x ∈ S₀ } (insert 1 ↑y) → -x ∈ span { x // x ∈ S₀ } (insert 1 ↑y)) }
this✝ : S₁ = Subalgebra.toSubring (Algebra.adjoin { x // x ∈ S₀ } ↑y)
foo : ∀ (z : A), z ∈ S₁ ↔ z ∈ Algebra.adjoin { x // x ∈ S₀ } ↑y
this : IsNoetherianRing { x // x ∈ S₀ }
z : A
⊢ z ∈
      span
        { x //
          x ∈ Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion (Finset.attach (y ×ˢ y)) (Finsupp.frange ∘ ly)) }
        (insert 1 ↑y) ↔
    z ∈
      Algebra.adjoin
        { x //
          x ∈ Subring.closure ↑(Finsupp.frange lx ∪ Finset.biUnion (Finset.attach (y ×ˢ y)) (Finsupp.frange ∘ ly)) }
        ↑y
convert foo z