[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Subsingleton R
x✝ : Basis ι R M
b : M ≃ₗ[R] ι →₀ R
⊢ { repr := b } = default
[PROOFSTEP]
rw [Subsingleton.elim b]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
f g : Basis ι R M
h : f.repr = g.repr
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case ofRepr
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
g : Basis ι R M
repr✝ : M ≃ₗ[R] ι →₀ R
h : { repr := repr✝ }.repr = g.repr
⊢ { repr := repr✝ } = g
[PROOFSTEP]
cases g
[GOAL]
case ofRepr.ofRepr
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
repr✝¹ repr✝ : M ≃ₗ[R] ι →₀ R
h : { repr := repr✝¹ }.repr = { repr := repr✝ }.repr
⊢ { repr := repr✝¹ } = { repr := repr✝ }
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
f g : Basis ι R M
h :
  (fun b i => ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)) f =
    (fun b i => ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)) g
⊢ ↑(LinearEquiv.symm f.repr) = ↑(LinearEquiv.symm g.repr)
[PROOFSTEP]
ext
[GOAL]
case h.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
f g : Basis ι R M
h :
  (fun b i => ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)) f =
    (fun b i => ↑(LinearEquiv.symm b.repr) (Finsupp.single i 1)) g
a✝ : ι
⊢ ↑(LinearMap.comp (↑(LinearEquiv.symm f.repr)) (Finsupp.lsingle a✝)) 1 =
    ↑(LinearMap.comp (↑(LinearEquiv.symm g.repr)) (Finsupp.lsingle a✝)) 1
