Theorem: MvPolynomial.algebraTensorAlgEquiv_symm_monomial
File: Mathlib/RingTheory/TensorProduct/MvPolynomial.lean

tactic: apply @Finsupp.induction σ ℕ _ _ m
state_before: R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
⊢ (algebraTensorAlgEquiv R A).symm ((monomial m) a) = a ⊗ₜ[R] (monomial m) 1
state_after: case h0
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
⊢ (algebraTensorAlgEquiv R A).symm ((monomial 0) a) = a ⊗ₜ[R] (monomial 0) 1

case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
⊢ ∀ (a_1 : σ) (b : ℕ) (f : σ →₀ ℕ),
    a_1 ∉ f.support →
      b ≠ 0 →
        (algebraTensorAlgEquiv R A).symm ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1 →
          (algebraTensorAlgEquiv R A).symm ((monomial (Finsupp.single a_1 b + f)) a) =
            a ⊗ₜ[R] (monomial (Finsupp.single a_1 b + f)) 1

tactic: simp [algebraTensorAlgEquiv]
state_before: case h0
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
⊢ (algebraTensorAlgEquiv R A).symm ((monomial 0) a) = a ⊗ₜ[R] (monomial 0) 1
state_after: no goals

tactic: intro i n f _ _ hfa
state_before: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
⊢ ∀ (a_1 : σ) (b : ℕ) (f : σ →₀ ℕ),
    a_1 ∉ f.support →
      b ≠ 0 →
        (algebraTensorAlgEquiv R A).symm ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1 →
          (algebraTensorAlgEquiv R A).symm ((monomial (Finsupp.single a_1 b + f)) a) =
            a ⊗ₜ[R] (monomial (Finsupp.single a_1 b + f)) 1
state_after: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (algebraTensorAlgEquiv R A).symm ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ (algebraTensorAlgEquiv R A).symm ((monomial (Finsupp.single i n + f)) a) =
    a ⊗ₜ[R] (monomial (Finsupp.single i n + f)) 1

tactic: simp only [algebraTensorAlgEquiv, AlgEquiv.ofAlgHom_symm_apply] at hfa ⊢
state_before: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (algebraTensorAlgEquiv R A).symm ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ (algebraTensorAlgEquiv R A).symm ((monomial (Finsupp.single i n + f)) a) =
    a ⊗ₜ[R] (monomial (Finsupp.single i n + f)) 1
state_after: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial (Finsupp.single i n + f)) a) = a ⊗ₜ[R] (monomial (Finsupp.single i n + f)) 1

tactic: simp only [add_comm, monomial_add_single, _root_.map_mul, map_pow, aeval_X,
  Algebra.TensorProduct.tmul_pow, one_pow, hfa]
state_before: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial (Finsupp.single i n + f)) a) = a ⊗ₜ[R] (monomial (Finsupp.single i n + f)) 1
state_after: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ a ⊗ₜ[R] (monomial f) 1 * 1 ⊗ₜ[R] (X i ^ n) = a ⊗ₜ[R] ((monomial f) 1 * X i ^ n)

tactic: nth_rw 2 [← mul_one a]
state_before: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ a ⊗ₜ[R] (monomial f) 1 * 1 ⊗ₜ[R] (X i ^ n) = a ⊗ₜ[R] ((monomial f) 1 * X i ^ n)
state_after: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ a ⊗ₜ[R] (monomial f) 1 * 1 ⊗ₜ[R] (X i ^ n) = (a * 1) ⊗ₜ[R] ((monomial f) 1 * X i ^ n)

tactic: rw [Algebra.TensorProduct.tmul_mul_tmul]
state_before: case ha
R : Type u
M : Type v
N : Type w
inst✝⁹ : CommSemiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
σ : Type u_1
inst✝⁶ : DecidableEq σ
S : Type u_2
inst✝⁵ : CommSemiring S
inst✝⁴ : Algebra R S
inst✝³ : CommSemiring N
inst✝² : Algebra R N
A : Type u_3
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
m : σ →₀ ℕ
a : A
i : σ
n : ℕ
f : σ →₀ ℕ
a✝¹ : i ∉ f.support
a✝ : n ≠ 0
hfa : (aeval fun s => 1 ⊗ₜ[R] X s) ((monomial f) a) = a ⊗ₜ[R] (monomial f) 1
⊢ a ⊗ₜ[R] (monomial f) 1 * 1 ⊗ₜ[R] (X i ^ n) = (a * 1) ⊗ₜ[R] ((monomial f) 1 * X i ^ n)
state_after: no goals