Theorem: contractLeft_assoc_coevaluation
File: Mathlib/LinearAlgebra/Coevaluation.lean

tactic: letI := Classical.decEq (Basis.ofVectorSpaceIndex K V)
state_before: K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
⊢ LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
      ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
        LinearMap.lTensor (Module.Dual K V) (coevaluation K V) =
    ↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))
state_after: K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
      ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
        LinearMap.lTensor (Module.Dual K V) (coevaluation K V) =
    ↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))

tactic: apply TensorProduct.ext
state_before: K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
      ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
        LinearMap.lTensor (Module.Dual K V) (coevaluation K V) =
    ↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))
state_after: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ (mk K (Module.Dual K V) K).compr₂
      (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
        ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
          LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) =
    (mk K (Module.Dual K V) K).compr₂
      (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V)))

tactic: apply (Basis.ofVectorSpace K V).dualBasis.ext
state_before: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ (mk K (Module.Dual K V) K).compr₂
      (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
        ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
          LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) =
    (mk K (Module.Dual K V) K).compr₂
      (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V)))
state_after: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∀ (i : ↑(Basis.ofVectorSpaceIndex K V)),
    ((mk K (Module.Dual K V) K).compr₂
          (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
            ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
              LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
        ((Basis.ofVectorSpace K V).dualBasis i) =
      ((mk K (Module.Dual K V) K).compr₂
          (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
        ((Basis.ofVectorSpace K V).dualBasis i)

tactic: intro j
state_before: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∀ (i : ↑(Basis.ofVectorSpaceIndex K V)),
    ((mk K (Module.Dual K V) K).compr₂
          (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
            ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
              LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
        ((Basis.ofVectorSpace K V).dualBasis i) =
      ((mk K (Module.Dual K V) K).compr₂
          (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
        ((Basis.ofVectorSpace K V).dualBasis i)
state_after: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ((mk K (Module.Dual K V) K).compr₂
        (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
          ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
            LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
      ((Basis.ofVectorSpace K V).dualBasis j) =
    ((mk K (Module.Dual K V) K).compr₂
        (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
      ((Basis.ofVectorSpace K V).dualBasis j)

tactic: apply LinearMap.ext_ring
state_before: case H
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ((mk K (Module.Dual K V) K).compr₂
        (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
          ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
            LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
      ((Basis.ofVectorSpace K V).dualBasis j) =
    ((mk K (Module.Dual K V) K).compr₂
        (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
      ((Basis.ofVectorSpace K V).dualBasis j)
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (((mk K (Module.Dual K V) K).compr₂
          (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
            ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
              LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
        ((Basis.ofVectorSpace K V).dualBasis j))
      1 =
    (((mk K (Module.Dual K V) K).compr₂
          (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
        ((Basis.ofVectorSpace K V).dualBasis j))
      1

tactic: rw [LinearMap.compr₂_apply, LinearMap.compr₂_apply, TensorProduct.mk_apply]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (((mk K (Module.Dual K V) K).compr₂
          (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
            ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
              LinearMap.lTensor (Module.Dual K V) (coevaluation K V)))
        ((Basis.ofVectorSpace K V).dualBasis j))
      1 =
    (((mk K (Module.Dual K V) K).compr₂
          (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V))))
        ((Basis.ofVectorSpace K V).dualBasis j))
      1
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
        ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
          LinearMap.lTensor (Module.Dual K V) (coevaluation K V))
      ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1) =
    (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V)))
      ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1)

tactic: simp only [LinearMap.coe_comp, Function.comp_apply, LinearEquiv.coe_toLinearMap]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V) ∘ₗ
        ↑(TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm ∘ₗ
          LinearMap.lTensor (Module.Dual K V) (coevaluation K V))
      ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1) =
    (↑(TensorProduct.lid K (Module.Dual K V)).symm ∘ₗ ↑(TensorProduct.rid K (Module.Dual K V)))
      ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1)
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))) =
    (TensorProduct.lid K (Module.Dual K V)).symm
      ((TensorProduct.rid K (Module.Dual K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))

tactic: rw [rid_tmul, one_smul, lid_symm_apply]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))) =
    (TensorProduct.lid K (Module.Dual K V)).symm
      ((TensorProduct.rid K (Module.Dual K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: simp only [LinearEquiv.coe_toLinearMap, LinearMap.lTensor_tmul, coevaluation_apply_one]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((LinearMap.lTensor (Module.Dual K V) (coevaluation K V)) ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] 1))) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K]
          ∑ i : ↑(Basis.ofVectorSpaceIndex K V), (Basis.ofVectorSpace K V) i ⊗ₜ[K] (Basis.ofVectorSpace K V).coord i)) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: rw [TensorProduct.tmul_sum, map_sum]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      ((TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
        ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K]
          ∑ i : ↑(Basis.ofVectorSpaceIndex K V), (Basis.ofVectorSpace K V) i ⊗ₜ[K] (Basis.ofVectorSpace K V).coord i)) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      (∑ x : ↑(Basis.ofVectorSpaceIndex K V),
        (TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
          ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K]
            (Basis.ofVectorSpace K V) x ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x)) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: simp only [assoc_symm_tmul]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      (∑ x : ↑(Basis.ofVectorSpaceIndex K V),
        (TensorProduct.assoc K (Module.Dual K V) V (Module.Dual K V)).symm
          ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K]
            (Basis.ofVectorSpace K V) x ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x)) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      (∑ x : ↑(Basis.ofVectorSpaceIndex K V),
        ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] (Basis.ofVectorSpace K V) x) ⊗ₜ[K]
          (Basis.ofVectorSpace K V).coord x) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: rw [map_sum]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
      (∑ x : ↑(Basis.ofVectorSpaceIndex K V),
        ((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] (Basis.ofVectorSpace K V) x) ⊗ₜ[K]
          (Basis.ofVectorSpace K V).coord x) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∑ x : ↑(Basis.ofVectorSpaceIndex K V),
      (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
        (((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] (Basis.ofVectorSpace K V) x) ⊗ₜ[K]
          (Basis.ofVectorSpace K V).coord x) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: simp only [LinearMap.rTensor_tmul, contractLeft_apply]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∑ x : ↑(Basis.ofVectorSpaceIndex K V),
      (LinearMap.rTensor (Module.Dual K V) (contractLeft K V))
        (((Basis.ofVectorSpace K V).dualBasis j ⊗ₜ[K] (Basis.ofVectorSpace K V) x) ⊗ₜ[K]
          (Basis.ofVectorSpace K V).coord x) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∑ x : ↑(Basis.ofVectorSpaceIndex K V),
      ((Basis.ofVectorSpace K V).dualBasis j) ((Basis.ofVectorSpace K V) x) ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j

tactic: simp only [Basis.coe_dualBasis, Basis.coord_apply, Basis.repr_self_apply, TensorProduct.ite_tmul]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ ∑ x : ↑(Basis.ofVectorSpaceIndex K V),
      ((Basis.ofVectorSpace K V).dualBasis j) ((Basis.ofVectorSpace K V) x) ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).dualBasis j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (∑ x : ↑(Basis.ofVectorSpaceIndex K V), if x = j then 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x else 0) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j

tactic: rw [Finset.sum_ite_eq']
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (∑ x : ↑(Basis.ofVectorSpaceIndex K V), if x = j then 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord x else 0) =
    1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j
state_after: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (if j ∈ Finset.univ then 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j else 0) = 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j

tactic: simp only [Finset.mem_univ, if_true]
state_before: case H.h
K : Type u
inst✝³ : Field K
V : Type v
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
this : DecidableEq ↑(Basis.ofVectorSpaceIndex K V) := Classical.decEq ↑(Basis.ofVectorSpaceIndex K V)
j : ↑(Basis.ofVectorSpaceIndex K V)
⊢ (if j ∈ Finset.univ then 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j else 0) = 1 ⊗ₜ[K] (Basis.ofVectorSpace K V).coord j
state_after: no goals