[PROOFSTEP]
exact congr_fun h _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(LinearEquiv.symm b.repr) (Finsupp.single i c) = ↑(LinearEquiv.symm b.repr) (c • Finsupp.single i 1)
[PROOFSTEP]
{rw [Finsupp.smul_single', mul_one]
}
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(LinearEquiv.symm b.repr) (Finsupp.single i c) = ↑(LinearEquiv.symm b.repr) (c • Finsupp.single i 1)
[PROOFSTEP]
rw [Finsupp.smul_single', mul_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(LinearEquiv.symm b.repr) (c • Finsupp.single i 1) = c • ↑b i
[PROOFSTEP]
rw [LinearEquiv.map_smul, repr_symm_single_one]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
j : ι
inst✝ : Decidable (i = j)
⊢ ↑(↑b.repr (↑b i)) j = if i = j then 1 else 0
[PROOFSTEP]
rw [repr_self, Finsupp.single_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
v : ι →₀ R
⊢ ↑(LinearEquiv.symm b.repr) v = ↑(LinearEquiv.symm b.repr) (Finsupp.sum v Finsupp.single)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
v : ι →₀ R
⊢ ↑(LinearEquiv.symm b.repr) (Finsupp.sum v Finsupp.single) =
    ∑ i in v.support, ↑(LinearEquiv.symm b.repr) (Finsupp.single i (↑v i))
[PROOFSTEP]
rw [Finsupp.sum, LinearEquiv.map_sum]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
v : ι →₀ R
⊢ ∑ i in v.support, ↑(LinearEquiv.symm b.repr) (Finsupp.single i (↑v i)) = ↑(Finsupp.total ι M R ↑b) v
[PROOFSTEP]
simp [repr_symm_single, Finsupp.total_apply, Finsupp.sum]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
v : ι →₀ R
⊢ ↑b.repr (↑(Finsupp.total ι M R ↑b) v) = v
[PROOFSTEP]
rw [← b.coe_repr_symm]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
v : ι →₀ R
⊢ ↑b.repr (↑↑(LinearEquiv.symm b.repr) v) = v
[PROOFSTEP]
exact b.repr.apply_symm_apply v
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(Finsupp.total ι M R ↑b) (↑b.repr x) = x
[PROOFSTEP]
rw [← b.coe_repr_symm]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑↑(LinearEquiv.symm b.repr) (↑b.repr x) = x
[PROOFSTEP]
exact b.repr.symm_apply_apply x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ LinearMap.range ↑b.repr = Finsupp.supported R R univ
[PROOFSTEP]
rw [LinearEquiv.range, Finsupp.supported_univ]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : M
⊢ ↑b.repr m ∈ Finsupp.supported R R ↑(↑b.repr m).support ∧ ↑(Finsupp.total ι M R ↑b) (↑b.repr m) = m
[PROOFSTEP]
simp [Finsupp.mem_supported_support]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
s : Set ι
m : M
hm : m ∈ span R (↑b '' s)
⊢ ↑(↑b.repr m).support ⊆ s
[PROOFSTEP]
rcases(Finsupp.mem_span_image_iff_total _).1 hm with ⟨l, hl, rfl⟩
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
s : Set ι
l : ι →₀ R
hl : l ∈ Finsupp.supported R R s
hm : ↑(Finsupp.total ι M R ↑b) l ∈ span R (↑b '' s)
⊢ ↑(↑b.repr (↑(Finsupp.total ι M R ↑b) l)).support ⊆ s
[PROOFSTEP]
rwa [repr_total, ← Finsupp.mem_supported R l]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Nontrivial R
i : ι
s : Set ι
⊢ ↑b i ∈ span R (↑b '' s) ↔ i ∈ s
[PROOFSTEP]
simp [mem_span_image, Finsupp.support_single_ne_zero]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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✝ x : M
⊢ (∀ (i : ι), ↑(coord b i) x = 0) ↔ ↑b.repr x = 0
[PROOFSTEP]
simp only [b.coord_apply, FunLike.ext_iff, Finsupp.zero_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(sumCoords b) = fun m => ∑ᶠ (i : ι), ↑(coord b i) m
[PROOFSTEP]
ext m
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : M
⊢ ↑(sumCoords b) m = ∑ᶠ (i : ι), ↑(coord b i) m
[PROOFSTEP]
simp only [Basis.sumCoords, Basis.coord, Finsupp.lapply_apply, LinearMap.id_coe, LinearEquiv.coe_coe,
  Function.comp_apply, Finsupp.coe_lsum, LinearMap.coe_comp, finsum_eq_sum _ (b.repr m).finite_support, Finsupp.sum,
  Finset.finite_toSet_toFinset, id.def, Finsupp.fun_support_eq]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Fintype ι
⊢ ↑(sumCoords b) = ↑(∑ i : ι, coord b i)
[PROOFSTEP]
ext m
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Fintype ι
m : M
⊢ ↑(sumCoords b) m = ↑(∑ i : ι, coord b i) m
[PROOFSTEP]
simp only [sumCoords, Finsupp.sum_fintype, LinearMap.id_coe, LinearEquiv.coe_coe, coord_apply, id.def,
  Fintype.sum_apply, imp_true_iff, Finsupp.coe_lsum, LinearMap.coe_comp, comp_apply, LinearMap.coeFn_sum]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(sumCoords b) (↑b i) = 1
[PROOFSTEP]
simp only [Basis.sumCoords, LinearMap.id_coe, LinearEquiv.coe_coe, id.def, Basis.repr_self, Function.comp_apply,
  Finsupp.coe_lsum, LinearMap.coe_comp, Finsupp.sum_single_index]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
i : ι
m : M
r : R
⊢ ↑(coord b i) (r • m) = r * ↑(coord b i) m
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
i : ι
f : ι →₀ R
⊢ ↑(coord b i) (↑(LinearEquiv.symm b.repr) f) = ↑f i
[PROOFSTEP]
simp only [repr_symm_apply, coord_apply, repr_total]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M →ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
⊢ f₁ = f₂
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M →ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
x : M
⊢ ↑f₁ x = ↑f₂ x
[PROOFSTEP]
rw [← b.total_repr x, Finsupp.total_apply, Finsupp.sum]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M →ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
x : M
⊢ ↑f₁ (∑ a in (↑b.repr x).support, ↑(↑b.repr x) a • ↑b a) = ↑f₂ (∑ a in (↑b.repr x).support, ↑(↑b.repr x) a • ↑b a)
[PROOFSTEP]
simp only [LinearMap.map_sum, LinearMap.map_smulₛₗ, h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M ≃ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
⊢ f₁ = f₂
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M ≃ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
x : M
⊢ ↑f₁ x = ↑f₂ x
[PROOFSTEP]
rw [← b.total_repr x, Finsupp.total_apply, Finsupp.sum]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
f₁ f₂ : M ≃ₛₗ[σ] M₁
h : ∀ (i : ι), ↑f₁ (↑b i) = ↑f₂ (↑b i)
x : M
⊢ ↑f₁ (∑ a in (↑b.repr x).support, ↑(↑b.repr x) a • ↑b a) = ↑f₂ (∑ a in (↑b.repr x).support, ↑(↑b.repr x) a • ↑b a)
[PROOFSTEP]
simp only [LinearEquiv.map_sum, LinearEquiv.map_smulₛₗ, h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
x y : M
⊢ x = y ↔ ∀ (i : ι), ↑(↑b.repr x) i = ↑(↑b.repr y) i
[PROOFSTEP]
simp only [← FunLike.ext_iff, EmbeddingLike.apply_eq_iff_eq]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
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] }
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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✝
[PROOFSTEP]
dsimp only []
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
rw [hadd, Pi.add_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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✝
[PROOFSTEP]
simp [hsmul, Pi.smul_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
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]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
refine' b.ext fun j => _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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)
[PROOFSTEP]
show b.repr (b j) i = f (b j) i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
rw [b.repr_self, f_eq]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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
[PROOFSTEP]
calc
  b.repr x i = f_i x := by {
    rw [← this]
    rfl
  }
  _ = f x i := rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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_i x
[PROOFSTEP]
{ rw [← this]
  rfl
}
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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_i x
[PROOFSTEP]
rw [← this]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
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 = ↑(LinearMap.comp (Finsupp.lapply i) ↑b.repr) x
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
b₁ b₂ : Basis ι R M
h : ∀ (x : M) (i : ι), ↑(↑b₁.repr x) i = ↑(↑b₂.repr x) i
⊢ b₁.repr = b₂.repr
[PROOFSTEP]
ext
[GOAL]
case h.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝⁴ : Semiring R₁
σ : R →+* R₁
σ' : R₁ →+* R
inst✝³ : RingHomInvPair σ σ'
inst✝² : RingHomInvPair σ' σ
M₁ : Type u_11
inst✝¹ : AddCommMonoid M₁
inst✝ : Module R₁ M₁
b₁ b₂ : Basis ι R M
h : ∀ (x : M) (i : ι), ↑(↑b₁.repr x) i = ↑(↑b₂.repr x) i
x✝ : M
a✝ : ι
⊢ ↑(↑b₁.repr x✝) a✝ = ↑(↑b₂.repr x✝) a✝
[PROOFSTEP]
apply h
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
⊢ Basis ι R' M
[PROOFSTEP]
letI : Module R' R := Module.compHom R (↑f.symm : R' →+* R)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
⊢ Basis ι R' M
[PROOFSTEP]
haveI : IsScalarTower R' R M :=
  {
    smul_assoc := fun x y z => by
      -- Porting note: `dsimp [(· • ·)]` is unavailable because
              --               `HSMul.hsmul` becomes `SMul.smul`.
      change (f.symm x * y) • z = x • (y • z)
      rw [mul_smul, ← h, f.apply_symm_apply] }
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
x : R'
y : R
z : M
⊢ (x • y) • z = x • y • z
[PROOFSTEP]
change (f.symm x * y) • z = x • (y • z)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
x : R'
y : R
z : M
⊢ (↑(RingEquiv.symm f) x * y) • z = x • y • z
[PROOFSTEP]
rw [mul_smul, ← h, f.apply_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
this✝ : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
this : IsScalarTower R' R M
⊢ Basis ι R' M
[PROOFSTEP]
exact
  ofRepr <| (b.repr.restrictScalars R').trans <| Finsupp.mapRange.linearEquiv (Module.compHom.toLinearEquiv f.symm).symm
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
i : ι
⊢ ↑(mapCoeffs b f h).repr (↑b i) = Finsupp.single i 1
[PROOFSTEP]
letI : Module R' R := Module.compHom R (↑f.symm : R' →+* R)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
i : ι
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
⊢ ↑(mapCoeffs b f h).repr (↑b i) = Finsupp.single i 1
[PROOFSTEP]
haveI : IsScalarTower R' R M :=
  {
    smul_assoc := fun x y z => by
      -- Porting note: `dsimp [(· • ·)]` is unavailable because
              --               `HSMul.hsmul` becomes `SMul.smul`.
      change (f.symm x * y) • z = x • (y • z)
      rw [mul_smul, ← h, f.apply_symm_apply] }
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
i : ι
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
x : R'
y : R
z : M
⊢ (x • y) • z = x • y • z
[PROOFSTEP]
change (f.symm x * y) • z = x • (y • z)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
i : ι
this : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
x : R'
y : R
z : M
⊢ (↑(RingEquiv.symm f) x * y) • z = x • y • z
[PROOFSTEP]
rw [mul_smul, ← h, f.apply_symm_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
inst✝¹ : Semiring R'
inst✝ : Module R' M
f : R ≃+* R'
h : ∀ (c : R) (x : M), ↑f c • x = c • x
i : ι
this✝ : Module R' R := Module.compHom R ↑(RingEquiv.symm f)
this : IsScalarTower R' R M
⊢ ↑(mapCoeffs b f h).repr (↑b i) = Finsupp.single i 1
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i' : ι'
⊢ ↑(LinearEquiv.symm (LinearEquiv.trans b.repr (Finsupp.domLCongr e))) (Finsupp.single i' 1) =
    ↑(LinearEquiv.symm b.repr) (Finsupp.single (↑e.symm i') 1)
[PROOFSTEP]
rw [LinearEquiv.symm_trans_apply, Finsupp.domLCongr_symm, Finsupp.domLCongr_single]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i' : ι'
⊢ ↑(↑(Finsupp.domLCongr e) (↑b.repr x)) i' = ↑(↑b.repr x) (↑e.symm i')
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_1 : ι'), ↑(↑(reindex b e).repr x) x_1 = ↑(Finsupp.mapDomain (↑e) (↑b.repr x)) x_1
[PROOFSTEP]
simp [repr_reindex_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
⊢ ↑(reindex b (Equiv.refl ι)) i = ↑b i
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
⊢ range ↑(reindex b e) = range ↑b
[PROOFSTEP]
simp [coe_reindex, range_comp]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
⊢ sumCoords (reindex b e) = sumCoords b
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ ↑(sumCoords (reindex b e)) x = ↑(sumCoords b) x
[PROOFSTEP]
simp only [coe_sumCoords, repr_reindex]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
⊢ (Finsupp.sum (Finsupp.mapDomain (↑e) (↑b.repr x)) fun x => id) = Finsupp.sum (↑b.repr x) fun x => id
[PROOFSTEP]
exact Finsupp.sum_mapDomain_index (fun _ => rfl) fun _ _ _ => rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
by_cases htr : Nontrivial R
[GOAL]
case pos
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
htr : Nontrivial R
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
letI := htr
[GOAL]
case pos
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
htr : Nontrivial R
this : Nontrivial R := htr
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
simp [htr, reindexRange, reindex_apply, Equiv.apply_ofInjective_symm b.injective, Subtype.coe_mk]
[GOAL]
case neg
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
htr : ¬Nontrivial R
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
letI : Subsingleton R := not_nontrivial_iff_subsingleton.mp htr
[GOAL]
case neg
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
htr : ¬Nontrivial R
this : Subsingleton R := Iff.mp not_nontrivial_iff_subsingleton htr
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
letI := Module.subsingleton R M
[GOAL]
case neg
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
h : optParam (↑b i ∈ range ↑b) (_ : ↑b i ∈ range ↑b)
htr : ¬Nontrivial R
this✝ : Subsingleton R := Iff.mp not_nontrivial_iff_subsingleton htr
this : Subsingleton M := Module.subsingleton R M
⊢ ↑(reindexRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
simp [reindexRange]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ↑(range ↑b)
⊢ ↑(reindexRange b) x = ↑x
[PROOFSTEP]
rcases x with ⟨bi, ⟨i, rfl⟩⟩
[GOAL]
case mk.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
i : ι
⊢ ↑(reindexRange b) { val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) } =
    ↑{ val := ↑b i, property := (_ : ∃ y, ↑b y = ↑b i) }
[PROOFSTEP]
exact b.reindexRange_self i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
nontriviality
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
subst h
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
apply (b.repr_apply_eq (fun x i => b.reindexRange.repr x ⟨b i, _⟩) _ _ _ x i).symm
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
intro x y
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
simp only [Pi.add_apply, LinearEquiv.map_add, Finsupp.coe_add]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
intro c x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
simp only [Pi.smul_apply, LinearEquiv.map_smul, Finsupp.coe_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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)
[PROOFSTEP]
intro i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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)
[PROOFSTEP]
ext j
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
simp only [reindexRange_repr_self]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
[PROOFSTEP]
apply Finsupp.single_apply_left (f := fun i => (⟨b i, _⟩ : Set.range b))
[GOAL]
case h.hf
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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) }
[PROOFSTEP]
exact fun i j h => b.injective (Subtype.mk.inj h)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
⊢ ∀ (a : M), a ∈ range ↑b ↔ ↑(Equiv.refl M) a ∈ Finset.image (↑b) Finset.univ
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
h : optParam (↑b i ∈ Finset.image (↑b) Finset.univ) (_ : ↑b i ∈ Finset.image (↑b) Finset.univ)
⊢ ↑(reindexFinsetRange b) { val := ↑b i, property := h } = ↑b i
[PROOFSTEP]
rw [reindexFinsetRange, reindex_apply, reindexRange_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
h : optParam (↑b i ∈ Finset.image (↑b) Finset.univ) (_ : ↑b i ∈ Finset.image (↑b) Finset.univ)
⊢ ↑(↑(Equiv.subtypeEquiv (Equiv.refl M) (_ : ∀ (a : M), a ∈ range ↑b ↔ a ∈ Finset.image (↑b) Finset.univ)).symm
        { val := ↑b i, property := h }) =
    ↑b i
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
x : { x // x ∈ Finset.image (↑b) Finset.univ }
⊢ ↑(reindexFinsetRange b) x = ↑x
[PROOFSTEP]
rcases x with ⟨bi, hbi⟩
[GOAL]
case mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
bi : M
hbi : bi ∈ Finset.image (↑b) Finset.univ
⊢ ↑(reindexFinsetRange b) { val := bi, property := hbi } = ↑{ val := bi, property := hbi }
[PROOFSTEP]
rcases Finset.mem_image.mp hbi with ⟨i, -, rfl⟩
[GOAL]
case mk.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
hbi : ↑b i ∈ Finset.image (↑b) Finset.univ
⊢ ↑(reindexFinsetRange b) { val := ↑b i, property := hbi } = ↑{ val := ↑b i, property := hbi }
[PROOFSTEP]
exact b.reindexFinsetRange_self i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
⊢ ↑(reindexFinsetRange b).repr (↑b i) =
    Finsupp.single { val := ↑b i, property := (_ : ↑b i ∈ Finset.image (↑b) Finset.univ) } 1
[PROOFSTEP]
ext ⟨bi, hbi⟩
[GOAL]
case h.mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
bi : M
hbi : bi ∈ Finset.image (↑b) Finset.univ
⊢ ↑(↑(reindexFinsetRange b).repr (↑b i)) { val := bi, property := hbi } =
    ↑(Finsupp.single { val := ↑b i, property := (_ : ↑b i ∈ Finset.image (↑b) Finset.univ) } 1)
      { val := bi, property := hbi }
[PROOFSTEP]
rw [reindexFinsetRange, repr_reindex, Finsupp.mapDomain_equiv_apply, reindexRange_repr_self]
  -- Porting note: replaced a `convert; refl` with `simp`
[GOAL]
case h.mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
i : ι
bi : M
hbi : bi ∈ Finset.image (↑b) Finset.univ
⊢ ↑(Finsupp.single { val := ↑b i, property := (_ : ↑b i ∈ range ↑b) } 1)
      (↑(Equiv.subtypeEquiv (Equiv.refl M) (_ : ∀ (a : M), a ∈ range ↑b ↔ a ∈ Finset.image (↑b) Finset.univ)).symm
        { val := bi, property := hbi }) =
    ↑(Finsupp.single { val := ↑b i, property := (_ : ↑b i ∈ Finset.image (↑b) Finset.univ) } 1)
      { val := bi, property := hbi }
[PROOFSTEP]
simp [Finsupp.single_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : Fintype ι
inst✝ : DecidableEq M
x : M
i : ι
h : optParam (↑b i ∈ Finset.image (↑b) Finset.univ) (_ : ↑b i ∈ Finset.image (↑b) Finset.univ)
⊢ ↑(↑(reindexFinsetRange b).repr x) { val := ↑b i, property := h } = ↑(↑b.repr x) i
[PROOFSTEP]
simp [reindexFinsetRange]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
l : ι →₀ R
hl : ↑(Finsupp.total ι M R ↑b) l = 0
⊢ ↑b.repr (↑(Finsupp.total ι M R ↑b) l) = 0
[PROOFSTEP]
rw [hl, LinearEquiv.map_zero]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Nontrivial M
⊢ Nonempty ι
[PROOFSTEP]
obtain ⟨x, y, ne⟩ : ∃ x y : M, x ≠ y := Nontrivial.exists_pair_ne
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Nontrivial M
x y : M
ne : x ≠ y
⊢ Nonempty ι
[PROOFSTEP]
obtain ⟨i, _⟩ := not_forall.mp (mt b.ext_elem_iff.2 ne)
[GOAL]
case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : Nontrivial M
x y : M
ne : x ≠ y
i : ι
h✝ : ¬↑(↑b.repr x) i = ↑(↑b.repr y) i
⊢ Nonempty ι
[PROOFSTEP]
exact ⟨i⟩
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
⊢ x ∈ P ↔ ∃ c, x = Finsupp.sum c fun i x => x • ↑(↑b i)
[PROOFSTEP]
conv_lhs =>
  rw [← P.range_subtype, ← Submodule.map_top, ← b.span_eq, Submodule.map_span, ← Set.range_comp, ← Finsupp.range_total]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
| x ∈ P
[PROOFSTEP]
rw [← P.range_subtype, ← Submodule.map_top, ← b.span_eq, Submodule.map_span, ← Set.range_comp, ← Finsupp.range_total]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
| x ∈ P
[PROOFSTEP]
rw [← P.range_subtype, ← Submodule.map_top, ← b.span_eq, Submodule.map_span, ← Set.range_comp, ← Finsupp.range_total]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
| x ∈ P
[PROOFSTEP]
rw [← P.range_subtype, ← Submodule.map_top, ← b.span_eq, Submodule.map_span, ← Set.range_comp, ← Finsupp.range_total]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
⊢ x ∈ LinearMap.range (Finsupp.total ι M R (↑(Submodule.subtype P) ∘ ↑b)) ↔
    ∃ c, x = Finsupp.sum c fun i x => x • ↑(↑b i)
[PROOFSTEP]
simp [@eq_comm _ x, Function.comp, Finsupp.total_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f g : ι → M'
⊢ (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) (f + g) =
    (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) f +
      (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) g
[PROOFSTEP]
refine' b.ext fun i => _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f g : ι → M'
i : ι
⊢ ↑((fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) (f + g))
      (↑b i) =
    ↑((fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) f +
          (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr)) g)
      (↑b i)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
c : S
f : ι → M'
⊢ AddHom.toFun
      { toFun := fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
        map_add' :=
          (_ :
            ∀ (f g : ι → M'),
              (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                  (f + g) =
                (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                    f +
                  (fun f =>
                      LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                    g) }
      (c • f) =
    ↑(RingHom.id S) c •
      AddHom.toFun
        {
          toFun := fun f =>
            LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
          map_add' :=
            (_ :
              ∀ (f g : ι → M'),
                (fun f => LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                    (f + g) =
                  (fun f =>
                        LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                      f +
                    (fun f =>
                        LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                      g) }
        f
[PROOFSTEP]
refine' b.ext fun i => _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
c : S
f : ι → M'
i : ι
⊢ ↑(AddHom.toFun
          {
            toFun := fun f =>
              LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
            map_add' :=
              (_ :
                ∀ (f g : ι → M'),
                  (fun f =>
                        LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                      (f + g) =
                    (fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                        f +
                      (fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                        g) }
          (c • f))
      (↑b i) =
    ↑(↑(RingHom.id S) c •
          AddHom.toFun
            {
              toFun := fun f =>
                LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
              map_add' :=
                (_ :
                  ∀ (f g : ι → M'),
                    (fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                        (f + g) =
                      (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          f +
                        (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          g) }
            f)
      (↑b i)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
⊢ (fun f i => ↑f (↑b i))
      (AddHom.toFun
        {
            toAddHom :=
              {
                toFun := fun f =>
                  LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                map_add' :=
                  (_ :
                    ∀ (f g : ι → M'),
                      (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          (f + g) =
                        (fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                            f +
                          (fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                            g) },
            map_smul' :=
              (_ :
                ∀ (c : S) (f : ι → M'),
                  AddHom.toFun
                      {
                        toFun := fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                        map_add' :=
                          (_ :
                            ∀ (f g : ι → M'),
                              (fun f =>
                                    LinearMap.comp (Finsupp.total M' M' R id)
                                      (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                  (f + g) =
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    f +
                                  (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    g) }
                      (c • f) =
                    ↑(RingHom.id S) c •
                      AddHom.toFun
                        {
                          toFun := fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                          map_add' :=
                            (_ :
                              ∀ (f g : ι → M'),
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    (f + g) =
                                  (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      f +
                                    (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      g) }
                        f) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x✝ : ι
⊢ (fun f i => ↑f (↑b i))
      (AddHom.toFun
        {
            toAddHom :=
              {
                toFun := fun f =>
                  LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                map_add' :=
                  (_ :
                    ∀ (f g : ι → M'),
                      (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          (f + g) =
                        (fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                            f +
                          (fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                            g) },
            map_smul' :=
              (_ :
                ∀ (c : S) (f : ι → M'),
                  AddHom.toFun
                      {
                        toFun := fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                        map_add' :=
                          (_ :
                            ∀ (f g : ι → M'),
                              (fun f =>
                                    LinearMap.comp (Finsupp.total M' M' R id)
                                      (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                  (f + g) =
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    f +
                                  (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    g) }
                      (c • f) =
                    ↑(RingHom.id S) c •
                      AddHom.toFun
                        {
                          toFun := fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                          map_add' :=
                            (_ :
                              ∀ (f g : ι → M'),
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    (f + g) =
                                  (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      f +
                                    (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      g) }
                        f) }.toAddHom
        f)
      x✝ =
    f x✝
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : M →ₗ[R] M'
⊢ AddHom.toFun
      {
          toAddHom :=
            {
              toFun := fun f =>
                LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
              map_add' :=
                (_ :
                  ∀ (f g : ι → M'),
                    (fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                        (f + g) =
                      (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          f +
                        (fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                          g) },
          map_smul' :=
            (_ :
              ∀ (c : S) (f : ι → M'),
                AddHom.toFun
                    {
                      toFun := fun f =>
                        LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                      map_add' :=
                        (_ :
                          ∀ (f g : ι → M'),
                            (fun f =>
                                  LinearMap.comp (Finsupp.total M' M' R id)
                                    (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                (f + g) =
                              (fun f =>
                                    LinearMap.comp (Finsupp.total M' M' R id)
                                      (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                  f +
                                (fun f =>
                                    LinearMap.comp (Finsupp.total M' M' R id)
                                      (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                  g) }
                    (c • f) =
                  ↑(RingHom.id S) c •
                    AddHom.toFun
                      {
                        toFun := fun f =>
                          LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                        map_add' :=
                          (_ :
                            ∀ (f g : ι → M'),
                              (fun f =>
                                    LinearMap.comp (Finsupp.total M' M' R id)
                                      (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                  (f + g) =
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    f +
                                  (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    g) }
                      f) }.toAddHom
      ((fun f i => ↑f (↑b i)) f) =
    f
[PROOFSTEP]
refine' b.ext fun i => _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : M →ₗ[R] M'
i : ι
⊢ ↑(AddHom.toFun
          {
              toAddHom :=
                {
                  toFun := fun f =>
                    LinearMap.comp (Finsupp.total M' M' R id) (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                  map_add' :=
                    (_ :
                      ∀ (f g : ι → M'),
                        (fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                            (f + g) =
                          (fun f =>
                                LinearMap.comp (Finsupp.total M' M' R id)
                                  (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                              f +
                            (fun f =>
                                LinearMap.comp (Finsupp.total M' M' R id)
                                  (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                              g) },
              map_smul' :=
                (_ :
                  ∀ (c : S) (f : ι → M'),
                    AddHom.toFun
                        {
                          toFun := fun f =>
                            LinearMap.comp (Finsupp.total M' M' R id)
                              (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                          map_add' :=
                            (_ :
                              ∀ (f g : ι → M'),
                                (fun f =>
                                      LinearMap.comp (Finsupp.total M' M' R id)
                                        (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                    (f + g) =
                                  (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      f +
                                    (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      g) }
                        (c • f) =
                      ↑(RingHom.id S) c •
                        AddHom.toFun
                          {
                            toFun := fun f =>
                              LinearMap.comp (Finsupp.total M' M' R id)
                                (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr),
                            map_add' :=
                              (_ :
                                ∀ (f g : ι → M'),
                                  (fun f =>
                                        LinearMap.comp (Finsupp.total M' M' R id)
                                          (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                      (f + g) =
                                    (fun f =>
                                          LinearMap.comp (Finsupp.total M' M' R id)
                                            (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                        f +
                                      (fun f =>
                                          LinearMap.comp (Finsupp.total M' M' R id)
                                            (LinearMap.comp (Finsupp.lmapDomain R R f) ↑b.repr))
                                        g) }
                          f) }.toAddHom
          ((fun f i => ↑f (↑b i)) f))
      (↑b i) =
    ↑f (↑b i)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ ↑(↑(constr b S) f) x = Finsupp.sum (↑b.repr x) fun b a => a • f b
[PROOFSTEP]
simp only [constr_def, LinearMap.comp_apply, Finsupp.lmapDomain_apply, Finsupp.total_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ (Finsupp.sum (Finsupp.mapDomain f (↑↑b.repr x)) fun i a => a • id i) = Finsupp.sum (↑b.repr x) fun b a => a • f b
[PROOFSTEP]
rw [Finsupp.sum_mapDomain_index]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ (Finsupp.sum (↑↑b.repr x) fun a m => m • id (f a)) = Finsupp.sum (↑b.repr x) fun b a => a • f b
[PROOFSTEP]
simp [add_smul]
[GOAL]
case h_zero
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ ∀ (b : M'), 0 • id b = 0
[PROOFSTEP]
simp [add_smul]
[GOAL]
case h_add
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ ∀ (b : M') (m₁ m₂ : R), (m₁ + m₂) • id b = m₁ • id b + m₂ • id b
[PROOFSTEP]
simp [add_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
i : ι
⊢ ↑(↑(constr b S) f) (↑b i) = f i
[PROOFSTEP]
simp [Basis.constr_apply, b.repr_self]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝³ : Semiring S
inst✝² : Module S M'
inst✝¹ : SMulCommClass R S M'
inst✝ : Nonempty ι
f : ι → M'
⊢ LinearMap.range (↑(constr b S) f) = span R (range f)
[PROOFSTEP]
rw [b.constr_def S f, LinearMap.range_comp, LinearMap.range_comp, LinearEquiv.range, ← Finsupp.supported_univ,
  Finsupp.lmapDomain_supported, ← Set.image_univ, ← Finsupp.span_image_eq_map_total, Set.image_id]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : M' →ₗ[R] M'
v : ι → M'
i : ι
⊢ ↑(↑(constr b S) (↑f ∘ v)) (↑b i) = ↑(LinearMap.comp f (↑(constr b S) v)) (↑b i)
[PROOFSTEP]
simp only [Basis.constr_basis, LinearMap.comp_apply, Function.comp]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
⊢ ↑(Basis.equiv b b' e) (↑b i) = ↑b' (↑e i)
[PROOFSTEP]
simp [Basis.equiv]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
i : ι
⊢ ↑(Basis.equiv b b (Equiv.refl ι)) (↑b i) = ↑(LinearEquiv.refl R M) (↑b i)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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 : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
i : ι'
⊢ ↑(Basis.equiv b b' e) (↑(LinearEquiv.symm (Basis.equiv b b' e)) (↑b' i)) =
    ↑(Basis.equiv b b' e) (↑(Basis.equiv b' b e.symm) (↑b' i))
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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✝ : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
ι'' : Type u_10
b'' : Basis ι'' R M''
e : ι ≃ ι'
e' : ι' ≃ ι''
i : ι
⊢ ↑(LinearEquiv.trans (Basis.equiv b b' e) (Basis.equiv b' b'' e')) (↑b i) = ↑(Basis.equiv b b'' (e.trans e')) (↑b i)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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✝ : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
b : Basis ι R M
b' : Basis ι' R M'
e : ι ≃ ι'
⊢ Basis.map b (Basis.equiv b b' e) = reindex b' e.symm
[PROOFSTEP]
ext i
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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✝ : ι ≃ ι'
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
b : Basis ι R M
b' : Basis ι' R M'
e : ι ≃ ι'
i : ι
⊢ ↑(Basis.map b (Basis.equiv b b' e)) i = ↑(reindex b' e.symm) i
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι
⊢ ↑b.repr (↑(Basis.prod b b') (Sum.inl i)).fst = ↑b.repr (↑b i)
[PROOFSTEP]
ext j
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i j : ι
⊢ ↑(↑b.repr (↑(Basis.prod b b') (Sum.inl i)).fst) j = ↑(↑b.repr (↑b i)) j
[PROOFSTEP]
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply, LinearEquiv.prod_symm, LinearEquiv.prod_apply,
  b.repr.apply_symm_apply, LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe,
  Finsupp.fst_sumFinsuppLEquivProdFinsupp]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i j : ι
⊢ ↑(Finsupp.single (Sum.inl i) 1) (Sum.inl j) = ↑(Finsupp.single i 1) j
[PROOFSTEP]
apply Finsupp.single_apply_left Sum.inl_injective
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι'
⊢ ↑b.repr (↑(Basis.prod b b') (Sum.inr i)).fst = ↑b.repr 0
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i✝ : ι'
i : ι
⊢ ↑(↑b.repr (↑(Basis.prod b b') (Sum.inr i✝)).fst) i = ↑(↑b.repr 0) i
[PROOFSTEP]
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply, LinearEquiv.prod_symm, LinearEquiv.prod_apply,
  b.repr.apply_symm_apply, LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe,
  Finsupp.fst_sumFinsuppLEquivProdFinsupp, LinearEquiv.map_zero, Finsupp.zero_apply]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i✝ : ι'
i : ι
⊢ ↑(Finsupp.single (Sum.inr i✝) 1) (Sum.inl i) = 0
[PROOFSTEP]
apply Finsupp.single_eq_of_ne Sum.inr_ne_inl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι
⊢ ↑b'.repr (↑(Basis.prod b b') (Sum.inl i)).snd = ↑b'.repr 0
[PROOFSTEP]
ext j
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι
j : ι'
⊢ ↑(↑b'.repr (↑(Basis.prod b b') (Sum.inl i)).snd) j = ↑(↑b'.repr 0) j
[PROOFSTEP]
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply, LinearEquiv.prod_symm, LinearEquiv.prod_apply,
  b'.repr.apply_symm_apply, LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe,
  Finsupp.snd_sumFinsuppLEquivProdFinsupp, LinearEquiv.map_zero, Finsupp.zero_apply]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι
j : ι'
⊢ ↑(Finsupp.single (Sum.inl i) 1) (Sum.inr j) = 0
[PROOFSTEP]
apply Finsupp.single_eq_of_ne Sum.inl_ne_inr
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι'
⊢ ↑b'.repr (↑(Basis.prod b b') (Sum.inr i)).snd = ↑b'.repr (↑b' i)
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i✝ i : ι'
⊢ ↑(↑b'.repr (↑(Basis.prod b b') (Sum.inr i✝)).snd) i = ↑(↑b'.repr (↑b' i✝)) i
[PROOFSTEP]
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply, LinearEquiv.prod_symm, LinearEquiv.prod_apply,
  b'.repr.apply_symm_apply, LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe,
  Finsupp.snd_sumFinsuppLEquivProdFinsupp]
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i✝ i : ι'
⊢ ↑(Finsupp.single (Sum.inr i✝) 1) (Sum.inr i) = ↑(Finsupp.single i✝ 1) i
[PROOFSTEP]
apply Finsupp.single_apply_left Sum.inr_injective
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι ⊕ ι'
⊢ ↑(Basis.prod b b') i = Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') i
[PROOFSTEP]
ext
[GOAL]
case h₁
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι ⊕ ι'
⊢ (↑(Basis.prod b b') i).fst = (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') i).fst
[PROOFSTEP]
cases i
[GOAL]
case h₂
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
i : ι ⊕ ι'
⊢ (↑(Basis.prod b b') i).snd = (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') i).snd
[PROOFSTEP]
cases i
[GOAL]
case h₁.inl
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
val✝ : ι
⊢ (↑(Basis.prod b b') (Sum.inl val✝)).fst =
    (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') (Sum.inl val✝)).fst
[PROOFSTEP]
simp only [prod_apply_inl_fst, Sum.elim_inl, LinearMap.inl_apply, prod_apply_inr_fst, Sum.elim_inr, LinearMap.inr_apply,
  prod_apply_inl_snd, prod_apply_inr_snd, Function.comp]
[GOAL]
case h₁.inr
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
val✝ : ι'
⊢ (↑(Basis.prod b b') (Sum.inr val✝)).fst =
    (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') (Sum.inr val✝)).fst
[PROOFSTEP]
simp only [prod_apply_inl_fst, Sum.elim_inl, LinearMap.inl_apply, prod_apply_inr_fst, Sum.elim_inr, LinearMap.inr_apply,
  prod_apply_inl_snd, prod_apply_inr_snd, Function.comp]
[GOAL]
case h₂.inl
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
val✝ : ι
⊢ (↑(Basis.prod b b') (Sum.inl val✝)).snd =
    (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') (Sum.inl val✝)).snd
[PROOFSTEP]
simp only [prod_apply_inl_fst, Sum.elim_inl, LinearMap.inl_apply, prod_apply_inr_fst, Sum.elim_inr, LinearMap.inr_apply,
  prod_apply_inl_snd, prod_apply_inr_snd, Function.comp]
[GOAL]
case h₂.inr
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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'
val✝ : ι'
⊢ (↑(Basis.prod b b') (Sum.inr val✝)).snd =
    (Sum.elim (↑(LinearMap.inl R M M') ∘ ↑b) (↑(LinearMap.inr R M M') ∘ ↑b') (Sum.inr val✝)).snd
[PROOFSTEP]
simp only [prod_apply_inl_fst, Sum.elim_inl, LinearMap.inl_apply, prod_apply_inr_fst, Sum.elim_inr, LinearMap.inr_apply,
  prod_apply_inl_snd, prod_apply_inr_snd, Function.comp]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
c : R
x : M
hcx : c • x = 0
⊢ c = 0 ∨ x = 0
[PROOFSTEP]
exact
  or_iff_not_imp_right.mpr fun hx =>
    by
    rw [← b.total_repr x, ← LinearMap.map_smul] at hcx 
    have := linearIndependent_iff.mp b.linearIndependent (c • b.repr x) hcx
    rw [smul_eq_zero] at this 
    exact this.resolve_right fun hr => hx (b.repr.map_eq_zero_iff.mp hr)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
c : R
x : M
hcx : c • x = 0
hx : ¬x = 0
⊢ c = 0
[PROOFSTEP]
rw [← b.total_repr x, ← LinearMap.map_smul] at hcx 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
c : R
x : M
hcx : ↑(Finsupp.total ι M R ↑b) (c • ↑b.repr x) = 0
hx : ¬x = 0
⊢ c = 0
[PROOFSTEP]
have := linearIndependent_iff.mp b.linearIndependent (c • b.repr x) hcx
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
c : R
x : M
hcx : ↑(Finsupp.total ι M R ↑b) (c • ↑b.repr x) = 0
hx : ¬x = 0
this : c • ↑b.repr x = 0
⊢ c = 0
[PROOFSTEP]
rw [smul_eq_zero] at this 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
c : R
x : M
hcx : ↑(Finsupp.total ι M R ↑b) (c • ↑b.repr x) = 0
hx : ¬x = 0
this : c = 0 ∨ ↑b.repr x = 0
⊢ c = 0
[PROOFSTEP]
exact this.resolve_right fun hr => hx (b.repr.map_eq_zero_iff.mp hr)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
rank_eq : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m = 0
⊢ N = ⊥
[PROOFSTEP]
rw [Submodule.eq_bot_iff]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
rank_eq : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m = 0
⊢ ∀ (x : M), x ∈ N → x = 0
[PROOFSTEP]
intro x hx
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
rank_eq : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m = 0
x : M
hx : x ∈ N
⊢ x = 0
[PROOFSTEP]
contrapose! rank_eq with x_ne
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
⊢ Exists fun {m} => ∃ v, LinearIndependent R (Subtype.val ∘ v) ∧ m ≠ 0
[PROOFSTEP]
refine' ⟨1, fun _ => ⟨x, hx⟩, _, one_ne_zero⟩
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
⊢ LinearIndependent R (Subtype.val ∘ fun x_1 => { val := x, property := hx })
[PROOFSTEP]
rw [Fintype.linearIndependent_iff]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
⊢ ∀ (g : Fin 1 → R),
    ∑ i : Fin 1, g i • (Subtype.val ∘ fun x_1 => { val := x, property := hx }) i = 0 → ∀ (i : Fin 1), g i = 0
[PROOFSTEP]
rintro g sum_eq i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
g : Fin 1 → R
sum_eq : ∑ i : Fin 1, g i • (Subtype.val ∘ fun x_1 => { val := x, property := hx }) i = 0
i : Fin 1
⊢ g i = 0
[PROOFSTEP]
cases' i with _ hi
[GOAL]
case mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
g : Fin 1 → R
sum_eq : ∑ i : Fin 1, g i • (Subtype.val ∘ fun x_1 => { val := x, property := hx }) i = 0
val✝ : ℕ
hi : val✝ < 1
⊢ g { val := val✝, isLt := hi } = 0
[PROOFSTEP]
simp only [Function.const_apply, Fin.default_eq_zero, Submodule.coe_mk, Finset.univ_unique, Function.comp_const,
  Finset.sum_singleton] at sum_eq 
[GOAL]
case mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
inst✝ : NoZeroDivisors R
b : Basis ι R M
N : Submodule R M
x : M
hx : x ∈ N
x_ne : x ≠ 0
g : Fin 1 → R
val✝ : ℕ
hi : val✝ < 1
sum_eq : g 0 • (Subtype.val ∘ fun x_1 => { val := x, property := hx }) 0 = 0
⊢ g { val := val✝, isLt := hi } = 0
[PROOFSTEP]
convert (b.smul_eq_zero.mp sum_eq).resolve_right x_ne
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
x y : R
⊢ (fun x => Finsupp.single default x) (x + y) =
    (fun x => Finsupp.single default x) x + (fun x => Finsupp.single default x) y
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
c x : R
⊢ AddHom.toFun
      { toFun := fun x => Finsupp.single default x,
        map_add' :=
          (_ : ∀ (x y : R), Finsupp.single default (x + y) = Finsupp.single default x + Finsupp.single default y) }
      (c • x) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := fun x => Finsupp.single default x,
          map_add' :=
            (_ : ∀ (x y : R), Finsupp.single default (x + y) = Finsupp.single default x + Finsupp.single default y) }
        x
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
x : R
⊢ (fun f => ↑f default)
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun x => Finsupp.single default x,
                map_add' :=
                  (_ :
                    ∀ (x y : R),
                      Finsupp.single default (x + y) = Finsupp.single default x + Finsupp.single default y) },
            map_smul' := (_ : ∀ (c x : R), Finsupp.single default (c * x) = c • Finsupp.single default x) }.toAddHom
        x) =
    x
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
f : ι →₀ R
⊢ ↑(AddHom.toFun
          {
              toAddHom :=
                { toFun := fun x => Finsupp.single default x,
                  map_add' :=
                    (_ :
                      ∀ (x y : R),
                        Finsupp.single default (x + y) = Finsupp.single default x + Finsupp.single default y) },
              map_smul' := (_ : ∀ (c x : R), Finsupp.single default (c * x) = c • Finsupp.single default x) }.toAddHom
          ((fun f => ↑f default) f))
      default =
    ↑f default
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
i : ι
⊢ ↑(Basis.singleton ι R).repr 1 = Finsupp.single i 1
[PROOFSTEP]
simp [Basis.singleton]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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
ι : Type u_10
R : Type u_11
inst✝¹ : Unique ι
inst✝ : Semiring R
x : R
i : ι
⊢ ↑(↑(Basis.singleton ι R).repr x) i = x
[PROOFSTEP]
simp [Basis.singleton, Unique.eq_default i]
[GOAL]
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
⊢ Nonempty (Basis ι R M) ↔ ∃ x x_1, ∀ (y : M), ∃ r, r • x = y
[PROOFSTEP]
constructor
[GOAL]
case mp
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
⊢ Nonempty (Basis ι R M) → ∃ x x_1, ∀ (y : M), ∃ r, r • x = y
[PROOFSTEP]
rintro ⟨b⟩
[GOAL]
case mp.intro
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
b : Basis ι R M
⊢ ∃ x x_1, ∀ (y : M), ∃ r, r • x = y
[PROOFSTEP]
refine' ⟨b default, b.linearIndependent.ne_zero _, _⟩
[GOAL]
case mp.intro
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
b : Basis ι R M
⊢ ∀ (y : M), ∃ r, r • ↑b default = y
[PROOFSTEP]
simpa [span_singleton_eq_top_iff, Set.range_unique] using b.span_eq
[GOAL]
case mpr
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
⊢ (∃ x x_1, ∀ (y : M), ∃ r, r • x = y) → Nonempty (Basis ι R M)
[PROOFSTEP]
rintro ⟨x, nz, w⟩
[GOAL]
case mpr.intro.intro
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
⊢ Nonempty (Basis ι R M)
[PROOFSTEP]
refine
  ⟨ofRepr <|
      LinearEquiv.symm
        { toFun := fun f => f default • x
          invFun := fun y => Finsupp.single default (w y).choose
          left_inv := fun f => Finsupp.unique_ext ?_
          right_inv := fun y => ?_
          map_add' := fun y z => ?_
          map_smul' := fun c y => ?_ }⟩
[GOAL]
case mpr.intro.intro.refine_1
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
y z : ι →₀ R
⊢ (fun f => ↑f default • x) (y + z) = (fun f => ↑f default • x) y + (fun f => ↑f default • x) z
[PROOFSTEP]
simp [Finsupp.add_apply, add_smul]
[GOAL]
case mpr.intro.intro.refine_2
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
c : R
y : ι →₀ R
⊢ AddHom.toFun
      { toFun := fun f => ↑f default • x,
        map_add' := (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
      (c • y) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := fun f => ↑f default • x,
          map_add' := (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
        y
[PROOFSTEP]
simp only [Finsupp.coe_smul, Pi.smul_apply, RingHom.id_apply]
[GOAL]
case mpr.intro.intro.refine_2
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
c : R
y : ι →₀ R
⊢ (c • ↑y default) • x = c • ↑y default • x
[PROOFSTEP]
rw [← smul_assoc, smul_eq_mul]
[GOAL]
case mpr.intro.intro.refine_3
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
f : ι →₀ R
⊢ ↑((fun y => Finsupp.single default (Exists.choose (_ : ∃ r, r • x = y)))
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => ↑f default • x,
                    map_add' :=
                      (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) },
                map_smul' :=
                  (_ :
                    ∀ (c : R) (y : ι →₀ R),
                      AddHom.toFun
                          { toFun := fun f => ↑f default • x,
                            map_add' :=
                              (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                          (c • y) =
                        ↑(RingHom.id R) c •
                          AddHom.toFun
                            { toFun := fun f => ↑f default • x,
                              map_add' :=
                                (_ :
                                  ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                            y) }.toAddHom
            f))
      default =
    ↑f default
[PROOFSTEP]
refine' smul_left_injective _ nz _
[GOAL]
case mpr.intro.intro.refine_3
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
f : ι →₀ R
⊢ (fun c => c • x)
      (↑((fun y => Finsupp.single default (Exists.choose (_ : ∃ r, r • x = y)))
            (AddHom.toFun
              {
                  toAddHom :=
                    { toFun := fun f => ↑f default • x,
                      map_add' :=
                        (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) },
                  map_smul' :=
                    (_ :
                      ∀ (c : R) (y : ι →₀ R),
                        AddHom.toFun
                            { toFun := fun f => ↑f default • x,
                              map_add' :=
                                (_ :
                                  ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                            (c • y) =
                          ↑(RingHom.id R) c •
                            AddHom.toFun
                              { toFun := fun f => ↑f default • x,
                                map_add' :=
                                  (_ :
                                    ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                              y) }.toAddHom
              f))
        default) =
    (fun c => c • x) (↑f default)
[PROOFSTEP]
simp only [Finsupp.single_eq_same]
[GOAL]
case mpr.intro.intro.refine_3
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
f : ι →₀ R
⊢ Exists.choose
        (_ :
          ∃ r,
            r • x =
              AddHom.toFun
                {
                    toAddHom :=
                      { toFun := fun f => ↑f default • x,
                        map_add' :=
                          (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) },
                    map_smul' :=
                      (_ :
                        ∀ (c : R) (y : ι →₀ R),
                          AddHom.toFun
                              { toFun := fun f => ↑f default • x,
                                map_add' :=
                                  (_ :
                                    ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                              (c • y) =
                            ↑(RingHom.id R) c •
                              AddHom.toFun
                                { toFun := fun f => ↑f default • x,
                                  map_add' :=
                                    (_ :
                                      ∀ (y z : ι →₀ R),
                                        (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                                y) }.toAddHom
                f) •
      x =
    ↑f default • x
[PROOFSTEP]
exact (w (f default • x)).choose_spec
[GOAL]
case mpr.intro.intro.refine_4
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
y : M
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := fun f => ↑f default • x,
              map_add' := (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) },
          map_smul' :=
            (_ :
              ∀ (c : R) (y : ι →₀ R),
                AddHom.toFun
                    { toFun := fun f => ↑f default • x,
                      map_add' :=
                        (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                    (c • y) =
                  ↑(RingHom.id R) c •
                    AddHom.toFun
                      { toFun := fun f => ↑f default • x,
                        map_add' :=
                          (_ : ∀ (y z : ι →₀ R), (↑y default + ↑z default) • x = ↑y default • x + ↑z default • x) }
                      y) }.toAddHom
      ((fun y => Finsupp.single default (Exists.choose (_ : ∃ r, r • x = y))) y) =
    y
[PROOFSTEP]
simp only [Finsupp.single_eq_same]
[GOAL]
case mpr.intro.intro.refine_4
ι✝ : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M✝ : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
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_10
M : Type u_11
inst✝⁵ : Ring R
inst✝⁴ : Nontrivial R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : NoZeroSMulDivisors R M
ι : Type u_12
inst✝ : Unique ι
x : M
nz : x ≠ 0
w : ∀ (y : M), ∃ r, r • x = y
y : M
⊢ Exists.choose (_ : ∃ r, r • x = y) • x = y
[PROOFSTEP]
exact (w y).choose_spec
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Fintype ι
b✝ b : Basis ι R M
inst✝¹ : Fintype R
inst✝ : Fintype M
⊢ card M = card R ^ card ι
[PROOFSTEP]
classical calc
  card M = card (ι → R) := card_congr b.equivFun.toEquiv
  _ = card R ^ card ι := card_fun
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Fintype ι
b✝ b : Basis ι R M
inst✝¹ : Fintype R
inst✝ : Fintype M
⊢ card M = card R ^ card ι
[PROOFSTEP]
calc
  card M = card (ι → R) := card_congr b.equivFun.toEquiv
  _ = card R ^ card ι := card_fun
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
x : ι → R
⊢ ↑(LinearEquiv.symm (equivFun b)) x = ∑ i : ι, x i • ↑b i
[PROOFSTEP]
simp [Basis.equivFun, Finsupp.total_apply, Finsupp.sum_fintype, Finsupp.equivFunOnFinite]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
u : M
⊢ ∑ i : ι, ↑(equivFun b) u i • ↑b i = u
[PROOFSTEP]
conv_rhs => rw [← b.total_repr u]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
u : M
| u
[PROOFSTEP]
rw [← b.total_repr u]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
u : M
| u
[PROOFSTEP]
rw [← b.total_repr u]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
u : M
| u
[PROOFSTEP]
rw [← b.total_repr u]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
u : M
⊢ ∑ i : ι, ↑(equivFun b) u i • ↑b i = ↑(Finsupp.total ι M R ↑b) (↑b.repr u)
[PROOFSTEP]
simp [Finsupp.total_apply, Finsupp.sum_fintype, b.equivFun_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
inst✝¹ : Fintype ι
b : Basis ι R M
inst✝ : DecidableEq ι
i j : ι
⊢ ↑(equivFun b) (↑b i) j = if i = j then 1 else 0
[PROOFSTEP]
rw [b.equivFun_apply, b.repr_self_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
⊢ ↑(↑b.repr (∑ i : ι, c i • ↑b i)) = c
[PROOFSTEP]
ext j
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
⊢ ↑(↑b.repr (∑ i : ι, c i • ↑b i)) j = c j
[PROOFSTEP]
simp only [map_sum, LinearEquiv.map_smul, repr_self, Finsupp.smul_single, smul_eq_mul, mul_one, Finset.sum_apply']
[GOAL]
case h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
⊢ ∑ x : ι, ↑(Finsupp.single x (c x)) j = c j
[PROOFSTEP]
rw [Finset.sum_eq_single j, Finsupp.single_eq_same]
[GOAL]
case h.h₀
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
⊢ ∀ (b : ι), b ∈ Finset.univ → b ≠ j → ↑(Finsupp.single b (c b)) j = 0
[PROOFSTEP]
rintro i - hi
[GOAL]
case h.h₀
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j i : ι
hi : i ≠ j
⊢ ↑(Finsupp.single i (c i)) j = 0
[PROOFSTEP]
exact Finsupp.single_eq_of_ne hi
[GOAL]
case h.h₁
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
⊢ ¬j ∈ Finset.univ → ↑(Finsupp.single j (c j)) j = 0
[PROOFSTEP]
intros
[GOAL]
case h.h₁
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
a✝ : ¬j ∈ Finset.univ
⊢ ↑(Finsupp.single j (c j)) j = 0
[PROOFSTEP]
have := Finset.mem_univ j
[GOAL]
case h.h₁
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
j : ι
a✝ : ¬j ∈ Finset.univ
this : j ∈ Finset.univ
⊢ ↑(Finsupp.single j (c j)) j = 0
[PROOFSTEP]
contradiction
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
inst✝¹ : Fintype ι
b : Basis ι R M
inst✝ : DecidableEq ι
e : M ≃ₗ[R] ι → R
i j : ι
⊢ ↑e (↑(ofEquivFun e) i) j = ↑e (↑(LinearEquiv.symm e) (update 0 i 1)) j
[PROOFSTEP]
simp [Basis.ofEquivFun, ← Finsupp.single_eq_pi_single, Finsupp.single_eq_update]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b v : Basis ι R M
⊢ ofEquivFun (equivFun v) = v
[PROOFSTEP]
classical
ext j
simp only [Basis.equivFun_symm_apply, Basis.coe_ofEquivFun]
simp_rw [Function.update_apply, ite_smul]
simp only [Finset.mem_univ, if_true, Pi.zero_apply, one_smul, Finset.sum_ite_eq', zero_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b v : Basis ι R M
⊢ ofEquivFun (equivFun v) = v
[PROOFSTEP]
ext j
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b v : Basis ι R M
j : ι
⊢ ↑(ofEquivFun (equivFun v)) j = ↑v j
[PROOFSTEP]
simp only [Basis.equivFun_symm_apply, Basis.coe_ofEquivFun]
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b v : Basis ι R M
j : ι
⊢ ∑ x : ι, update 0 j 1 x • ↑v x = ↑v j
[PROOFSTEP]
simp_rw [Function.update_apply, ite_smul]
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b v : Basis ι R M
j : ι
⊢ (∑ x : ι, if x = j then 1 • ↑v x else OfNat.ofNat 0 x • ↑v x) = ↑v j
[PROOFSTEP]
simp only [Finset.mem_univ, if_true, Pi.zero_apply, one_smul, Finset.sum_ite_eq', zero_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
e : M ≃ₗ[R] ι → R
⊢ equivFun (ofEquivFun e) = e
[PROOFSTEP]
ext j
[GOAL]
case h.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
e : M ≃ₗ[R] ι → R
j : M
x✝ : ι
⊢ ↑(equivFun (ofEquivFun e)) j x✝ = ↑e j x✝
[PROOFSTEP]
simp_rw [Basis.equivFun_apply, Basis.ofEquivFun_repr_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
inst✝³ : Fintype ι
b : Basis ι R M
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
f : ι → M'
x : M
⊢ ↑(↑(constr b S) f) x = ∑ i : ι, ↑(equivFun b) x i • f i
[PROOFSTEP]
simp [b.constr_apply, b.equivFun_apply, Finsupp.sum_fintype]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
inst✝³ : Fintype ι
b✝ : Basis ι R M
S : Type u_10
inst✝² : Semiring S
inst✝¹ : Module S M'
inst✝ : SMulCommClass R S M'
P : Submodule R M
b : Basis ι R { x // x ∈ P }
x : M
c : ι → R
⊢ (x = Finsupp.sum (↑Finsupp.equivFunOnFinite.symm c) fun i x => x • ↑(↑b i)) ↔ x = ∑ i : ι, c i • ↑(↑b i)
[PROOFSTEP]
simp [Finsupp.sum_fintype, Finsupp.equivFunOnFinite]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
b : Basis ι R M
b' : Basis ι' R M'
f : M → M'
g : M' → M
hf : ∀ (i : ι), f (↑b i) ∈ range ↑b'
hg : ∀ (i : ι'), g (↑b' i) ∈ range ↑b
hgf : ∀ (i : ι), g (f (↑b i)) = ↑b i
hfg : ∀ (i : ι'), f (g (↑b' i)) = ↑b' i
src✝ : (fun x => M →ₗ[R] M') (f ∘ ↑b) := ↑(constr b R) (f ∘ ↑b)
i : ι
i' : ι'
hi' : ↑b' i' = f (↑b i)
⊢ ↑(LinearMap.comp (↑(constr b' R) (g ∘ ↑b')) (↑(constr b R) (f ∘ ↑b))) (↑b i) = ↑LinearMap.id (↑b i)
[PROOFSTEP]
rw [LinearMap.comp_apply, b.constr_basis, Function.comp_apply, ← hi', b'.constr_basis, Function.comp_apply, hi', hgf,
  LinearMap.id_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
b : Basis ι R M
b' : Basis ι' R M'
f : M → M'
g : M' → M
hf : ∀ (i : ι), f (↑b i) ∈ range ↑b'
hg : ∀ (i : ι'), g (↑b' i) ∈ range ↑b
hgf : ∀ (i : ι), g (f (↑b i)) = ↑b i
hfg : ∀ (i : ι'), f (g (↑b' i)) = ↑b' i
src✝ : (fun x => M →ₗ[R] M') (f ∘ ↑b) := ↑(constr b R) (f ∘ ↑b)
i : ι'
i' : ι
hi' : ↑b i' = g (↑b' i)
⊢ ↑(LinearMap.comp (↑(constr b R) (f ∘ ↑b)) (↑(constr b' R) (g ∘ ↑b'))) (↑b' i) = ↑LinearMap.id (↑b' i)
[PROOFSTEP]
rw [LinearMap.comp_apply, b'.constr_basis, Function.comp_apply, ← hi', b.constr_basis, Function.comp_apply, hi', hfg,
  LinearMap.id_apply]
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
⊢ ∑ j : ι', ↑(↑b.repr (↑b' j)) i * ↑(↑b'.repr x) j = ↑(↑b.repr x) i
[PROOFSTEP]
conv_rhs => rw [← b'.sum_repr x]
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
| ↑(↑b.repr x) i
[PROOFSTEP]
rw [← b'.sum_repr x]
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
| ↑(↑b.repr x) i
[PROOFSTEP]
rw [← b'.sum_repr x]
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
| ↑(↑b.repr x) i
[PROOFSTEP]
rw [← b'.sum_repr x]
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
⊢ ∑ j : ι', ↑(↑b.repr (↑b' j)) i * ↑(↑b'.repr x) j = ↑(↑b.repr (∑ i : ι', ↑(↑b'.repr x) i • ↑b' i)) i
[PROOFSTEP]
simp_rw [LinearEquiv.map_sum, LinearEquiv.map_smul, Finset.sum_apply']
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
⊢ ∑ x_1 : ι', ↑(↑b.repr (↑b' x_1)) i * ↑(↑b'.repr x) x_1 = ∑ x_1 : ι', ↑(↑(↑b'.repr x) x_1 • ↑b.repr (↑b' x_1)) i
[PROOFSTEP]
refine' Finset.sum_congr rfl fun j _ => _
[GOAL]
ι : Type u_1
ι'✝ : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b : Basis ι R M
b'✝ : Basis ι'✝ R M'
ι' : Type u_10
inst✝ : Fintype ι'
b' : Basis ι' R M
x : M
i : ι
j : ι'
x✝ : j ∈ Finset.univ
⊢ ↑(↑b.repr (↑b' j)) i * ↑(↑b'.repr x) j = ↑(↑(↑b'.repr x) j • ↑b.repr (↑b' j)) i
[PROOFSTEP]
rw [Finsupp.smul_apply, smul_eq_mul, mul_comm]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
⊢ Set.range ↑b = w
[PROOFSTEP]
apply le_antisymm h
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
⊢ w ≤ Set.range ↑b
[PROOFSTEP]
intro x p
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
⊢ x ∈ Set.range ↑b
[PROOFSTEP]
by_contra q
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
⊢ False
[PROOFSTEP]
have e := b.total_repr x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
e : ↑(Finsupp.total ι M R ↑b) (↑b.repr x) = x
⊢ False
[PROOFSTEP]
let u : ι ↪ w := ⟨fun i => ⟨b i, h ⟨i, rfl⟩⟩, fun i i' r => b.injective (by simpa only [Subtype.mk_eq_mk] using r)⟩
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
e : ↑(Finsupp.total ι M R ↑b) (↑b.repr x) = x
i i' : ι
r : (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i = (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i'
⊢ ↑b i = ↑b i'
[PROOFSTEP]
simpa only [Subtype.mk_eq_mk] using r
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
e : ↑(Finsupp.total ι M R ↑b) (↑b.repr x) = x
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
⊢ False
[PROOFSTEP]
simp_rw [Finsupp.total_apply] at e 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
e : (Finsupp.sum (↑b.repr x) fun i a => a • ↑b i) = x
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
⊢ False
[PROOFSTEP]
change ((b.repr x).sum fun (i : ι) (a : R) ↦ a • (u i : M)) = ((⟨x, p⟩ : w) : M) at e 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : (Finsupp.sum (↑b.repr x) fun i a => a • ↑(↑u i)) = ↑{ val := x, property := p }
⊢ False
[PROOFSTEP]
rw [← Finsupp.sum_embDomain (f := u) (g := fun x r ↦ r • (x : M)), ← Finsupp.total_apply] at e 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : ↑(Finsupp.total (↑w) M R fun x => ↑x) (Finsupp.embDomain u (↑b.repr x)) = ↑{ val := x, property := p }
⊢ False
[PROOFSTEP]
refine' hi.total_ne_of_not_mem_support _ _ e
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : ↑(Finsupp.total (↑w) M R fun x => ↑x) (Finsupp.embDomain u (↑b.repr x)) = ↑{ val := x, property := p }
⊢ ¬{ val := x, property := p } ∈ (Finsupp.embDomain u (↑b.repr x)).support
[PROOFSTEP]
simp only [Finset.mem_map, Finsupp.support_embDomain]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : ↑(Finsupp.total (↑w) M R fun x => ↑x) (Finsupp.embDomain u (↑b.repr x)) = ↑{ val := x, property := p }
⊢ ¬∃ a,
      a ∈ (↑b.repr x).support ∧
        ↑{ toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
                inj' :=
                  (_ :
                    ∀ (i i' : ι),
                      (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
                          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
                        i = i') }
            a =
          { val := x, property := p }
[PROOFSTEP]
rintro ⟨j, -, W⟩
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : ↑(Finsupp.total (↑w) M R fun x => ↑x) (Finsupp.embDomain u (↑b.repr x)) = ↑{ val := x, property := p }
j : ι
W :
  ↑{ toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
          inj' :=
            (_ :
              ∀ (i i' : ι),
                (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
                    (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
                  i = i') }
      j =
    { val := x, property := p }
⊢ False
[PROOFSTEP]
simp only [Embedding.coeFn_mk, Subtype.mk_eq_mk] at W 
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x✝ y : M
b✝ : Basis ι R M
inst✝ : Nontrivial R
b : Basis ι R M
w : Set M
hi : LinearIndependent R Subtype.val
h : Set.range ↑b ≤ w
x : M
p : x ∈ w
q : ¬x ∈ Set.range ↑b
u : ι ↪ ↑w :=
  { toFun := fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) },
    inj' :=
      (_ :
        ∀ (i i' : ι),
          (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i =
              (fun i => { val := ↑b i, property := (_ : ↑b i ∈ w) }) i' →
            i = i') }
e : ↑(Finsupp.total (↑w) M R fun x => ↑x) (Finsupp.embDomain u (↑b.repr x)) = ↑{ val := x, property := p }
j : ι
W : ↑b j = x
⊢ False
[PROOFSTEP]
apply q ⟨j, W⟩
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i : ι
⊢ ↑(Finsupp.total ι M R v) (Finsupp.single i 1) = v i
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i : ι
⊢ ↑(↑(LinearIndependent.repr hli) { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) }) i = 1
[PROOFSTEP]
simp [hli.repr_eq_single i]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i j : ι
h : j ≠ i
⊢ ↑(↑(LinearIndependent.repr hli) { val := v j, property := (_ : v j ∈ ↑(span R (Set.range v))) }) i = 0
[PROOFSTEP]
simp [hli.repr_eq_single j, h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
inst✝ : DecidableEq ι
i j : ι
⊢ ↑(coord (Basis.mk hli hsp) i) (v j) = if j = i then 1 else 0
[PROOFSTEP]
cases' eq_or_ne j i with h h
[GOAL]
case inl
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
inst✝ : DecidableEq ι
i j : ι
h : j = i
⊢ ↑(coord (Basis.mk hli hsp) i) (v j) = if j = i then 1 else 0
[PROOFSTEP]
simp only [h, if_true, eq_self_iff_true, mk_coord_apply_eq i]
[GOAL]
case inr
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M
inst✝³ : Module R₂ M
inst✝² : Module R M'
inst✝¹ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
inst✝ : DecidableEq ι
i j : ι
h : j ≠ i
⊢ ↑(coord (Basis.mk hli hsp) i) (v j) = if j = i then 1 else 0
[PROOFSTEP]
simp only [h, if_false, mk_coord_apply_ne h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
hli : LinearIndependent R v
⊢ ⊤ ≤ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
intro x _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
have : ∀ i, v i ∈ span R (range v) := fun i ↦ subset_span (Set.mem_range_self _)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
have h₁ : (((↑) : span R (range v) → M) '' range fun i => ⟨v i, this i⟩) = range v :=
  by
  simp only [SetLike.coe_sort_coe, ← Set.range_comp]
  rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
⊢ (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
[PROOFSTEP]
simp only [SetLike.coe_sort_coe, ← Set.range_comp]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
⊢ Set.range (Subtype.val ∘ fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
have h₂ : map (Submodule.subtype (span R (range v))) (span R (range fun i => ⟨v i, this i⟩)) = span R (range v) :=
  by
  rw [← span_image, Submodule.coeSubtype]
    -- Porting note: why doesn't `rw [h₁]` work here?
  exact congr_arg _ h₁
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
⊢ map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
[PROOFSTEP]
rw [← span_image, Submodule.coeSubtype]
  -- Porting note: why doesn't `rw [h₁]` work here?
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
⊢ span R (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) =
    span R (Set.range v)
[PROOFSTEP]
exact congr_arg _ h₁
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
have h₃ : (x : M) ∈ map (Submodule.subtype (span R (range v))) (span R (Set.range fun i => Subtype.mk (v i) _)) :=
  by
  rw [h₂]
  apply Subtype.mem x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
⊢ ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : ?m.886970 (v i)) }))
[PROOFSTEP]
rw [h₂]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
⊢ ↑x ∈ span R (Set.range v)
[PROOFSTEP]
apply Subtype.mem x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
h₃ :
  ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }))
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
rcases mem_map.1 h₃ with ⟨y, hy₁, hy₂⟩
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y✝ : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
h₃ :
  ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }))
y : { x // x ∈ span R (Set.range v) }
hy₁ : y ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })
hy₂ : ↑(Submodule.subtype (span R (Set.range v))) y = ↑x
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
have h_x_eq_y : x = y := by
  rw [Subtype.ext_iff, ← hy₂]
  simp
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y✝ : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
h₃ :
  ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }))
y : { x // x ∈ span R (Set.range v) }
hy₁ : y ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })
hy₂ : ↑(Submodule.subtype (span R (Set.range v))) y = ↑x
⊢ x = y
[PROOFSTEP]
rw [Subtype.ext_iff, ← hy₂]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y✝ : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
h₃ :
  ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }))
y : { x // x ∈ span R (Set.range v) }
hy₁ : y ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })
hy₂ : ↑(Submodule.subtype (span R (Set.range v))) y = ↑x
⊢ ↑(Submodule.subtype (span R (Set.range v))) y = ↑y
[PROOFSTEP]
simp
[GOAL]
case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝ y✝ : M
b : Basis ι R M
hli : LinearIndependent R v
x : { x // x ∈ span R (Set.range v) }
a✝ : x ∈ ⊤
this : ∀ (i : ι), v i ∈ span R (Set.range v)
h₁ : (Subtype.val '' Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }) = Set.range v
h₂ :
  map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })) =
    span R (Set.range v)
h₃ :
  ↑x ∈
    map (Submodule.subtype (span R (Set.range v)))
      (span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) }))
y : { x // x ∈ span R (Set.range v) }
hy₁ : y ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ span R (Set.range v)) })
hy₂ : ↑(Submodule.subtype (span R (Set.range v))) y = ↑x
h_x_eq_y : x = y
⊢ x ∈ span R (Set.range fun i => { val := v i, property := (_ : v i ∈ ↑(span R (Set.range v))) })
[PROOFSTEP]
rwa [h_x_eq_y]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
⊢ span R (Set.range (w • v)) = ⊤
[PROOFSTEP]
rw [eq_top_iff]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
⊢ ⊤ ≤ span R (Set.range (w • v))
[PROOFSTEP]
intro j hj
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : j ∈ ⊤
⊢ j ∈ span R (Set.range (w • v))
[PROOFSTEP]
rw [← hv] at hj 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : j ∈ span R (Set.range v)
⊢ j ∈ span R (Set.range (w • v))
[PROOFSTEP]
rw [Submodule.mem_span] at hj ⊢
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : ∀ (p : Submodule R M), Set.range v ⊆ ↑p → j ∈ p
⊢ ∀ (p : Submodule R M), Set.range (w • v) ⊆ ↑p → j ∈ p
[PROOFSTEP]
refine' fun p hp => hj p fun u hu => _
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : ∀ (p : Submodule R M), Set.range v ⊆ ↑p → j ∈ p
p : Submodule R M
hp : Set.range (w • v) ⊆ ↑p
u : M
hu : u ∈ Set.range v
⊢ u ∈ ↑p
[PROOFSTEP]
obtain ⟨i, rfl⟩ := hu
[GOAL]
case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : ∀ (p : Submodule R M), Set.range v ⊆ ↑p → j ∈ p
p : Submodule R M
hp : Set.range (w • v) ⊆ ↑p
i : ι
⊢ v i ∈ ↑p
[PROOFSTEP]
have : ((w i)⁻¹ • (1 : R)) • w i • v i ∈ p := p.smul_mem ((w i)⁻¹ • (1 : R)) (hp ⟨i, rfl⟩)
[GOAL]
case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v✝ : ι → M
inst✝¹² : Ring R
inst✝¹¹ : CommRing R₂
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M''
inst✝⁷ : Module R M
inst✝⁶ : Module R₂ M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
c d : R
x y : M
b : Basis ι R M
G : Type u_10
inst✝³ : Group G
inst✝² : DistribMulAction G R
inst✝¹ : DistribMulAction G M
inst✝ : IsScalarTower G R M
v : ι → M
hv : span R (Set.range v) = ⊤
w : ι → G
j : M
hj : ∀ (p : Submodule R M), Set.range v ⊆ ↑p → j ∈ p
p : Submodule R M
hp : Set.range (w • v) ⊆ ↑p
i : ι
this : ((w i)⁻¹ • 1) • w i • v i ∈ p
⊢ v i ∈ ↑p
[PROOFSTEP]
rwa [smul_one_smul, inv_smul_smul] at this 
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i : ι
⊢ coord (unitsSMul e w) i = (w i)⁻¹ • coord e i
[PROOFSTEP]
classical
apply e.ext
intro j
trans ((unitsSMul e w).coord i) ((w j)⁻¹ • (unitsSMul e w) j)
· congr
  simp [Basis.unitsSMul, ← mul_smul]
simp only [Basis.coord_apply, LinearMap.smul_apply, Basis.repr_self, Units.smul_def, SMulHomClass.map_smul,
  Finsupp.single_apply]
split_ifs with h <;> simp [h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i : ι
⊢ coord (unitsSMul e w) i = (w i)⁻¹ • coord e i
[PROOFSTEP]
apply e.ext
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i : ι
⊢ ∀ (i_1 : ι), ↑(coord (unitsSMul e w) i) (↑e i_1) = ↑((w i)⁻¹ • coord e i) (↑e i_1)
[PROOFSTEP]
intro j
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
⊢ ↑(coord (unitsSMul e w) i) (↑e j) = ↑((w i)⁻¹ • coord e i) (↑e j)
[PROOFSTEP]
trans ((unitsSMul e w).coord i) ((w j)⁻¹ • (unitsSMul e w) j)
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
⊢ ↑(coord (unitsSMul e w) i) (↑e j) = ↑(coord (unitsSMul e w) i) ((w j)⁻¹ • ↑(unitsSMul e w) j)
[PROOFSTEP]
congr
[GOAL]
case h.e_6.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
⊢ ↑e j = (w j)⁻¹ • ↑(unitsSMul e w) j
[PROOFSTEP]
simp [Basis.unitsSMul, ← mul_smul]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
⊢ ↑(coord (unitsSMul e w) i) ((w j)⁻¹ • ↑(unitsSMul e w) j) = ↑((w i)⁻¹ • coord e i) (↑e j)
[PROOFSTEP]
simp only [Basis.coord_apply, LinearMap.smul_apply, Basis.repr_self, Units.smul_def, SMulHomClass.map_smul,
  Finsupp.single_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
⊢ ↑(↑(w j)⁻¹ • Finsupp.single j 1) i = ↑(w i)⁻¹ • if j = i then 1 else 0
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
h : j = i
⊢ ↑(↑(w j)⁻¹ • Finsupp.single j 1) i = ↑(w i)⁻¹ • 1
[PROOFSTEP]
simp [h]
[GOAL]
case neg
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y : M
b : Basis ι R M
e : Basis ι R₂ M
w : ι → R₂ˣ
i j : ι
h : ¬j = i
⊢ ↑(↑(w j)⁻¹ • Finsupp.single j 1) i = ↑(w i)⁻¹ • 0
[PROOFSTEP]
simp [h]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
⊢ span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
[PROOFSTEP]
rw [Set.range_comp, Submodule.span_image, b.span_eq, Submodule.map_subtype_top]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
span_b : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
⊢ ∀ (c : R) (y_1 : { x // x ∈ span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) }), c • y + ↑y_1 = 0 → c = 0
[PROOFSTEP]
rintro c ⟨x, hx⟩ hc
[GOAL]
case mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c✝ d : R
x✝ y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
span_b : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
c : R
x : M
hx : x ∈ span R (Set.range (↑(Submodule.subtype N) ∘ ↑b))
hc : c • y + ↑{ val := x, property := hx } = 0
⊢ c = 0
[PROOFSTEP]
rw [span_b] at hx 
[GOAL]
case mk
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c✝ d : R
x✝ y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
span_b : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
c : R
x : M
hx✝ : x ∈ span R (Set.range (↑(Submodule.subtype N) ∘ ↑b))
hx : x ∈ N
hc : c • y + ↑{ val := x, property := hx✝ } = 0
⊢ c = 0
[PROOFSTEP]
exact hli c x hx hc
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝¹ y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
span_b : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
x : M
x✝ : x ∈ ⊤
⊢ x ∈ span R (Set.range (Fin.cons y (↑(Submodule.subtype N) ∘ ↑b)))
[PROOFSTEP]
rw [Fin.range_cons, Submodule.mem_span_insert', span_b]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x✝¹ y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
span_b : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N
x : M
x✝ : x ∈ ⊤
⊢ ∃ a, x + a • y ∈ N
[PROOFSTEP]
exact hsp x
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
⊢ ↑(mkFinCons y b hli hsp) = Fin.cons y (Subtype.val ∘ ↑b)
[PROOFSTEP]
unfold mkFinCons
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁸ : Ring R
inst✝⁷ : CommRing R₂
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R₂ M
inst✝¹ : Module R M'
inst✝ : Module R M''
c d : R
x y✝ : M
b✝ : Basis ι R M
n : ℕ
N : Submodule R M
y : M
b : Basis (Fin n) R { x // x ∈ N }
hli : ∀ (c : R) (x : M), x ∈ N → c • y + x = 0 → c = 0
hsp : ∀ (z : M), ∃ c, z + c • y ∈ N
⊢ ↑(let_fun span_b := (_ : span R (Set.range (↑(Submodule.subtype N) ∘ ↑b)) = N);
      Basis.mk (_ : LinearIndependent R (Fin.cons y (↑(Submodule.subtype N) ∘ ↑b)))
        (_ : ∀ (x : M), x ∈ ⊤ → x ∈ span R (Set.range (Fin.cons y (↑(Submodule.subtype N) ∘ ↑b))))) =
    Fin.cons y (Subtype.val ∘ ↑b)
[PROOFSTEP]
exact coe_mk (v := Fin.cons y (N.subtype ∘ b)) _ _
[GOAL]
ι : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R✝
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R✝ M
inst✝³ : Module R₂ M
inst✝² : Module R✝ M'
inst✝¹ : Module R✝ M''
c d : R✝
x y : M
b : Basis ι R✝ M
R : Type u_10
inst✝ : Semiring R
⊢ ↑(Basis.finTwoProd R) 0 = (1, 0)
[PROOFSTEP]
simp [Basis.finTwoProd, LinearEquiv.finTwoArrow]
[GOAL]
ι : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R✝
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R✝ M
inst✝³ : Module R₂ M
inst✝² : Module R✝ M'
inst✝¹ : Module R✝ M''
c d : R✝
x y : M
b : Basis ι R✝ M
R : Type u_10
inst✝ : Semiring R
⊢ ↑(Basis.finTwoProd R) 1 = (0, 1)
[PROOFSTEP]
simp [Basis.finTwoProd, LinearEquiv.finTwoArrow]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
⊢ P N
[PROOFSTEP]
haveI : DecidableEq M := Classical.decEq M
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
⊢ P N
[PROOFSTEP]
have Pbot : P ⊥ := by
  apply ih
  intro N _ x x_mem x_ortho
  exfalso
  rw [mem_bot] at x_mem 
  simpa [x_mem] using x_ortho 1 0 N.zero_mem
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
⊢ P ⊥
[PROOFSTEP]
apply ih
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
⊢ (N' : Submodule R M) → N' ≤ ⊥ → (x : M) → x ∈ ⊥ → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N'
[PROOFSTEP]
intro N _ x x_mem x_ortho
[GOAL]
case a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
N : Submodule R M
a✝ : N ≤ ⊥
x : M
x_mem : x ∈ ⊥
x_ortho : ∀ (c : R) (y : M), y ∈ N → c • x + y = 0 → c = 0
⊢ P N
[PROOFSTEP]
exfalso
[GOAL]
case a.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
N : Submodule R M
a✝ : N ≤ ⊥
x : M
x_mem : x ∈ ⊥
x_ortho : ∀ (c : R) (y : M), y ∈ N → c • x + y = 0 → c = 0
⊢ False
[PROOFSTEP]
rw [mem_bot] at x_mem 
[GOAL]
case a.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
N : Submodule R M
a✝ : N ≤ ⊥
x : M
x_mem : x = 0
x_ortho : ∀ (c : R) (y : M), y ∈ N → c • x + y = 0 → c = 0
⊢ False
[PROOFSTEP]
simpa [x_mem] using x_ortho 1 0 N.zero_mem
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
Pbot : P ⊥
⊢ P N
[PROOFSTEP]
induction' n with n rank_ih generalizing N
[GOAL]
case zero
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
Pbot : P ⊥
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.zero
⊢ P N
[PROOFSTEP]
suffices N = ⊥ by rwa [this]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this✝ : DecidableEq M
Pbot : P ⊥
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.zero
this : N = ⊥
⊢ P N
[PROOFSTEP]
rwa [this]
[GOAL]
case zero
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
this : DecidableEq M
Pbot : P ⊥
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.zero
⊢ N = ⊥
[PROOFSTEP]
apply Basis.eq_bot_of_rank_eq_zero b _ fun m hv => le_zero_iff.mp (rank_le _ hv)
[GOAL]
case succ
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
⊢ P N
[PROOFSTEP]
apply ih
[GOAL]
case succ.a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
⊢ (N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N'
[PROOFSTEP]
intro N' N'_le x x_mem x_ortho
[GOAL]
case succ.a
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
⊢ P N'
[PROOFSTEP]
apply rank_ih
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
⊢ ∀ {m : ℕ} (v : Fin m → { x // x ∈ N' }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n
[PROOFSTEP]
intro m v hli
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
⊢ m ≤ n
[PROOFSTEP]
refine' Nat.succ_le_succ_iff.mp (rank_le (Fin.cons ⟨x, x_mem⟩ fun i => ⟨v i, N'_le (v i).2⟩) _)
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
⊢ LinearIndependent R
    (Subtype.val ∘ Fin.cons { val := x, property := x_mem } fun i => { val := ↑(v i), property := (_ : ↑(v i) ∈ ?N) })
[PROOFSTEP]
convert hli.fin_cons' x _ ?_
[GOAL]
case h.e'_4
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
⊢ (Subtype.val ∘ Fin.cons { val := x, property := x_mem } fun i => { val := ↑(v i), property := (_ : ↑(v i) ∈ ?N) }) =
    Fin.cons x (Subtype.val ∘ v)
[PROOFSTEP]
ext i
[GOAL]
case h.e'_4.h
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
i : Fin (Nat.succ m)
⊢ (Subtype.val ∘ Fin.cons { val := x, property := x_mem } fun i => { val := ↑(v i), property := (_ : ↑(v i) ∈ ?N) }) i =
    Fin.cons x (Subtype.val ∘ v) i
[PROOFSTEP]
refine' Fin.cases _ _ i
[GOAL]
case h.e'_4.h.refine'_1
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
i : Fin (Nat.succ m)
⊢ (Subtype.val ∘ Fin.cons { val := x, property := x_mem } fun i => { val := ↑(v i), property := (_ : ↑(v i) ∈ ?N) }) 0 =
    Fin.cons x (Subtype.val ∘ v) 0
[PROOFSTEP]
simp
[GOAL]
case h.e'_4.h.refine'_2
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
i : Fin (Nat.succ m)
⊢ ∀ (i : Fin m),
    (Subtype.val ∘ Fin.cons { val := x, property := x_mem } fun i => { val := ↑(v i), property := (_ : ↑(v i) ∈ ?N) })
        (Fin.succ i) =
      Fin.cons x (Subtype.val ∘ v) (Fin.succ i)
[PROOFSTEP]
simp
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
⊢ ∀ (c : R) (y : { x // x ∈ span R (range (Subtype.val ∘ v)) }), c • x + ↑y = 0 → c = 0
[PROOFSTEP]
intro c y hcy
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
c : R
y : { x // x ∈ span R (range (Subtype.val ∘ v)) }
hcy : c • x + ↑y = 0
⊢ c = 0
[PROOFSTEP]
refine' x_ortho c y (Submodule.span_le.mpr _ y.2) hcy
[GOAL]
case succ.a.rank_le
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
c : R
y : { x // x ∈ span R (range (Subtype.val ∘ v)) }
hcy : c • x + ↑y = 0
⊢ range (Subtype.val ∘ v) ⊆ ↑N'
[PROOFSTEP]
rintro _ ⟨z, rfl⟩
[GOAL]
case succ.a.rank_le.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b✝ : ι → M
b : Basis ι R M
P : Submodule R M → Sort u_10
ih :
  (N : Submodule R M) →
    ((N' : Submodule R M) → N' ≤ N → (x : M) → x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → P N') → P N
n✝ : ℕ
N✝ : Submodule R M
rank_le✝ : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N✝ }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n✝
this : DecidableEq M
Pbot : P ⊥
n : ℕ
rank_ih :
  (N : Submodule R M) → (∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ n) → P N
N : Submodule R M
rank_le : ∀ {m : ℕ} (v : Fin m → { x // x ∈ N }), LinearIndependent R (Subtype.val ∘ v) → m ≤ Nat.succ n
N' : Submodule R M
N'_le : N' ≤ N
x : M
x_mem : x ∈ N
x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0
m : ℕ
v : Fin m → { x // x ∈ N' }
hli : LinearIndependent R (Subtype.val ∘ v)
c : R
y : { x // x ∈ span R (range (Subtype.val ∘ v)) }
hcy : c • x + ↑y = 0
z : Fin m
⊢ (Subtype.val ∘ v) z ∈ ↑N'
[PROOFSTEP]
exact (v z).2
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
i : ι
⊢ ↑(↑(restrictScalars R b) i) = ↑b i
[PROOFSTEP]
simp only [Basis.restrictScalars, Basis.span_apply]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : { x // x ∈ span R (range ↑b) }
i : ι
⊢ ↑(algebraMap R S) (↑(↑(restrictScalars R b).repr m) i) = ↑(↑b.repr ↑m) i
[PROOFSTEP]
suffices
  Finsupp.mapRange.linearMap (Algebra.linearMap R S) ∘ₗ (b.restrictScalars R).repr.toLinearMap =
    ((b.repr : M →ₗ[S] ι →₀ S).restrictScalars R).domRestrict _
  by exact FunLike.congr_fun (LinearMap.congr_fun this m) i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : { x // x ∈ span R (range ↑b) }
i : ι
this :
  LinearMap.comp (Finsupp.mapRange.linearMap (Algebra.linearMap R S)) ↑(restrictScalars R b).repr =
    LinearMap.domRestrict (↑R ↑b.repr) (span R (range ↑b))
⊢ ↑(algebraMap R S) (↑(↑(restrictScalars R b).repr m) i) = ↑(↑b.repr ↑m) i
[PROOFSTEP]
exact FunLike.congr_fun (LinearMap.congr_fun this m) i
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : { x // x ∈ span R (range ↑b) }
i : ι
⊢ LinearMap.comp (Finsupp.mapRange.linearMap (Algebra.linearMap R S)) ↑(restrictScalars R b).repr =
    LinearMap.domRestrict (↑R ↑b.repr) (span R (range ↑b))
[PROOFSTEP]
refine Basis.ext (b.restrictScalars R) fun _ => ?_
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : { x // x ∈ span R (range ↑b) }
i x✝ : ι
⊢ ↑(LinearMap.comp (Finsupp.mapRange.linearMap (Algebra.linearMap R S)) ↑(restrictScalars R b).repr)
      (↑(restrictScalars R b) x✝) =
    ↑(LinearMap.domRestrict (↑R ↑b.repr) (span R (range ↑b))) (↑(restrictScalars R b) x✝)
[PROOFSTEP]
simp only [LinearMap.coe_comp, LinearEquiv.coe_toLinearMap, Function.comp_apply, map_one, Basis.repr_self,
  Finsupp.mapRange.linearMap_apply, Finsupp.mapRange_single, Algebra.linearMap_apply, LinearMap.domRestrict_apply,
  LinearEquiv.coe_coe, Basis.restrictScalars_apply, LinearMap.coe_restrictScalars]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
⊢ m ∈ span R (range ↑b) ↔ ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
[PROOFSTEP]
refine ⟨fun hm i => ⟨(b.restrictScalars R).repr ⟨m, hm⟩ i, b.restrictScalars_repr_apply R ⟨m, hm⟩ i⟩, fun h => ?_⟩
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
h : ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
⊢ m ∈ span R (range ↑b)
[PROOFSTEP]
rw [← b.total_repr m, Finsupp.total_apply S _]
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
h : ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
⊢ (Finsupp.sum (↑b.repr m) fun i a => a • ↑b i) ∈ span R (range ↑b)
[PROOFSTEP]
refine sum_mem fun i _ => ?_
[GOAL]
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
h : ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
i : ι
x✝ : i ∈ (↑b.repr m).support
⊢ (fun i a => a • ↑b i) i (↑(↑b.repr m) i) ∈ span R (range ↑b)
[PROOFSTEP]
obtain ⟨_, h⟩ := h i
[GOAL]
case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
h✝ : ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
i : ι
x✝ : i ∈ (↑b.repr m).support
w✝ : R
h : ↑(algebraMap R S) w✝ = ↑(↑b.repr m) i
⊢ (fun i a => a • ↑b i) i (↑(↑b.repr m) i) ∈ span R (range ↑b)
[PROOFSTEP]
simp_rw [← h, algebraMap_smul]
[GOAL]
case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
S : Type u_10
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Nontrivial S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Algebra R S
inst✝³ : Module S M
inst✝² : Module R M
inst✝¹ : IsScalarTower R S M
inst✝ : NoZeroSMulDivisors R S
b : Basis ι S M
m : M
h✝ : ∀ (i : ι), ↑(↑b.repr m) i ∈ range ↑(algebraMap R S)
i : ι
x✝ : i ∈ (↑b.repr m).support
w✝ : R
h : ↑(algebraMap R S) w✝ = ↑(↑b.repr m) i
⊢ w✝ • ↑b i ∈ span R (range ↑b)
[PROOFSTEP]
exact smul_mem _ _ (subset_span (Set.mem_range_self i))
