Theorem: MvPolynomial.adjoin_range_X
File: Mathlib/Data/MvPolynomial/Basic.lean

tactic: set S := Algebra.adjoin R (range (X : σ → MvPolynomial σ R))
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
⊢ Algebra.adjoin R (range X) = ⊤

tactic: refine' top_unique fun p hp => _
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
⊢ S = ⊤

tactic: clear hp
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
hp : p ∈ ⊤
⊢ p ∈ S

tactic: induction p using MvPolynomial.induction_on
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
⊢ p ∈ S

tactic: case h_C => exact S.algebraMap_mem _
state_before: case h_C
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
a✝ : R
⊢ ↑C a✝ ∈ S

case h_add
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p✝ q✝ : MvPolynomial σ R
a✝¹ : p✝ ∈ S
a✝ : q✝ ∈ S
⊢ p✝ + q✝ ∈ S

case h_X
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p✝ : MvPolynomial σ R
n✝ : σ
a✝ : p✝ ∈ S
⊢ p✝ * X n✝ ∈ S

tactic: case h_add p q hp hq => exact S.add_mem hp hq
state_before: case h_add
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p✝ q✝ : MvPolynomial σ R
a✝¹ : p✝ ∈ S
a✝ : q✝ ∈ S
⊢ p✝ + q✝ ∈ S

case h_X
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p✝ : MvPolynomial σ R
n✝ : σ
a✝ : p✝ ∈ S
⊢ p✝ * X n✝ ∈ S

tactic: case h_X p i hp => exact S.mul_mem hp (Algebra.subset_adjoin <| mem_range_self _)
state_before: case h_X
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p✝ : MvPolynomial σ R
n✝ : σ
a✝ : p✝ ∈ S
⊢ p✝ * X n✝ ∈ S

tactic: exact S.algebraMap_mem _
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
a✝ : R
⊢ ↑C a✝ ∈ S

tactic: exact S.add_mem hp hq
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q✝ : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p q : MvPolynomial σ R
hp : p ∈ S
hq : q ∈ S
⊢ p + q ∈ S

tactic: exact S.mul_mem hp (Algebra.subset_adjoin <| mem_range_self _)
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
i : σ
hp : p ∈ S
⊢ p * X i ∈ S