Theorem: Basis.repr_apply_eq
File: Mathlib/LinearAlgebra/Basis.lean

tactic: let f_i : M →ₗ[R] R :=
  { toFun := fun x => f x i
    map_add' := fun _ _ => by dsimp only []; rw [hadd, Pi.add_apply]
    map_smul' := fun _ _ => by simp [hsmul, Pi.smul_apply] }
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
⊢ ↑(↑b.repr x) i = f x i

tactic: have : Finsupp.lapply i ∘ₗ ↑b.repr = f_i := by
  refine' b.ext fun j => _
  show b.repr (b j) i = f (b j) i
  rw [b.repr_self, f_eq]
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
f_i : M →ₗ[R] R :=
  {
    toAddHom :=
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) },
    map_smul' := (_ : ∀ (x : R) (x_1 : M), f (x • x_1) i = x * f x_1 i) }
⊢ ↑(↑b.repr x) i = f x i

tactic: calc
  b.repr x i = f_i x := by
    { rw [← this]
      rfl }
  _ = f x i := rfl
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
f_i : M →ₗ[R] R :=
  {
    toAddHom :=
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) },
    map_smul' := (_ : ∀ (x : R) (x_1 : M), f (x • x_1) i = x * f x_1 i) }
this : LinearMap.comp (Finsupp.lapply i) ↑b.repr = f_i
⊢ ↑(↑b.repr x) i = f x i

tactic: dsimp only []
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝² : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
x✝¹ x✝ : M
⊢ (fun x => f x i) (x✝¹ + x✝) = (fun x => f x i) x✝¹ + (fun x => f x i) x✝

tactic: rw [hadd, Pi.add_apply]
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝² : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
x✝¹ x✝ : M
⊢ f (x✝¹ + x✝) i = f x✝¹ i + f x✝ i

tactic: simp [hsmul, Pi.smul_apply]
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝² : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
x✝¹ : R
x✝ : M
⊢ AddHom.toFun
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) }
      (x✝¹ • x✝) =
    ↑(RingHom.id R) x✝¹ •
      AddHom.toFun
        { toFun := fun x => f x i,
          map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) }
        x✝

tactic: refine' b.ext fun j => _
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
f_i : M →ₗ[R] R :=
  {
    toAddHom :=
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) },
    map_smul' := (_ : ∀ (x : R) (x_1 : M), f (x • x_1) i = x * f x_1 i) }
⊢ LinearMap.comp (Finsupp.lapply i) ↑b.repr = f_i

tactic: show b.repr (b j) i = f (b j) i
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
f_i : M →ₗ[R] R :=
  {
    toAddHom :=
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) },
    map_smul' := (_ : ∀ (x : R) (x_1 : M), f (x • x_1) i = x * f x_1 i) }
j : ι
⊢ ↑(LinearMap.comp (Finsupp.lapply i) ↑b.repr) (↑b j) = ↑f_i (↑b j)

tactic: rw [b.repr_self, f_eq]
state_before: ι : Type u_1
ι' : Type ?u.220743
R : Type u_2
R₂ : Type ?u.220749
K : Type ?u.220752
M : Type u_3
M' : Type ?u.220758
M'' : Type ?u.220761
V : Type u
V' : Type ?u.220766
inst✝⁹ : Semiring R
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x✝ : M
R₁ : Type ?u.220878
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type ?u.221082
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f : M → ι → R
hadd : ∀ (x y : M), f (x + y) = f x + f y
hsmul : ∀ (c : R) (x : M), f (c • x) = c • f x
f_eq : ∀ (i : ι), f (↑b i) = ↑(Finsupp.single i 1)
x : M
i : ι
f_i : M →ₗ[R] R :=
  {
    toAddHom :=
      { toFun := fun x => f x i,
        map_add' := (_ : ∀ (x x_1 : M), (fun x => f x i) (x + x_1) = (fun x => f x i) x + (fun x => f x i) x_1) },
    map_smul' := (_ : ∀ (x : R) (x_1 : M), f (x • x_1) i = x * f x_1 i) }
j : ι
⊢ ↑(↑b.repr (↑b j)) i = f (↑b j) i