Theorem: Basis.reindexRange_repr'
File: Mathlib/LinearAlgebra/Basis.lean

tactic: nontriviality
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x bi : M
i : ι
h : ↑b i = bi
⊢ ↑(↑(reindexRange b).repr x) { val := bi, property := (_ : ∃ y, ↑b y = bi) } = ↑(↑b.repr x) i

tactic: subst h
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x bi : M
i : ι
h : ↑b i = bi
✝ : Nontrivial ((fun x => R) { val := bi, property := (_ : ∃ y, ↑b y = bi) })
⊢ ↑(↑(reindexRange b).repr x) { val := bi, property := (_ : ∃ y, ↑b y = bi) } = ↑(↑b.repr x) i

tactic: apply (b.repr_apply_eq (fun x i => b.reindexRange.repr x ⟨b i, _⟩) _ _ _ x i).symm
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
⊢ ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) } = ↑(↑b.repr x) i

tactic: intro x y
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
⊢ ∀ (x y : M),
    (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (x + y) =
      (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x +
        (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) y

tactic: ext i
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x✝ : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
x y : M
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (x + y) =
    (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x +
      (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) y

tactic: simp only [Pi.add_apply, LinearEquiv.map_add, Finsupp.coe_add]
state_before: case h
ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x✝ : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
x y : M
i : ι
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (x + y) i =
    ((fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x +
        (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) y)
      i

tactic: intro c x
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
⊢ ∀ (c : R) (x : M),
    (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (c • x) =
      c • (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x

tactic: ext i
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x✝ : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
c : R
x : M
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (c • x) =
    c • (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x

tactic: simp only [Pi.smul_apply, LinearEquiv.map_smul, Finsupp.coe_smul]
state_before: case h
ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x✝ : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
c : R
x : M
i : ι
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (c • x) i =
    (c • (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) x) i

tactic: intro i
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) })
⊢ ∀ (i : ι),
    (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (↑b i) =
      ↑(Finsupp.single i 1)

tactic: ext j
state_before: ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
i : ι
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (↑b i) =
    ↑(Finsupp.single i 1)

tactic: simp only [reindexRange_repr_self]
state_before: case h
ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
i j : ι
⊢ (fun x i => ↑(↑(reindexRange b).repr x) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }) (↑b i) j =
    ↑(Finsupp.single i 1) j

tactic: apply Finsupp.single_apply_left (f := fun i => (⟨b i, _⟩ : Set.range b))
state_before: case h
ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
i j : ι
⊢ ↑(Finsupp.single { val := ↑b i, property := (_ : ↑b i ∈ range ↑b) } 1)
      { val := ↑b j, property := (_ : ∃ y, ↑b y = ↑b j) } =
    ↑(Finsupp.single i 1) j

tactic: exact fun i j h => b.injective (Subtype.mk.inj h)
state_before: case h.hf
ι : Type u_2
ι' : Type ?u.390992
R : Type u_3
R₂ : Type ?u.390998
K : Type ?u.391001
M : Type u_1
M' : Type ?u.391007
M'' : Type ?u.391010
V : Type u
V' : Type ?u.391015
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
b' : Basis ι' R M'
e : ι ≃ ι'
x : M
i✝ : ι
✝ : Nontrivial ((fun x => R) { val := ↑b i✝, property := (_ : ∃ y, ↑b y = ↑b i✝) })
i j : ι
⊢ Injective fun i => { val := ↑b i, property := (_ : ↑b i ∈ range ↑b) }