-- Mathlib/Algebra/Algebra/Subalgebra/Operations.lean
theorem mem_of_finset_sum_eq_one_of_pow_smul_mem
    {ι : Type*} (ι' : Finset ι) (s : ι → S) (l : ι → S)
    (e : ∑ i ∈ ι', l i * s i = 1) (hs : ∀ i, s i ∈ S') (hl : ∀ i, l i ∈ S') (x : S)
    (H : ∀ i, ∃ n : ℕ, (s i ^ n : S) • x ∈ S') : x ∈ S'

Proof state:
case H.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
e' : ∑ i ∈ ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := ι'.sup n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ ↑⟨(fun x => x ^ N) (s' i), ⋯⟩ • x ∈ toSubmodule (ofId (↥S') S).range

Tactic:
change s' i ^ N • x ∈ _

Result:
case H.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
e' : ∑ i ∈ ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := ι'.sup n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ s' i ^ N • x ∈ toSubmodule (ofId (↥S') S).range

Proof state:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
H : ∀ (i : ι), ∃ n, s i ^ n • x ∈ S'
⊢ x ∈ toSubmodule (ofId (↥S') S).range

Tactic:
choose n hn using H

Result:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
⊢ x ∈ toSubmodule (ofId (↥S') S).range

Proof state:
case a
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
⊢ ↑(∑ i ∈ ι', l' i * s' i) = ↑1

Tactic:
show S'.subtype (∑ i ∈ ι', l' i * s' i) = 1

Result:
case a
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
⊢ S'.subtype (∑ i ∈ ι', l' i * s' i) = 1

Proof state:
case H.mk.intro.intro.intro.intro
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
e' : ∑ i ∈ ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := ι'.sup n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ s' i ^ n i • x ∈ toSubmodule (ofId (↥S') S).range

Tactic:
exact ⟨⟨_, hn i⟩, rfl⟩

Result:
no goals

Proof state:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
⊢ x ∈ toSubmodule (ofId (↥S') S).range

Tactic:
let s' : ι → S' := fun x => ⟨s x, hs x⟩

Result:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
⊢ x ∈ toSubmodule (ofId (↥S') S).range

Proof state:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
⊢ ∑ i ∈ ι', l' i * s' i = 1

Tactic:
ext

Result:
case a
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
⊢ ↑(∑ i ∈ ι', l' i * s' i) = ↑1

Proof state:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
e' : ∑ i ∈ ι', l' i * s' i = 1
⊢ Ideal.span (s' '' ↑ι') = ⊤

Tactic:
rw [Ideal.eq_top_iff_one, ← e']

Result:
R : Type u_1
S : Type u_2
inst✝² : CommSemiring R
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_3
ι' : Finset ι
s l : ι → S
e : ∑ i ∈ ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → ↥S' := fun x => ⟨s x, ⋯⟩
l' : ι → ↥S' := fun x => ⟨l x, ⋯⟩
e' : ∑ i ∈ ι', l' i * s' i = 1
⊢ ∑ i ∈ ι', l' i * s' i ∈ Ideal.span (s' '' ↑ι')