Theorem: Subalgebra.mem_of_finset_sum_eq_one_of_pow_smul_mem
File: Mathlib/Algebra/Algebra/Subalgebra/Basic.lean

tactic: let _i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id _
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', 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 ∈ S'

tactic: suffices x ∈ Subalgebra.toSubmodule (Algebra.ofId S' S).range by
  obtain ⟨x, rfl⟩ := this
  exact x.2
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', 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'
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
⊢ x ∈ S'

tactic: choose n hn using H
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', 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'
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: let s' : ι → S' := fun x => ⟨s x, hs x⟩
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: let l' : ι → S' := fun x => ⟨l x, hl x⟩
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: have e' : (∑ i in ι', l' i * s' i) = 1 := by
  ext
  show S'.subtype (∑ i in ι', l' i * s' i) = 1
  simpa only [map_sum, map_mul] using e
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: have : Ideal.span (s' '' ι') = ⊤ := by
  rw [Ideal.eq_top_iff_one, ← e']
  apply sum_mem
  intros i hi
  exact Ideal.mul_mem_left _ _ <| Ideal.subset_span <| Set.mem_image_of_mem s' hi
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: let N := ι'.sup n
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: have hN := Ideal.span_pow_eq_top _ this N
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: apply (Algebra.ofId S' S).range.toSubmodule.mem_of_span_top_of_smul_mem _ hN
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
⊢ x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: rintro ⟨_, _, ⟨i, hi, rfl⟩, rfl⟩
state_before: case H
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
⊢ ∀ (r : ↑((fun x => x ^ N) '' (s' '' ↑ι'))), ↑r • x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: change s' i ^ N • x ∈ _
state_before: case H.mk.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ ↑{ val := (fun x => x ^ N) (s' i),
          property := (_ : ∃ a, a ∈ s' '' ↑ι' ∧ (fun x => x ^ N) a = (fun x => x ^ N) (s' i)) } •
      x ∈
    ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: rw [← tsub_add_cancel_of_le (show n i ≤ N from Finset.le_sup hi), pow_add, mul_smul]
state_before: case H.mk.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ s' i ^ N • x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: refine' Submodule.smul_mem _ (⟨_, pow_mem (hs i) _⟩ : S') _
state_before: case H.mk.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ s' i ^ (N - n i) • s' i ^ n i • x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: exact ⟨⟨_, hn i⟩, rfl⟩
state_before: case H.mk.intro.intro.intro.intro
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
this : Ideal.span (s' '' ↑ι') = ⊤
N : ℕ := Finset.sup ι' n
hN : Ideal.span ((fun x => x ^ N) '' (s' '' ↑ι')) = ⊤
i : ι
hi : i ∈ ↑ι'
⊢ s' i ^ n i • x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))

tactic: obtain ⟨x, rfl⟩ := this
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', 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'
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
this : x ∈ ↑toSubmodule (AlgHom.range (ofId { x // x ∈ S' } S))
⊢ x ∈ S'

tactic: exact x.2
state_before: case intro
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
x : { x // x ∈ S' }
H : ∀ (i : ι), ∃ n, s i ^ n • ↑↑(ofId { x // x ∈ S' } S) x ∈ S'
⊢ ↑↑(ofId { x // x ∈ S' } S) x ∈ S'

tactic: ext
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
⊢ ∑ i in ι', l' i * s' i = 1

tactic: show S'.subtype (∑ i in ι', l' i * s' i) = 1
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
⊢ ↑(∑ i in ι', l' i * s' i) = ↑1

tactic: simpa only [map_sum, map_mul] using e
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
⊢ ↑(Subsemiring.subtype S'.toSubsemiring) (∑ i in ι', l' i * s' i) = 1

tactic: rw [Ideal.eq_top_iff_one, ← e']
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
⊢ Ideal.span (s' '' ↑ι') = ⊤

tactic: apply sum_mem
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
⊢ ∑ i in ι', l' i * s' i ∈ Ideal.span (s' '' ↑ι')

tactic: intros i hi
state_before: case h
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
⊢ ∀ (c : ι), c ∈ ι' → l' c * s' c ∈ Ideal.span (s' '' ↑ι')

tactic: exact Ideal.mul_mem_left _ _ <| Ideal.subset_span <| Set.mem_image_of_mem s' hi
state_before: case h
R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
S✝ : Subalgebra R A
S : Type u_1
inst✝¹ : CommRing S
inst✝ : Algebra R S
S' : Subalgebra R S
ι : Type u_2
ι' : Finset ι
s l : ι → S
e : ∑ i in ι', l i * s i = 1
hs : ∀ (i : ι), s i ∈ S'
hl : ∀ (i : ι), l i ∈ S'
x : S
_i : Algebra { x // x ∈ S' } { x // x ∈ S' } := Algebra.id { x // x ∈ S' }
n : ι → ℕ
hn : ∀ (i : ι), s i ^ n i • x ∈ S'
s' : ι → { x // x ∈ S' } := fun x => { val := s x, property := (_ : s x ∈ S') }
l' : ι → { x // x ∈ S' } := fun x => { val := l x, property := (_ : l x ∈ S') }
e' : ∑ i in ι', l' i * s' i = 1
i : ι
hi : i ∈ ι'
⊢ l' i * s' i ∈ Ideal.span (s' '' ↑ι')