[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
x y : α →₀ M
⊢ ↑(x + y) = ↑x + ↑y
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
x y : α →₀ M
x✝ : α
⊢ ↑(x + y) x✝ = (↑x + ↑y) x✝
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
x : R
y : α →₀ M
⊢ AddHom.toFun { toFun := FunLike.coe, map_add' := (_ : ∀ (x y : α →₀ M), ↑(x + y) = ↑x + ↑y) } (x • y) =
    ↑(RingHom.id R) x • AddHom.toFun { toFun := FunLike.coe, map_add' := (_ : ∀ (x y : α →₀ M), ↑(x + y) = ↑x + ↑y) } y
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
x : R
y : α →₀ M
x✝ : α
⊢ AddHom.toFun { toFun := FunLike.coe, map_add' := (_ : ∀ (x y : α →₀ M), ↑(x + y) = ↑x + ↑y) } (x • y) x✝ =
    (↑(RingHom.id R) x •
        AddHom.toFun { toFun := FunLike.coe, map_add' := (_ : ∀ (x y : α →₀ M), ↑(x + y) = ↑x + ↑y) } y)
      x✝
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
⊢ ⨆ (a : α) (_ : a ∈ s), LinearMap.range (lsingle a) ≤ ⨅ (a : α) (_ : a ∈ t), ker (lapply a)
[PROOFSTEP]
refine' iSup_le fun a₁ => iSup_le fun h₁ => range_le_iff_comap.2 _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
a₁ : α
h₁ : a₁ ∈ s
⊢ comap (lsingle a₁) (⨅ (a : α) (_ : a ∈ t), ker (lapply a)) = ⊤
[PROOFSTEP]
simp only [(ker_comp _ _).symm, eq_top_iff, SetLike.le_def, mem_ker, comap_iInf, mem_iInf]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
a₁ : α
h₁ : a₁ ∈ s
⊢ ∀ ⦃x : M⦄, x ∈ ⊤ → ∀ (i : α), i ∈ t → ↑(comp (lapply i) (lsingle a₁)) x = 0
[PROOFSTEP]
intro b _ a₂ h₂
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
a₁ : α
h₁ : a₁ ∈ s
b : M
a✝ : b ∈ ⊤
a₂ : α
h₂ : a₂ ∈ t
⊢ ↑(comp (lapply a₂) (lsingle a₁)) b = 0
[PROOFSTEP]
have : a₁ ≠ a₂ := fun eq => h.le_bot ⟨h₁, eq.symm ▸ h₂⟩
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
a₁ : α
h₁ : a₁ ∈ s
b : M
a✝ : b ∈ ⊤
a₂ : α
h₂ : a₂ ∈ t
this : a₁ ≠ a₂
⊢ ↑(comp (lapply a₂) (lsingle a₁)) b = 0
[PROOFSTEP]
exact single_eq_of_ne this
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
⊢ ⨅ (a : α), ker (lapply a) ≤ ⊥
[PROOFSTEP]
simp only [SetLike.le_def, mem_iInf, mem_ker, mem_bot, lapply_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
⊢ ∀ ⦃x : α →₀ M⦄, (∀ (i : α), ↑x i = 0) → x = 0
[PROOFSTEP]
exact fun a h => Finsupp.ext h
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
⊢ ⨆ (a : α), LinearMap.range (lsingle a) = ⊤
[PROOFSTEP]
refine' eq_top_iff.2 <| SetLike.le_def.2 fun f _ => _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
f : α →₀ M
x✝ : f ∈ ⊤
⊢ f ∈ ⨆ (a : α), LinearMap.range (lsingle a)
[PROOFSTEP]
rw [← sum_single f]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
f : α →₀ M
x✝ : f ∈ ⊤
⊢ sum f single ∈ ⨆ (a : α), LinearMap.range (lsingle a)
[PROOFSTEP]
exact sum_mem fun a _ => Submodule.mem_iSup_of_mem a ⟨_, rfl⟩
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
⊢ Disjoint (⨆ (a : α) (_ : a ∈ s), LinearMap.range (lsingle a)) (⨆ (a : α) (_ : a ∈ t), LinearMap.range (lsingle a))
[PROOFSTEP]
refine' (Disjoint.mono (lsingle_range_le_ker_lapply s sᶜ _) (lsingle_range_le_ker_lapply t tᶜ _)) _
[GOAL]
case refine'_1
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
⊢ Disjoint s sᶜ
[PROOFSTEP]
apply disjoint_compl_right
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
⊢ Disjoint t tᶜ
[PROOFSTEP]
apply disjoint_compl_right
[GOAL]
case refine'_3
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
⊢ Disjoint (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) (⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a))
[PROOFSTEP]
rw [disjoint_iff_inf_le]
[GOAL]
case refine'_3
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ⊥
[PROOFSTEP]
refine' le_trans (le_iInf fun i => _) iInf_ker_lapply_le_bot
[GOAL]
case refine'_3
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
classical
by_cases his : i ∈ s
· by_cases hit : i ∈ t
  · exact (hs.le_bot ⟨his, hit⟩).elim
  exact inf_le_of_right_le (iInf_le_of_le i <| iInf_le _ hit)
exact inf_le_of_left_le (iInf_le_of_le i <| iInf_le _ his)
[GOAL]
case refine'_3
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
by_cases his : i ∈ s
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
his : i ∈ s
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
by_cases hit : i ∈ t
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
his : i ∈ s
hit : i ∈ t
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
exact (hs.le_bot ⟨his, hit⟩).elim
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
his : i ∈ s
hit : ¬i ∈ t
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
exact inf_le_of_right_le (iInf_le_of_le i <| iInf_le _ hit)
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
hs : Disjoint s t
i : α
his : ¬i ∈ s
⊢ (⨅ (a : α) (_ : a ∈ sᶜ), ker (lapply a)) ⊓ ⨅ (a : α) (_ : a ∈ tᶜ), ker (lapply a) ≤ ker (lapply i)
[PROOFSTEP]
exact inf_le_of_left_le (iInf_le_of_le i <| iInf_le _ his)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set M
a : α
⊢ span R (single a '' s) = map (lsingle a) (span R s)
[PROOFSTEP]
rw [← span_image]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set M
a : α
⊢ span R (single a '' s) = span R (↑(lsingle a) '' s)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
p q : α →₀ M
hp : p ∈ {p | ↑p.support ⊆ s}
hq : q ∈ {p | ↑p.support ⊆ s}
⊢ p + q ∈ {p | ↑p.support ⊆ s}
[PROOFSTEP]
classical
refine' Subset.trans (Subset.trans (Finset.coe_subset.2 support_add) _) (union_subset hp hq)
rw [Finset.coe_union]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
p q : α →₀ M
hp : p ∈ {p | ↑p.support ⊆ s}
hq : q ∈ {p | ↑p.support ⊆ s}
⊢ p + q ∈ {p | ↑p.support ⊆ s}
[PROOFSTEP]
refine' Subset.trans (Subset.trans (Finset.coe_subset.2 support_add) _) (union_subset hp hq)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
p q : α →₀ M
hp : p ∈ {p | ↑p.support ⊆ s}
hq : q ∈ {p | ↑p.support ⊆ s}
⊢ ↑(p.support ∪ q.support) ⊆ ↑p.support ∪ ↑q.support
[PROOFSTEP]
rw [Finset.coe_union]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ 0 ∈
    { carrier := {p | ↑p.support ⊆ s},
        add_mem' :=
          (_ : ∀ {p q : α →₀ M}, p ∈ {p | ↑p.support ⊆ s} → q ∈ {p | ↑p.support ⊆ s} → ↑(p + q).support ⊆ s) }.carrier
[PROOFSTEP]
simp only [subset_def, Finset.mem_coe, Set.mem_setOf_eq, mem_support_iff, zero_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ ∀ (x : α), 0 ≠ 0 → x ∈ s
[PROOFSTEP]
intro h ha
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
h : α
ha : 0 ≠ 0
⊢ h ∈ s
[PROOFSTEP]
exact (ha rfl).elim
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
p : α →₀ M
⊢ p ∈ supported M R s ↔ ∀ (x : α), ¬x ∈ s → ↑p x = 0
[PROOFSTEP]
haveI := Classical.decPred fun x : α => x ∈ s
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
p : α →₀ M
this : DecidablePred fun x => x ∈ s
⊢ p ∈ supported M R s ↔ ∀ (x : α), ¬x ∈ s → ↑p x = 0
[PROOFSTEP]
simp [mem_supported, Set.subset_def, not_imp_comm]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
p : α →₀ M
⊢ p ∈ supported M R ↑p.support
[PROOFSTEP]
rw [Finsupp.mem_supported]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ supported R R s = span R ((fun i => single i 1) '' s)
[PROOFSTEP]
refine' (span_eq_of_le _ _ (SetLike.le_def.2 fun l hl => _)).symm
[GOAL]
case refine'_1
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ (fun i => single i 1) '' s ⊆ ↑(supported R R s)
[PROOFSTEP]
rintro _ ⟨_, hp, rfl⟩
[GOAL]
case refine'_1.intro.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
w✝ : α
hp : w✝ ∈ s
⊢ (fun i => single i 1) w✝ ∈ ↑(supported R R s)
[PROOFSTEP]
exact single_mem_supported R 1 hp
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
⊢ l ∈ span R ((fun i => single i 1) '' s)
[PROOFSTEP]
rw [← l.sum_single]
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
⊢ sum l single ∈ span R ((fun i => single i 1) '' s)
[PROOFSTEP]
refine'
  sum_mem fun i il =>
    _
      -- Porting note: Needed to help this convert quite a bit replacing underscores
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
i : α
il : i ∈ l.support
⊢ single i (↑l i) ∈ span R ((fun i => single i 1) '' s)
[PROOFSTEP]
convert smul_mem (M := α →₀ R) (x := single i 1) (span R ((fun i => single i 1) '' s)) (l i) ?_
[GOAL]
case h.e'_4
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
i : α
il : i ∈ l.support
⊢ single i (↑l i) = ↑l i • single i 1
[PROOFSTEP]
simp [span]
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
i : α
il : i ∈ l.support
⊢ single i 1 ∈ span R ((fun i => single i 1) '' s)
[PROOFSTEP]
apply subset_span
[GOAL]
case refine'_2.a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : α →₀ R
hl : l ∈ supported R R s
i : α
il : i ∈ l.support
⊢ single i 1 ∈ (fun i => single i 1) '' s
[PROOFSTEP]
apply Set.mem_image_of_mem _ (hl il)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ comp (restrictDom M R s) (Submodule.subtype (supported M R s)) = LinearMap.id
[PROOFSTEP]
ext l a
[GOAL]
case h.a.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : { x // x ∈ supported M R s }
a : α
⊢ ↑↑(↑(comp (restrictDom M R s) (Submodule.subtype (supported M R s))) l) a = ↑↑(↑LinearMap.id l) a
[PROOFSTEP]
by_cases h : a ∈ s
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : { x // x ∈ supported M R s }
a : α
h : a ∈ s
⊢ ↑↑(↑(comp (restrictDom M R s) (Submodule.subtype (supported M R s))) l) a = ↑↑(↑LinearMap.id l) a
[PROOFSTEP]
simp [h]
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : { x // x ∈ supported M R s }
a : α
h : ¬a ∈ s
⊢ ↑↑(↑(comp (restrictDom M R s) (Submodule.subtype (supported M R s))) l) a = ↑↑(↑LinearMap.id l) a
[PROOFSTEP]
simp [h]
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
l : { x // x ∈ supported M R s }
a : α
h : ¬a ∈ s
⊢ 0 = ↑↑l a
[PROOFSTEP]
exact ((mem_supported' R l.1).1 l.2 a h).symm
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
l : α →₀ M
h : l ∈ supported M R ∅
⊢ l = 0
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
l : α →₀ M
h : l ∈ supported M R ∅
a✝ : α
⊢ ↑l a✝ = ↑0 a✝
[PROOFSTEP]
simp_all [mem_supported']
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
⊢ supported M R (⋃ (i : δ), s i) = ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
refine' le_antisymm _ (iSup_le fun i => supported_mono <| Set.subset_iUnion _ _)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
⊢ supported M R (⋃ (i : δ), s i) ≤ ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
haveI := Classical.decPred fun x => x ∈ ⋃ i, s i
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
⊢ supported M R (⋃ (i : δ), s i) ≤ ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
suffices LinearMap.range ((Submodule.subtype _).comp (restrictDom M R (⋃ i, s i))) ≤ ⨆ i, supported M R (s i) by
  rwa [LinearMap.range_comp, range_restrictDom, Submodule.map_top, range_subtype] at this 
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this✝ : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
this :
  LinearMap.range (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i))) ≤
    ⨆ (i : δ), supported M R (s i)
⊢ supported M R (⋃ (i : δ), s i) ≤ ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
rwa [LinearMap.range_comp, range_restrictDom, Submodule.map_top, range_subtype] at this 
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
⊢ LinearMap.range (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i))) ≤
    ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
rw [range_le_iff_comap, eq_top_iff]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
⊢ ⊤ ≤
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
rintro l
  ⟨⟩
      -- Porting note: Was ported as `induction l using Finsupp.induction`
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l : α →₀ M
⊢ l ∈
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
refine Finsupp.induction l ?_ ?_
[GOAL]
case intro.refine_1
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l : α →₀ M
⊢ 0 ∈
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
exact zero_mem _
[GOAL]
case intro.refine_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l : α →₀ M
⊢ ∀ (a : α) (b : M) (f : α →₀ M),
    ¬a ∈ f.support →
      b ≠ 0 →
        f ∈
            comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
              (⨆ (i : δ), supported M R (s i)) →
          single a b + f ∈
            comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
              (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
refine' fun x a l _ _ => add_mem _
[GOAL]
case intro.refine_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l✝ : α →₀ M
x : α
a : M
l : α →₀ M
x✝¹ : ¬x ∈ l.support
x✝ : a ≠ 0
⊢ single x a ∈
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
by_cases h : ∃ i, x ∈ s i
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l✝ : α →₀ M
x : α
a : M
l : α →₀ M
x✝¹ : ¬x ∈ l.support
x✝ : a ≠ 0
h : ∃ i, x ∈ s i
⊢ single x a ∈
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
simp [h]
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l✝ : α →₀ M
x : α
a : M
l : α →₀ M
x✝¹ : ¬x ∈ l.support
x✝ : a ≠ 0
h : ¬∃ i, x ∈ s i
⊢ single x a ∈
    comap (comp (Submodule.subtype (supported M R (⋃ (i : δ), s i))) (restrictDom M R (⋃ (i : δ), s i)))
      (⨆ (i : δ), supported M R (s i))
[PROOFSTEP]
simp [h]
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l✝ : α →₀ M
x : α
a : M
l : α →₀ M
x✝¹ : ¬x ∈ l.support
x✝ : a ≠ 0
h : ∃ i, x ∈ s i
⊢ single x a ∈ ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
cases' h with i hi
[GOAL]
case pos.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
δ : Type u_7
s : δ → Set α
this : DecidablePred fun x => x ∈ ⋃ (i : δ), s i
l✝ : α →₀ M
x : α
a : M
l : α →₀ M
x✝¹ : ¬x ∈ l.support
x✝ : a ≠ 0
i : δ
hi : x ∈ s i
⊢ single x a ∈ ⨆ (i : δ), supported M R (s i)
[PROOFSTEP]
exact le_iSup (fun i => supported M R (s i)) i (single_mem_supported R _ hi)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
⊢ supported M R (s ∪ t) = supported M R s ⊔ supported M R t
[PROOFSTEP]
erw [Set.union_eq_iUnion, supported_iUnion, iSup_bool_eq]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
⊢ supported M R (bif true then s else t) ⊔ supported M R (bif false then s else t) = supported M R s ⊔ supported M R t
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
s : ι → Set α
x : α →₀ M
⊢ x ∈ supported M R (⋂ (i : ι), s i) ↔ x ∈ ⨅ (i : ι), supported M R (s i)
[PROOFSTEP]
simp [mem_supported, subset_iInter_iff]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
⊢ supported M R (s ∩ t) = supported M R s ⊓ supported M R t
[PROOFSTEP]
rw [Set.inter_eq_iInter, supported_iInter, iInf_bool_eq]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
⊢ supported M R (bif true then s else t) ⊓ supported M R (bif false then s else t) = supported M R s ⊓ supported M R t
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
⊢ supported M R s ⊓ supported M R t = ⊥
[PROOFSTEP]
rw [← supported_inter, disjoint_iff_inter_eq_empty.1 h, supported_empty]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
inst✝ : Nontrivial M
s t : Set α
⊢ Disjoint (supported M R s) (supported M R t) ↔ Disjoint s t
[PROOFSTEP]
refine' ⟨fun h => Set.disjoint_left.mpr fun x hx1 hx2 => _, disjoint_supported_supported⟩
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
inst✝ : Nontrivial M
s t : Set α
h : Disjoint (supported M R s) (supported M R t)
x : α
hx1 : x ∈ s
hx2 : x ∈ t
⊢ False
[PROOFSTEP]
rcases exists_ne (0 : M) with ⟨y, hy⟩
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
inst✝ : Nontrivial M
s t : Set α
h : Disjoint (supported M R s) (supported M R t)
x : α
hx1 : x ∈ s
hx2 : x ∈ t
y : M
hy : y ≠ 0
⊢ False
[PROOFSTEP]
have := h.le_bot ⟨single_mem_supported R y hx1, single_mem_supported R y hx2⟩
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
inst✝ : Nontrivial M
s t : Set α
h : Disjoint (supported M R s) (supported M R t)
x : α
hx1 : x ∈ s
hx2 : x ∈ t
y : M
hy : y ≠ 0
this : single x y ∈ ⊥
⊢ False
[PROOFSTEP]
rw [mem_bot, single_eq_zero] at this 
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
inst✝ : Nontrivial M
s t : Set α
h : Disjoint (supported M R s) (supported M R t)
x : α
hx1 : x ∈ s
hx2 : x ∈ t
y : M
hy : y ≠ 0
this : y = 0
⊢ False
[PROOFSTEP]
exact hy this
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
⊢ { x // x ∈ supported M R s } ≃ₗ[R] ↑s →₀ M
[PROOFSTEP]
let F : supported M R s ≃ (s →₀ M) := restrictSupportEquiv s M
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
F : { x // x ∈ supported M R s } ≃ (↑s →₀ M) := restrictSupportEquiv s M
⊢ { x // x ∈ supported M R s } ≃ₗ[R] ↑s →₀ M
[PROOFSTEP]
refine' F.toLinearEquiv _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
F : { x // x ∈ supported M R s } ≃ (↑s →₀ M) := restrictSupportEquiv s M
⊢ IsLinearMap R ↑F
[PROOFSTEP]
have :
  (F : supported M R s → ↥s →₀ M) =
    (lsubtypeDomain s : (α →₀ M) →ₗ[R] s →₀ M).comp (Submodule.subtype (supported M R s)) :=
  rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
F : { x // x ∈ supported M R s } ≃ (↑s →₀ M) := restrictSupportEquiv s M
this : ↑F = ↑(comp (lsubtypeDomain s) (Submodule.subtype (supported M R s)))
⊢ IsLinearMap R ↑F
[PROOFSTEP]
rw [this]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s : Set α
F : { x // x ∈ supported M R s } ≃ (↑s →₀ M) := restrictSupportEquiv s M
this : ↑F = ↑(comp (lsubtypeDomain s) (Submodule.subtype (supported M R s)))
⊢ IsLinearMap R ↑(comp (lsubtypeDomain s) (Submodule.subtype (supported M R s)))
[PROOFSTEP]
exact LinearMap.isLinear _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : α → M →ₗ[R] N
c : R
f : α →₀ M
⊢ AddHom.toFun
      { toFun := fun d => sum d fun i => ↑(F i),
        map_add' :=
          (_ :
            ∀ (a b : α →₀ M),
              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a + ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) }
      (c • f) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := fun d => sum d fun i => ↑(F i),
          map_add' :=
            (_ :
              ∀ (a b : α →₀ M),
                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a + ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) }
        f
[PROOFSTEP]
simp [sum_smul_index', smul_sum]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F G : α → M →ₗ[R] N
⊢ (fun F =>
        {
          toAddHom :=
            { toFun := fun d => sum d fun i => ↑(F i),
              map_add' :=
                (_ :
                  ∀ (a b : α →₀ M),
                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
          map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
      (F + G) =
    (fun F =>
          {
            toAddHom :=
              { toFun := fun d => sum d fun i => ↑(F i),
                map_add' :=
                  (_ :
                    ∀ (a b : α →₀ M),
                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
            map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
        F +
      (fun F =>
          {
            toAddHom :=
              { toFun := fun d => sum d fun i => ↑(F i),
                map_add' :=
                  (_ :
                    ∀ (a b : α →₀ M),
                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
            map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
        G
[PROOFSTEP]
ext x y
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F G : α → M →ₗ[R] N
x : α
y : M
⊢ ↑(comp
          ((fun F =>
              {
                toAddHom :=
                  { toFun := fun d => sum d fun i => ↑(F i),
                    map_add' :=
                      (_ :
                        ∀ (a b : α →₀ M),
                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
            (F + G))
          (lsingle x))
      y =
    ↑(comp
          ((fun F =>
                {
                  toAddHom :=
                    { toFun := fun d => sum d fun i => ↑(F i),
                      map_add' :=
                        (_ :
                          ∀ (a b : α →₀ M),
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                  map_smul' :=
                    (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
              F +
            (fun F =>
                {
                  toAddHom :=
                    { toFun := fun d => sum d fun i => ↑(F i),
                      map_add' :=
                        (_ :
                          ∀ (a b : α →₀ M),
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                  map_smul' :=
                    (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
              G)
          (lsingle x))
      y
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : S
G : α → M →ₗ[R] N
⊢ AddHom.toFun
      {
        toFun := fun F =>
          {
            toAddHom :=
              { toFun := fun d => sum d fun i => ↑(F i),
                map_add' :=
                  (_ :
                    ∀ (a b : α →₀ M),
                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
            map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
        map_add' :=
          (_ :
            ∀ (F G : α → M →ₗ[R] N),
              (fun F =>
                    {
                      toAddHom :=
                        { toFun := fun d => sum d fun i => ↑(F i),
                          map_add' :=
                            (_ :
                              ∀ (a b : α →₀ M),
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                      map_smul' :=
                        (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                  (F + G) =
                (fun F =>
                      {
                        toAddHom :=
                          { toFun := fun d => sum d fun i => ↑(F i),
                            map_add' :=
                              (_ :
                                ∀ (a b : α →₀ M),
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                        map_smul' :=
                          (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                    F +
                  (fun F =>
                      {
                        toAddHom :=
                          { toFun := fun d => sum d fun i => ↑(F i),
                            map_add' :=
                              (_ :
                                ∀ (a b : α →₀ M),
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                        map_smul' :=
                          (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                    G) }
      (F • G) =
    ↑(RingHom.id S) F •
      AddHom.toFun
        {
          toFun := fun F =>
            {
              toAddHom :=
                { toFun := fun d => sum d fun i => ↑(F i),
                  map_add' :=
                    (_ :
                      ∀ (a b : α →₀ M),
                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
              map_smul' := (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
          map_add' :=
            (_ :
              ∀ (F G : α → M →ₗ[R] N),
                (fun F =>
                      {
                        toAddHom :=
                          { toFun := fun d => sum d fun i => ↑(F i),
                            map_add' :=
                              (_ :
                                ∀ (a b : α →₀ M),
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                        map_smul' :=
                          (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                    (F + G) =
                  (fun F =>
                        {
                          toAddHom :=
                            { toFun := fun d => sum d fun i => ↑(F i),
                              map_add' :=
                                (_ :
                                  ∀ (a b : α →₀ M),
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                          map_smul' :=
                            (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                      F +
                    (fun F =>
                        {
                          toAddHom :=
                            { toFun := fun d => sum d fun i => ↑(F i),
                              map_add' :=
                                (_ :
                                  ∀ (a b : α →₀ M),
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                          map_smul' :=
                            (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                      G) }
        G
[PROOFSTEP]
ext x y
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : S
G : α → M →ₗ[R] N
x : α
y : M
⊢ ↑(comp
          (AddHom.toFun
            {
              toFun := fun F =>
                {
                  toAddHom :=
                    { toFun := fun d => sum d fun i => ↑(F i),
                      map_add' :=
                        (_ :
                          ∀ (a b : α →₀ M),
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                  map_smul' :=
                    (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
              map_add' :=
                (_ :
                  ∀ (F G : α → M →ₗ[R] N),
                    (fun F =>
                          {
                            toAddHom :=
                              { toFun := fun d => sum d fun i => ↑(F i),
                                map_add' :=
                                  (_ :
                                    ∀ (a b : α →₀ M),
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                            map_smul' :=
                              (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                        (F + G) =
                      (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          F +
                        (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          G) }
            (F • G))
          (lsingle x))
      y =
    ↑(comp
          (↑(RingHom.id S) F •
            AddHom.toFun
              {
                toFun := fun F =>
                  {
                    toAddHom :=
                      { toFun := fun d => sum d fun i => ↑(F i),
                        map_add' :=
                          (_ :
                            ∀ (a b : α →₀ M),
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                    map_smul' :=
                      (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                map_add' :=
                  (_ :
                    ∀ (F G : α → M →ₗ[R] N),
                      (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          (F + G) =
                        (fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                            F +
                          (fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                            G) }
              G)
          (lsingle x))
      y
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : α → M →ₗ[R] N
⊢ (fun F x => comp F (lsingle x))
      (AddHom.toFun
        {
            toAddHom :=
              {
                toFun := fun F =>
                  {
                    toAddHom :=
                      { toFun := fun d => sum d fun i => ↑(F i),
                        map_add' :=
                          (_ :
                            ∀ (a b : α →₀ M),
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                    map_smul' :=
                      (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                map_add' :=
                  (_ :
                    ∀ (F G : α → M →ₗ[R] N),
                      (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          (F + G) =
                        (fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                            F +
                          (fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                            G) },
            map_smul' :=
              (_ :
                ∀ (F : S) (G : α → M →ₗ[R] N),
                  AddHom.toFun
                      {
                        toFun := fun F =>
                          {
                            toAddHom :=
                              { toFun := fun d => sum d fun i => ↑(F i),
                                map_add' :=
                                  (_ :
                                    ∀ (a b : α →₀ M),
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                            map_smul' :=
                              (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                        map_add' :=
                          (_ :
                            ∀ (F G : α → M →ₗ[R] N),
                              (fun F =>
                                    {
                                      toAddHom :=
                                        { toFun := fun d => sum d fun i => ↑(F i),
                                          map_add' :=
                                            (_ :
                                              ∀ (a b : α →₀ M),
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                      map_smul' :=
                                        (_ :
                                          ∀ (c : R) (f : α →₀ M),
                                            (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                  (F + G) =
                                (fun F =>
                                      {
                                        toAddHom :=
                                          { toFun := fun d => sum d fun i => ↑(F i),
                                            map_add' :=
                                              (_ :
                                                ∀ (a b : α →₀ M),
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                        map_smul' :=
                                          (_ :
                                            ∀ (c : R) (f : α →₀ M),
                                              (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                    F +
                                  (fun F =>
                                      {
                                        toAddHom :=
                                          { toFun := fun d => sum d fun i => ↑(F i),
                                            map_add' :=
                                              (_ :
                                                ∀ (a b : α →₀ M),
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                        map_smul' :=
                                          (_ :
                                            ∀ (c : R) (f : α →₀ M),
                                              (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                    G) }
                      (F • G) =
                    ↑(RingHom.id S) F •
                      AddHom.toFun
                        {
                          toFun := fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                          map_add' :=
                            (_ :
                              ∀ (F G : α → M →ₗ[R] N),
                                (fun F =>
                                      {
                                        toAddHom :=
                                          { toFun := fun d => sum d fun i => ↑(F i),
                                            map_add' :=
                                              (_ :
                                                ∀ (a b : α →₀ M),
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                        map_smul' :=
                                          (_ :
                                            ∀ (c : R) (f : α →₀ M),
                                              (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                    (F + G) =
                                  (fun F =>
                                        {
                                          toAddHom :=
                                            { toFun := fun d => sum d fun i => ↑(F i),
                                              map_add' :=
                                                (_ :
                                                  ∀ (a b : α →₀ M),
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                          map_smul' :=
                                            (_ :
                                              ∀ (c : R) (f : α →₀ M),
                                                (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                      F +
                                    (fun F =>
                                        {
                                          toAddHom :=
                                            { toFun := fun d => sum d fun i => ↑(F i),
                                              map_add' :=
                                                (_ :
                                                  ∀ (a b : α →₀ M),
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                          map_smul' :=
                                            (_ :
                                              ∀ (c : R) (f : α →₀ M),
                                                (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                      G) }
                        G) }.toAddHom
        F) =
    F
[PROOFSTEP]
ext x y
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : α → M →ₗ[R] N
x : α
y : M
⊢ ↑((fun F x => comp F (lsingle x))
          (AddHom.toFun
            {
                toAddHom :=
                  {
                    toFun := fun F =>
                      {
                        toAddHom :=
                          { toFun := fun d => sum d fun i => ↑(F i),
                            map_add' :=
                              (_ :
                                ∀ (a b : α →₀ M),
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                        map_smul' :=
                          (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                    map_add' :=
                      (_ :
                        ∀ (F G : α → M →ₗ[R] N),
                          (fun F =>
                                {
                                  toAddHom :=
                                    { toFun := fun d => sum d fun i => ↑(F i),
                                      map_add' :=
                                        (_ :
                                          ∀ (a b : α →₀ M),
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (f : α →₀ M),
                                        (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                              (F + G) =
                            (fun F =>
                                  {
                                    toAddHom :=
                                      { toFun := fun d => sum d fun i => ↑(F i),
                                        map_add' :=
                                          (_ :
                                            ∀ (a b : α →₀ M),
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                    map_smul' :=
                                      (_ :
                                        ∀ (c : R) (f : α →₀ M),
                                          (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                F +
                              (fun F =>
                                  {
                                    toAddHom :=
                                      { toFun := fun d => sum d fun i => ↑(F i),
                                        map_add' :=
                                          (_ :
                                            ∀ (a b : α →₀ M),
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                    map_smul' :=
                                      (_ :
                                        ∀ (c : R) (f : α →₀ M),
                                          (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                G) },
                map_smul' :=
                  (_ :
                    ∀ (F : S) (G : α → M →ₗ[R] N),
                      AddHom.toFun
                          {
                            toFun := fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                            map_add' :=
                              (_ :
                                ∀ (F G : α → M →ₗ[R] N),
                                  (fun F =>
                                        {
                                          toAddHom :=
                                            { toFun := fun d => sum d fun i => ↑(F i),
                                              map_add' :=
                                                (_ :
                                                  ∀ (a b : α →₀ M),
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                          map_smul' :=
                                            (_ :
                                              ∀ (c : R) (f : α →₀ M),
                                                (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                      (F + G) =
                                    (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        F +
                                      (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        G) }
                          (F • G) =
                        ↑(RingHom.id S) F •
                          AddHom.toFun
                            {
                              toFun := fun F =>
                                {
                                  toAddHom :=
                                    { toFun := fun d => sum d fun i => ↑(F i),
                                      map_add' :=
                                        (_ :
                                          ∀ (a b : α →₀ M),
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (f : α →₀ M),
                                        (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                              map_add' :=
                                (_ :
                                  ∀ (F G : α → M →ₗ[R] N),
                                    (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        (F + G) =
                                      (fun F =>
                                            {
                                              toAddHom :=
                                                { toFun := fun d => sum d fun i => ↑(F i),
                                                  map_add' :=
                                                    (_ :
                                                      ∀ (a b : α →₀ M),
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                              map_smul' :=
                                                (_ :
                                                  ∀ (c : R) (f : α →₀ M),
                                                    (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                          F +
                                        (fun F =>
                                            {
                                              toAddHom :=
                                                { toFun := fun d => sum d fun i => ↑(F i),
                                                  map_add' :=
                                                    (_ :
                                                      ∀ (a b : α →₀ M),
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                              map_smul' :=
                                                (_ :
                                                  ∀ (c : R) (f : α →₀ M),
                                                    (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                          G) }
                            G) }.toAddHom
            F)
          x)
      y =
    ↑(F x) y
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : (α →₀ M) →ₗ[R] N
⊢ AddHom.toFun
      {
          toAddHom :=
            {
              toFun := fun F =>
                {
                  toAddHom :=
                    { toFun := fun d => sum d fun i => ↑(F i),
                      map_add' :=
                        (_ :
                          ∀ (a b : α →₀ M),
                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                  map_smul' :=
                    (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
              map_add' :=
                (_ :
                  ∀ (F G : α → M →ₗ[R] N),
                    (fun F =>
                          {
                            toAddHom :=
                              { toFun := fun d => sum d fun i => ↑(F i),
                                map_add' :=
                                  (_ :
                                    ∀ (a b : α →₀ M),
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                            map_smul' :=
                              (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                        (F + G) =
                      (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          F +
                        (fun F =>
                            {
                              toAddHom :=
                                { toFun := fun d => sum d fun i => ↑(F i),
                                  map_add' :=
                                    (_ :
                                      ∀ (a b : α →₀ M),
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                              map_smul' :=
                                (_ :
                                  ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                          G) },
          map_smul' :=
            (_ :
              ∀ (F : S) (G : α → M →ₗ[R] N),
                AddHom.toFun
                    {
                      toFun := fun F =>
                        {
                          toAddHom :=
                            { toFun := fun d => sum d fun i => ↑(F i),
                              map_add' :=
                                (_ :
                                  ∀ (a b : α →₀ M),
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                          map_smul' :=
                            (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                      map_add' :=
                        (_ :
                          ∀ (F G : α → M →ₗ[R] N),
                            (fun F =>
                                  {
                                    toAddHom :=
                                      { toFun := fun d => sum d fun i => ↑(F i),
                                        map_add' :=
                                          (_ :
                                            ∀ (a b : α →₀ M),
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                    map_smul' :=
                                      (_ :
                                        ∀ (c : R) (f : α →₀ M),
                                          (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                (F + G) =
                              (fun F =>
                                    {
                                      toAddHom :=
                                        { toFun := fun d => sum d fun i => ↑(F i),
                                          map_add' :=
                                            (_ :
                                              ∀ (a b : α →₀ M),
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                      map_smul' :=
                                        (_ :
                                          ∀ (c : R) (f : α →₀ M),
                                            (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                  F +
                                (fun F =>
                                    {
                                      toAddHom :=
                                        { toFun := fun d => sum d fun i => ↑(F i),
                                          map_add' :=
                                            (_ :
                                              ∀ (a b : α →₀ M),
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                      map_smul' :=
                                        (_ :
                                          ∀ (c : R) (f : α →₀ M),
                                            (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                  G) }
                    (F • G) =
                  ↑(RingHom.id S) F •
                    AddHom.toFun
                      {
                        toFun := fun F =>
                          {
                            toAddHom :=
                              { toFun := fun d => sum d fun i => ↑(F i),
                                map_add' :=
                                  (_ :
                                    ∀ (a b : α →₀ M),
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                            map_smul' :=
                              (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                        map_add' :=
                          (_ :
                            ∀ (F G : α → M →ₗ[R] N),
                              (fun F =>
                                    {
                                      toAddHom :=
                                        { toFun := fun d => sum d fun i => ↑(F i),
                                          map_add' :=
                                            (_ :
                                              ∀ (a b : α →₀ M),
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                      map_smul' :=
                                        (_ :
                                          ∀ (c : R) (f : α →₀ M),
                                            (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                  (F + G) =
                                (fun F =>
                                      {
                                        toAddHom :=
                                          { toFun := fun d => sum d fun i => ↑(F i),
                                            map_add' :=
                                              (_ :
                                                ∀ (a b : α →₀ M),
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                        map_smul' :=
                                          (_ :
                                            ∀ (c : R) (f : α →₀ M),
                                              (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                    F +
                                  (fun F =>
                                      {
                                        toAddHom :=
                                          { toFun := fun d => sum d fun i => ↑(F i),
                                            map_add' :=
                                              (_ :
                                                ∀ (a b : α →₀ M),
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                        map_smul' :=
                                          (_ :
                                            ∀ (c : R) (f : α →₀ M),
                                              (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                    G) }
                      G) }.toAddHom
      ((fun F x => comp F (lsingle x)) F) =
    F
[PROOFSTEP]
ext x y
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
inst✝¹ : Module S N
inst✝ : SMulCommClass R S N
F : (α →₀ M) →ₗ[R] N
x : α
y : M
⊢ ↑(comp
          (AddHom.toFun
            {
                toAddHom :=
                  {
                    toFun := fun F =>
                      {
                        toAddHom :=
                          { toFun := fun d => sum d fun i => ↑(F i),
                            map_add' :=
                              (_ :
                                ∀ (a b : α →₀ M),
                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                        map_smul' :=
                          (_ : ∀ (c : R) (f : α →₀ M), (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                    map_add' :=
                      (_ :
                        ∀ (F G : α → M →ₗ[R] N),
                          (fun F =>
                                {
                                  toAddHom :=
                                    { toFun := fun d => sum d fun i => ↑(F i),
                                      map_add' :=
                                        (_ :
                                          ∀ (a b : α →₀ M),
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (f : α →₀ M),
                                        (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                              (F + G) =
                            (fun F =>
                                  {
                                    toAddHom :=
                                      { toFun := fun d => sum d fun i => ↑(F i),
                                        map_add' :=
                                          (_ :
                                            ∀ (a b : α →₀ M),
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                    map_smul' :=
                                      (_ :
                                        ∀ (c : R) (f : α →₀ M),
                                          (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                F +
                              (fun F =>
                                  {
                                    toAddHom :=
                                      { toFun := fun d => sum d fun i => ↑(F i),
                                        map_add' :=
                                          (_ :
                                            ∀ (a b : α →₀ M),
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                  ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                    map_smul' :=
                                      (_ :
                                        ∀ (c : R) (f : α →₀ M),
                                          (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                G) },
                map_smul' :=
                  (_ :
                    ∀ (F : S) (G : α → M →ₗ[R] N),
                      AddHom.toFun
                          {
                            toFun := fun F =>
                              {
                                toAddHom :=
                                  { toFun := fun d => sum d fun i => ↑(F i),
                                    map_add' :=
                                      (_ :
                                        ∀ (a b : α →₀ M),
                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                map_smul' :=
                                  (_ :
                                    ∀ (c : R) (f : α →₀ M),
                                      (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                            map_add' :=
                              (_ :
                                ∀ (F G : α → M →ₗ[R] N),
                                  (fun F =>
                                        {
                                          toAddHom :=
                                            { toFun := fun d => sum d fun i => ↑(F i),
                                              map_add' :=
                                                (_ :
                                                  ∀ (a b : α →₀ M),
                                                    ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                          map_smul' :=
                                            (_ :
                                              ∀ (c : R) (f : α →₀ M),
                                                (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                      (F + G) =
                                    (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        F +
                                      (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        G) }
                          (F • G) =
                        ↑(RingHom.id S) F •
                          AddHom.toFun
                            {
                              toFun := fun F =>
                                {
                                  toAddHom :=
                                    { toFun := fun d => sum d fun i => ↑(F i),
                                      map_add' :=
                                        (_ :
                                          ∀ (a b : α →₀ M),
                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                              ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                  map_smul' :=
                                    (_ :
                                      ∀ (c : R) (f : α →₀ M),
                                        (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) },
                              map_add' :=
                                (_ :
                                  ∀ (F G : α → M →ₗ[R] N),
                                    (fun F =>
                                          {
                                            toAddHom :=
                                              { toFun := fun d => sum d fun i => ↑(F i),
                                                map_add' :=
                                                  (_ :
                                                    ∀ (a b : α →₀ M),
                                                      ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                            map_smul' :=
                                              (_ :
                                                ∀ (c : R) (f : α →₀ M),
                                                  (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                        (F + G) =
                                      (fun F =>
                                            {
                                              toAddHom :=
                                                { toFun := fun d => sum d fun i => ↑(F i),
                                                  map_add' :=
                                                    (_ :
                                                      ∀ (a b : α →₀ M),
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                              map_smul' :=
                                                (_ :
                                                  ∀ (c : R) (f : α →₀ M),
                                                    (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                          F +
                                        (fun F =>
                                            {
                                              toAddHom :=
                                                { toFun := fun d => sum d fun i => ↑(F i),
                                                  map_add' :=
                                                    (_ :
                                                      ∀ (a b : α →₀ M),
                                                        ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) (a + b) =
                                                          ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) a +
                                                            ↑(↑liftAddHom fun x => toAddMonoidHom (F x)) b) },
                                              map_smul' :=
                                                (_ :
                                                  ∀ (c : R) (f : α →₀ M),
                                                    (sum (c • f) fun i => ↑(F i)) = c • sum f fun i => ↑(F i)) })
                                          G) }
                            G) }.toAddHom
            ((fun F x => comp F (lsingle x)) F))
          (lsingle x))
      y =
    ↑(comp F (lsingle x)) y
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
X : Type u_7
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (X → M) ≃+ ((X →₀ R) →ₗ[R] M) := lift M R X
⊢ ∀ (r : S) (x : X → M),
    AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ :
              ∀ (x y : X → M),
                Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
        (r • x) =
      ↑(RingHom.id S) r •
        AddHom.toFun
          { toFun := src✝.toFun,
            map_add' :=
              (_ :
                ∀ (x y : X → M),
                  Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
          x
[PROOFSTEP]
intros
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
X : Type u_7
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (X → M) ≃+ ((X →₀ R) →ₗ[R] M) := lift M R X
r✝ : S
x✝ : X → M
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ (x y : X → M),
              Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
      (r✝ • x✝) =
    ↑(RingHom.id S) r✝ •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ :
              ∀ (x y : X → M),
                Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
        x✝
[PROOFSTEP]
dsimp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
X : Type u_7
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (X → M) ≃+ ((X →₀ R) →ₗ[R] M) := lift M R X
r✝ : S
x✝ : X → M
⊢ ↑(lift M R X) (r✝ • x✝) = r✝ • ↑(lift M R X) x✝
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
X : Type u_7
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
src✝ : (X → M) ≃+ ((X →₀ R) →ₗ[R] M) := lift M R X
r✝ : S
x✝ : X → M
a✝ : X
⊢ ↑(comp (↑(lift M R X) (r✝ • x✝)) (lsingle a✝)) 1 = ↑(comp (r✝ • ↑(lift M R X) x✝) (lsingle a✝)) 1
[PROOFSTEP]
simp only [coe_comp, Function.comp_apply, lsingle_apply, lift_apply, Pi.smul_apply, sum_single_index, zero_smul,
  one_smul, LinearMap.smul_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α'
⊢ supported M R (f ⁻¹' s) ≤ comap (lmapDomain M R f) (supported M R s)
[PROOFSTEP]
classical
intro l (hl : (l.support : Set α) ⊆ f ⁻¹' s)
show ↑(mapDomain f l).support ⊆ s
rw [← Set.image_subset_iff, ← Finset.coe_image] at hl 
exact Set.Subset.trans mapDomain_support hl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α'
⊢ supported M R (f ⁻¹' s) ≤ comap (lmapDomain M R f) (supported M R s)
[PROOFSTEP]
intro l (hl : (l.support : Set α) ⊆ f ⁻¹' s)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α'
l : α →₀ M
hl : ↑l.support ⊆ f ⁻¹' s
⊢ l ∈ comap (lmapDomain M R f) (supported M R s)
[PROOFSTEP]
show ↑(mapDomain f l).support ⊆ s
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α'
l : α →₀ M
hl : ↑l.support ⊆ f ⁻¹' s
⊢ ↑(mapDomain f l).support ⊆ s
[PROOFSTEP]
rw [← Set.image_subset_iff, ← Finset.coe_image] at hl 
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α'
l : α →₀ M
hl✝ : f '' ↑l.support ⊆ s
hl : ↑(Finset.image f l.support) ⊆ s
⊢ ↑(mapDomain f l).support ⊆ s
[PROOFSTEP]
exact Set.Subset.trans mapDomain_support hl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
[PROOFSTEP]
classical
inhabit α
refine
  le_antisymm
    (map_le_iff_le_comap.2 <|
      le_trans (supported_mono <| Set.subset_preimage_image _ _) (supported_comap_lmapDomain M R _ _))
    ?_
intro l hl
refine' ⟨(lmapDomain M R (Function.invFunOn f s) : (α' →₀ M) →ₗ[R] α →₀ M) l, fun x hx => _, _⟩
· rcases Finset.mem_image.1 (mapDomain_support hx) with ⟨c, hc, rfl⟩
  exact Function.invFunOn_mem (by simpa using hl hc)
· rw [← LinearMap.comp_apply, ← lmapDomain_comp]
  refine' (mapDomain_congr fun c hc => _).trans mapDomain_id
  exact Function.invFunOn_eq (by simpa using hl hc)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
[PROOFSTEP]
inhabit α
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ map (lmapDomain M R f) (supported M R s) = supported M R (f '' s)
[PROOFSTEP]
refine
  le_antisymm
    (map_le_iff_le_comap.2 <|
      le_trans (supported_mono <| Set.subset_preimage_image _ _) (supported_comap_lmapDomain M R _ _))
    ?_
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
⊢ supported M R (f '' s) ≤ map (lmapDomain M R f) (supported M R s)
[PROOFSTEP]
intro l hl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ l ∈ map (lmapDomain M R f) (supported M R s)
[PROOFSTEP]
refine' ⟨(lmapDomain M R (Function.invFunOn f s) : (α' →₀ M) →ₗ[R] α →₀ M) l, fun x hx => _, _⟩
[GOAL]
case refine'_1
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
x : α
hx : x ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ x ∈ s
[PROOFSTEP]
rcases Finset.mem_image.1 (mapDomain_support hx) with ⟨c, hc, rfl⟩
[GOAL]
case refine'_1.intro.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
hx : Function.invFunOn f s c ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ Function.invFunOn f s c ∈ s
[PROOFSTEP]
exact Function.invFunOn_mem (by simpa using hl hc)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
hx : Function.invFunOn f s c ∈ ↑(↑(lmapDomain M R (Function.invFunOn f s)) l).support
⊢ ∃ a, a ∈ s ∧ f a = c
[PROOFSTEP]
simpa using hl hc
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R f) (↑(lmapDomain M R (Function.invFunOn f s)) l) = l
[PROOFSTEP]
rw [← LinearMap.comp_apply, ← lmapDomain_comp]
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
⊢ ↑(lmapDomain M R (f ∘ Function.invFunOn f s)) l = l
[PROOFSTEP]
refine' (mapDomain_congr fun c hc => _).trans mapDomain_id
[GOAL]
case refine'_2
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
⊢ (f ∘ Function.invFunOn f s) c = _root_.id c
[PROOFSTEP]
exact Function.invFunOn_eq (by simpa using hl hc)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁸ : Semiring R
inst✝⁷ : Semiring S
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : AddCommMonoid N
inst✝³ : Module R N
inst✝² : AddCommMonoid P
inst✝¹ : Module R P
α' : Type u_7
α'' : Type u_8
inst✝ : Nonempty α
f : α → α'
s : Set α
inhabited_h : Inhabited α
l : α' →₀ M
hl : l ∈ supported M R (f '' s)
c : α'
hc : c ∈ l.support
⊢ ∃ a, a ∈ s ∧ f a = c
[PROOFSTEP]
simpa using hl hc
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
⊢ Disjoint (supported M R s) (ker (lmapDomain M R f))
[PROOFSTEP]
rw [disjoint_iff_inf_le]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
⊢ supported M R s ⊓ ker (lmapDomain M R f) ≤ ⊥
[PROOFSTEP]
rintro l ⟨h₁, h₂⟩
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : l ∈ ↑(ker (lmapDomain M R f))
⊢ l ∈ ⊥
[PROOFSTEP]
rw [SetLike.mem_coe, mem_ker, lmapDomain_apply, mapDomain] at h₂ 
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
⊢ l ∈ ⊥
[PROOFSTEP]
simp
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
⊢ l = 0
[PROOFSTEP]
ext x
[GOAL]
case intro.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
⊢ ↑l x = ↑0 x
[PROOFSTEP]
haveI := Classical.decPred fun x => x ∈ s
[GOAL]
case intro.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
⊢ ↑l x = ↑0 x
[PROOFSTEP]
by_cases xs : x ∈ s
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
xs : x ∈ s
⊢ ↑l x = ↑0 x
[PROOFSTEP]
have : Finsupp.sum l (fun a => Finsupp.single (f a)) (f x) = 0 :=
  by
  rw [h₂]
  rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
xs : x ∈ s
⊢ ↑(sum l fun a => single (f a)) (f x) = 0
[PROOFSTEP]
rw [h₂]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
xs : x ∈ s
⊢ ↑0 (f x) = 0
[PROOFSTEP]
rfl
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this✝ : DecidablePred fun x => x ∈ s
xs : x ∈ s
this : ↑(sum l fun a => single (f a)) (f x) = 0
⊢ ↑l x = ↑0 x
[PROOFSTEP]
rw [Finsupp.sum_apply, Finsupp.sum, Finset.sum_eq_single x, single_eq_same] at this 
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this✝ : DecidablePred fun x => x ∈ s
xs : x ∈ s
this : ↑l x = 0
⊢ ↑l x = ↑0 x
[PROOFSTEP]
simpa
[GOAL]
case pos.h₀
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this✝ : DecidablePred fun x => x ∈ s
xs : x ∈ s
this : ∑ a in l.support, ↑(single (f a) (↑l a)) (f x) = 0
⊢ ∀ (b : α), b ∈ l.support → b ≠ x → ↑(single (f b) (↑l b)) (f x) = 0
[PROOFSTEP]
intro y hy xy
[GOAL]
case pos.h₀
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this✝ : DecidablePred fun x => x ∈ s
xs : x ∈ s
this : ∑ a in l.support, ↑(single (f a) (↑l a)) (f x) = 0
y : α
hy : y ∈ l.support
xy : y ≠ x
⊢ ↑(single (f y) (↑l y)) (f x) = 0
[PROOFSTEP]
simp [mt (H _ (h₁ hy) _ xs) xy]
[GOAL]
case pos.h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this✝ : DecidablePred fun x => x ∈ s
xs : x ∈ s
this : ∑ a in l.support, ↑(single (f a) (↑l a)) (f x) = 0
⊢ ¬x ∈ l.support → ↑(single (f x) (↑l x)) (f x) = 0
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
xs : ¬x ∈ s
⊢ ↑l x = ↑0 x
[PROOFSTEP]
by_contra h
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
α'' : Type u_8
f : α → α'
s : Set α
H : ∀ (a : α), a ∈ s → ∀ (b : α), b ∈ s → f a = f b → a = b
l : α →₀ M
h₁ : l ∈ ↑(supported M R s)
h₂ : (sum l fun a => single (f a)) = 0
x : α
this : DecidablePred fun x => x ∈ s
xs : ¬x ∈ s
h : ¬↑l x = ↑0 x
⊢ False
[PROOFSTEP]
exact xs (h₁ <| Finsupp.mem_support_iff.2 h)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
β : Type u_7
f : α → β
hf : Function.Injective f
x y : β →₀ M
⊢ (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y) =
    (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
      (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
β : Type u_7
f : α → β
hf : Function.Injective f
x y : β →₀ M
a✝ : α
⊢ ↑((fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y)) a✝ =
    ↑((fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
          (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y)
      a✝
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
β : Type u_7
f : α → β
hf : Function.Injective f
c : R
x : β →₀ M
⊢ AddHom.toFun
      { toFun := fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support)),
        map_add' :=
          (_ :
            ∀ (x y : β →₀ M),
              (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y) =
                (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
                  (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y) }
      (c • x) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support)),
          map_add' :=
            (_ :
              ∀ (x y : β →₀ M),
                (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y) =
                  (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
                    (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y) }
        x
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
β : Type u_7
f : α → β
hf : Function.Injective f
c : R
x : β →₀ M
a✝ : α
⊢ ↑(AddHom.toFun
          { toFun := fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support)),
            map_add' :=
              (_ :
                ∀ (x y : β →₀ M),
                  (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y) =
                    (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
                      (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y) }
          (c • x))
      a✝ =
    ↑(↑(RingHom.id R) c •
          AddHom.toFun
            { toFun := fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support)),
              map_add' :=
                (_ :
                  ∀ (x y : β →₀ M),
                    (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) (x + y) =
                      (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) x +
                        (fun l => comapDomain f l (_ : InjOn f (f ⁻¹' ↑l.support))) y) }
            x)
      a✝
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
l : α →₀ R
s : Finset α
hs : l ∈ supported R R ↑s
x : α
x✝ : x ∈ s
hxg : ¬x ∈ l.support
⊢ ↑l x • v x = 0
[PROOFSTEP]
rw [not_mem_support_iff.1 hxg, zero_smul]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
c : R
a : α
⊢ ↑(Finsupp.total α M R v) (single a c) = c • v a
[PROOFSTEP]
simp [total_apply, sum_single_index]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : α →₀ R
⊢ ↑(Finsupp.total α M R 0) x = 0
[PROOFSTEP]
simp [Finsupp.total_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
f : M →ₗ[R] M'
v : α → M
l : α →₀ R
⊢ ↑f (↑(Finsupp.total α M R v) l) = ↑(Finsupp.total α M' R (↑f ∘ v)) l
[PROOFSTEP]
apply Finsupp.induction_linear l
[GOAL]
case h0
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
f : M →ₗ[R] M'
v : α → M
l : α →₀ R
⊢ ↑f (↑(Finsupp.total α M R v) 0) = ↑(Finsupp.total α M' R (↑f ∘ v)) 0
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case hadd
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
f : M →ₗ[R] M'
v : α → M
l : α →₀ R
⊢ ∀ (f_1 g : α →₀ R),
    ↑f (↑(Finsupp.total α M R v) f_1) = ↑(Finsupp.total α M' R (↑f ∘ v)) f_1 →
      ↑f (↑(Finsupp.total α M R v) g) = ↑(Finsupp.total α M' R (↑f ∘ v)) g →
        ↑f (↑(Finsupp.total α M R v) (f_1 + g)) = ↑(Finsupp.total α M' R (↑f ∘ v)) (f_1 + g)
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
case hsingle
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
f : M →ₗ[R] M'
v : α → M
l : α →₀ R
⊢ ∀ (a : α) (b : R), ↑f (↑(Finsupp.total α M R v) (single a b)) = ↑(Finsupp.total α M' R (↑f ∘ v)) (single a b)
[PROOFSTEP]
simp (config := { contextual := true })
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R P
α' : Type u_7
M' : Type u_8
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
v✝ : α → M
v' : α' → M'
inst✝ : Unique α
l : α →₀ R
v : α → M
⊢ ↑(Finsupp.total α M R v) l = ↑l default • v default
[PROOFSTEP]
rw [← total_single, ← unique_single l]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
h : Function.Surjective v
⊢ Function.Surjective ↑(Finsupp.total α M R v)
[PROOFSTEP]
intro x
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
h : Function.Surjective v
x : M
⊢ ∃ a, ↑(Finsupp.total α M R v) a = x
[PROOFSTEP]
obtain ⟨y, hy⟩ := h x
[GOAL]
case intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
h : Function.Surjective v
x : M
y : α
hy : v y = x
⊢ ∃ a, ↑(Finsupp.total α M R v) a = x
[PROOFSTEP]
exact ⟨Finsupp.single y 1, by simp [hy]⟩
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
h : Function.Surjective v
x : M
y : α
hy : v y = x
⊢ ↑(Finsupp.total α M R v) (single y 1) = x
[PROOFSTEP]
simp [hy]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
⊢ LinearMap.range (Finsupp.total α M R v) = span R (Set.range v)
[PROOFSTEP]
ext x
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
⊢ x ∈ LinearMap.range (Finsupp.total α M R v) ↔ x ∈ span R (Set.range v)
[PROOFSTEP]
constructor
[GOAL]
case h.mp
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
⊢ x ∈ LinearMap.range (Finsupp.total α M R v) → x ∈ span R (Set.range v)
[PROOFSTEP]
intro hx
[GOAL]
case h.mp
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
hx : x ∈ LinearMap.range (Finsupp.total α M R v)
⊢ x ∈ span R (Set.range v)
[PROOFSTEP]
rw [LinearMap.mem_range] at hx 
[GOAL]
case h.mp
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
hx : ∃ y, ↑(Finsupp.total α M R v) y = x
⊢ x ∈ span R (Set.range v)
[PROOFSTEP]
rcases hx with ⟨l, hl⟩
[GOAL]
case h.mp.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ x ∈ span R (Set.range v)
[PROOFSTEP]
rw [← hl]
[GOAL]
case h.mp.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ ↑(Finsupp.total α M R v) l ∈ span R (Set.range v)
[PROOFSTEP]
rw [Finsupp.total_apply]
[GOAL]
case h.mp.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ (sum l fun i a => a • v i) ∈ span R (Set.range v)
[PROOFSTEP]
exact sum_mem fun i _ => Submodule.smul_mem _ _ (subset_span (mem_range_self i))
[GOAL]
case h.mpr
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
⊢ x ∈ span R (Set.range v) → x ∈ LinearMap.range (Finsupp.total α M R v)
[PROOFSTEP]
apply span_le.2
[GOAL]
case h.mpr.a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x : M
⊢ Set.range v ⊆ ↑(LinearMap.range (Finsupp.total α M R v))
[PROOFSTEP]
intro x hx
[GOAL]
case h.mpr.a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x✝ x : M
hx : x ∈ Set.range v
⊢ x ∈ ↑(LinearMap.range (Finsupp.total α M R v))
[PROOFSTEP]
rcases hx with ⟨i, hi⟩
[GOAL]
case h.mpr.a.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ x ∈ ↑(LinearMap.range (Finsupp.total α M R v))
[PROOFSTEP]
rw [SetLike.mem_coe, LinearMap.mem_range]
[GOAL]
case h.mpr.a.intro
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ ∃ y, ↑(Finsupp.total α M R v) y = x
[PROOFSTEP]
use Finsupp.single i 1
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ ↑(Finsupp.total α M R v) (single i 1) = x
[PROOFSTEP]
simp [hi]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
g : M →ₗ[R] M'
h : ∀ (i : α), ↑g (v i) = v' (f i)
⊢ comp (Finsupp.total α' M' R v') (lmapDomain R R f) = comp g (Finsupp.total α M R v)
[PROOFSTEP]
ext l
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
g : M →ₗ[R] M'
h : ∀ (i : α), ↑g (v i) = v' (f i)
l : α
⊢ ↑(comp (comp (Finsupp.total α' M' R v') (lmapDomain R R f)) (lsingle l)) 1 =
    ↑(comp (comp g (Finsupp.total α M R v)) (lsingle l)) 1
[PROOFSTEP]
simp [total_apply, Finsupp.sum_mapDomain_index, add_smul, h]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
⊢ comp (Finsupp.total α' M' R v') (lmapDomain R R f) = Finsupp.total α M' R (v' ∘ f)
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
a✝ : α
⊢ ↑(comp (comp (Finsupp.total α' M' R v') (lmapDomain R R f)) (lsingle a✝)) 1 =
    ↑(comp (Finsupp.total α M' R (v' ∘ f)) (lsingle a✝)) 1
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α ↪ α'
l : α →₀ R
⊢ ↑(Finsupp.total α' M' R v') (embDomain f l) = ↑(Finsupp.total α M' R (v' ∘ ↑f)) l
[PROOFSTEP]
simp [total_apply, Finsupp.sum, support_embDomain, embDomain_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α ≃ α'
l : α →₀ R
⊢ ↑(Finsupp.total α' M' R v') (equivMapDomain f l) = ↑(Finsupp.total α M' R (v' ∘ ↑f)) l
[PROOFSTEP]
rw [equivMapDomain_eq_mapDomain, total_mapDomain]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set M
⊢ span R s = LinearMap.range (Finsupp.total (↑s) M R Subtype.val)
[PROOFSTEP]
rw [range_total, Subtype.range_coe_subtype, Set.setOf_mem_eq]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
v : α → M
x : M
⊢ x ∈ span R (Set.range v) ↔ ∃ c, (sum c fun i a => a • v i) = x
[PROOFSTEP]
simp only [← Finsupp.range_total, LinearMap.mem_range, Finsupp.total_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
⊢ span R (v '' s) = map (Finsupp.total α M R v) (supported R R s)
[PROOFSTEP]
apply span_eq_of_le
[GOAL]
case h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
⊢ v '' s ⊆ ↑(map (Finsupp.total α M R v) (supported R R s))
[PROOFSTEP]
intro x hx
[GOAL]
case h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
hx : x ∈ v '' s
⊢ x ∈ ↑(map (Finsupp.total α M R v) (supported R R s))
[PROOFSTEP]
rw [Set.mem_image] at hx 
[GOAL]
case h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
hx : ∃ x_1, x_1 ∈ s ∧ v x_1 = x
⊢ x ∈ ↑(map (Finsupp.total α M R v) (supported R R s))
[PROOFSTEP]
apply Exists.elim hx
[GOAL]
case h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
hx : ∃ x_1, x_1 ∈ s ∧ v x_1 = x
⊢ ∀ (a : α), a ∈ s ∧ v a = x → x ∈ ↑(map (Finsupp.total α M R v) (supported R R s))
[PROOFSTEP]
intro i hi
[GOAL]
case h₁
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
hx : ∃ x_1, x_1 ∈ s ∧ v x_1 = x
i : α
hi : i ∈ s ∧ v i = x
⊢ x ∈ ↑(map (Finsupp.total α M R v) (supported R R s))
[PROOFSTEP]
exact ⟨_, Finsupp.single_mem_supported R 1 hi.1, by simp [hi.2]⟩
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
hx : ∃ x_1, x_1 ∈ s ∧ v x_1 = x
i : α
hi : i ∈ s ∧ v i = x
⊢ ↑(Finsupp.total α M R v) (single i 1) = x
[PROOFSTEP]
simp [hi.2]
[GOAL]
case h₂
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
⊢ map (Finsupp.total α M R v) (supported R R s) ≤ span R (v '' s)
[PROOFSTEP]
refine' map_le_iff_le_comap.2 fun z hz => _
[GOAL]
case h₂
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
⊢ z ∈ comap (Finsupp.total α M R v) (span R (v '' s))
[PROOFSTEP]
have : ∀ i, z i • v i ∈ span R (v '' s) := by
  intro c
  haveI := Classical.decPred fun x => x ∈ s
  by_cases h : c ∈ s
  · exact smul_mem _ _ (subset_span (Set.mem_image_of_mem _ h))
  ·
    simp [(Finsupp.mem_supported' R _).1 hz _ h]
      -- Porting note: `rw` is required to infer metavariables in `sum_mem`.
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
⊢ ∀ (i : α), ↑z i • v i ∈ span R (v '' s)
[PROOFSTEP]
intro c
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
c : α
⊢ ↑z c • v c ∈ span R (v '' s)
[PROOFSTEP]
haveI := Classical.decPred fun x => x ∈ s
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
c : α
this : DecidablePred fun x => x ∈ s
⊢ ↑z c • v c ∈ span R (v '' s)
[PROOFSTEP]
by_cases h : c ∈ s
[GOAL]
case pos
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
c : α
this : DecidablePred fun x => x ∈ s
h : c ∈ s
⊢ ↑z c • v c ∈ span R (v '' s)
[PROOFSTEP]
exact smul_mem _ _ (subset_span (Set.mem_image_of_mem _ h))
[GOAL]
case neg
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
c : α
this : DecidablePred fun x => x ∈ s
h : ¬c ∈ s
⊢ ↑z c • v c ∈ span R (v '' s)
[PROOFSTEP]
simp [(Finsupp.mem_supported' R _).1 hz _ h]
  -- Porting note: `rw` is required to infer metavariables in `sum_mem`.
[GOAL]
case h₂
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
this : ∀ (i : α), ↑z i • v i ∈ span R (v '' s)
⊢ z ∈ comap (Finsupp.total α M R v) (span R (v '' s))
[PROOFSTEP]
rw [mem_comap, total_apply]
[GOAL]
case h₂
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
this : ∀ (i : α), ↑z i • v i ∈ span R (v '' s)
⊢ (sum z fun i a => a • v i) ∈ span R (v '' s)
[PROOFSTEP]
refine' sum_mem _
[GOAL]
case h₂
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
z : α →₀ R
hz : z ∈ supported R R s
this : ∀ (i : α), ↑z i • v i ∈ span R (v '' s)
⊢ ∀ (c : α), c ∈ z.support → (fun i a => a • v i) c (↑z c) ∈ span R (v '' s)
[PROOFSTEP]
simp [this]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
⊢ x ∈ span R (v '' s) ↔ ∃ l, l ∈ supported R R s ∧ ↑(Finsupp.total α M R v) l = x
[PROOFSTEP]
rw [span_image_eq_map_total]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
x : M
⊢ x ∈ map (Finsupp.total α M R v) (supported R R s) ↔ ∃ l, l ∈ supported R R s ∧ ↑(Finsupp.total α M R v) l = x
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
v : Option α → M
f : Option α →₀ R
⊢ ↑(Finsupp.total (Option α) M R v) f = ↑f none • v none + ↑(Finsupp.total α M R (v ∘ Option.some)) (some f)
[PROOFSTEP]
rw [total_apply, sum_option_index_smul, total_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v✝ : α → M
v' : α' → M'
v : Option α → M
f : Option α →₀ R
⊢ (↑f none • v none + sum (some f) fun a r => r • v (Option.some a)) =
    ↑f none • v none + sum (some f) fun i a => a • (v ∘ Option.some) i
[PROOFSTEP]
simp
[GOAL]
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ↑(Finsupp.total α M R A) (↑(Finsupp.total β (α →₀ R) R B) f) =
    ↑(Finsupp.total β M R fun b => ↑(Finsupp.total α M R A) (B b)) f
[PROOFSTEP]
classical
simp only [total_apply]
apply induction_linear f
· simp only [sum_zero_index]
· intro f₁ f₂ h₁ h₂
  simp [sum_add_index, h₁, h₂, add_smul]
· simp [sum_single_index, sum_smul_index, smul_sum, mul_smul]
[GOAL]
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ↑(Finsupp.total α M R A) (↑(Finsupp.total β (α →₀ R) R B) f) =
    ↑(Finsupp.total β M R fun b => ↑(Finsupp.total α M R A) (B b)) f
[PROOFSTEP]
simp only [total_apply]
[GOAL]
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ (sum (sum f fun i a => a • B i) fun i a => a • A i) = sum f fun i a => a • sum (B i) fun i a => a • A i
[PROOFSTEP]
apply induction_linear f
[GOAL]
case h0
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ (sum (sum 0 fun i a => a • B i) fun i a => a • A i) = sum 0 fun i a => a • sum (B i) fun i a => a • A i
[PROOFSTEP]
simp only [sum_zero_index]
[GOAL]
case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (f g : β →₀ R),
    ((sum (sum f fun i a => a • B i) fun i a => a • A i) = sum f fun i a => a • sum (B i) fun i a => a • A i) →
      ((sum (sum g fun i a => a • B i) fun i a => a • A i) = sum g fun i a => a • sum (B i) fun i a => a • A i) →
        (sum (sum (f + g) fun i a => a • B i) fun i a => a • A i) =
          sum (f + g) fun i a => a • sum (B i) fun i a => a • A i
[PROOFSTEP]
intro f₁ f₂ h₁ h₂
[GOAL]
case hadd
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
f₁ f₂ : β →₀ R
h₁ : (sum (sum f₁ fun i a => a • B i) fun i a => a • A i) = sum f₁ fun i a => a • sum (B i) fun i a => a • A i
h₂ : (sum (sum f₂ fun i a => a • B i) fun i a => a • A i) = sum f₂ fun i a => a • sum (B i) fun i a => a • A i
⊢ (sum (sum (f₁ + f₂) fun i a => a • B i) fun i a => a • A i) =
    sum (f₁ + f₂) fun i a => a • sum (B i) fun i a => a • A i
[PROOFSTEP]
simp [sum_add_index, h₁, h₂, add_smul]
[GOAL]
case hsingle
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α✝ → M
v' : α' → M'
α : Type u_9
β : Type u_10
A : α → M
B : β → α →₀ R
f : β →₀ R
⊢ ∀ (a : β) (b : R),
    (sum (sum (single a b) fun i a => a • B i) fun i a => a • A i) =
      sum (single a b) fun i a => a • sum (B i) fun i a => a • A i
[PROOFSTEP]
simp [sum_single_index, sum_smul_index, smul_sum, mul_smul]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : Fin 0 → M
⊢ Finsupp.total (Fin 0) M R f = 0
[PROOFSTEP]
ext i
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : Fin 0 → M
i : Fin 0
⊢ ↑(comp (Finsupp.total (Fin 0) M R f) (lsingle i)) 1 = ↑(comp 0 (lsingle i)) 1
[PROOFSTEP]
apply finZeroElim i
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
⊢ LinearMap.range (Finsupp.totalOn α M R v s) = ⊤
[PROOFSTEP]
rw [Finsupp.totalOn, LinearMap.range_eq_map, LinearMap.map_codRestrict, ← LinearMap.range_le_iff_comap, range_subtype,
  Submodule.map_top, LinearMap.range_comp, range_subtype]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Set α
⊢ span R (v '' s) ≤ map (Finsupp.total α M R v) (supported R R s)
[PROOFSTEP]
exact (span_image_eq_map_total _ _).le
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α' → α
⊢ Finsupp.total α' M R (v ∘ f) = comp (Finsupp.total α M R v) (lmapDomain R R f)
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α' → α
a✝ : α'
⊢ ↑(comp (Finsupp.total α' M R (v ∘ f)) (lsingle a✝)) 1 =
    ↑(comp (comp (Finsupp.total α M R v) (lmapDomain R R f)) (lsingle a✝)) 1
[PROOFSTEP]
simp [total_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
l : α' →₀ R
hf : InjOn f (f ⁻¹' ↑l.support)
⊢ ↑(Finsupp.total α M R v) (comapDomain f l hf) = ∑ i in Finset.preimage l.support f hf, ↑l (f i) • v i
[PROOFSTEP]
rw [Finsupp.total_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
f : α → α'
l : α' →₀ R
hf : InjOn f (f ⁻¹' ↑l.support)
⊢ (sum (comapDomain f l hf) fun i a => a • v i) = ∑ i in Finset.preimage l.support f hf, ↑l (f i) • v i
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
⊢ ↑(Finsupp.total α M R g) (onFinset s f hf) = ∑ x in s, f x • g x
[PROOFSTEP]
classical
simp only [Finsupp.total_apply, Finsupp.sum, Finsupp.onFinset_apply, Finsupp.support_onFinset]
rw [Finset.sum_filter_of_ne]
intro x _ h
contrapose! h
simp [h]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
⊢ ↑(Finsupp.total α M R g) (onFinset s f hf) = ∑ x in s, f x • g x
[PROOFSTEP]
simp only [Finsupp.total_apply, Finsupp.sum, Finsupp.onFinset_apply, Finsupp.support_onFinset]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
⊢ ∑ x in Finset.filter (fun a => f a ≠ 0) s, f x • g x = ∑ x in s, f x • g x
[PROOFSTEP]
rw [Finset.sum_filter_of_ne]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
⊢ ∀ (x : α), x ∈ s → f x • g x ≠ 0 → f x ≠ 0
[PROOFSTEP]
intro x _ h
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
x : α
a✝ : x ∈ s
h : f x • g x ≠ 0
⊢ f x ≠ 0
[PROOFSTEP]
contrapose! h
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
α' : Type u_7
M' : Type u_8
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
v : α → M
v' : α' → M'
s : Finset α
f : α → R
g : α → M
hf : ∀ (a : α), f a ≠ 0 → a ∈ s
x : α
a✝ : x ∈ s
h : f x = 0
⊢ f x • g x = 0
[PROOFSTEP]
simp [h]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α₁ : Type u_7
α₂ : Type u_8
e : α₁ ≃ α₂
⊢ ∀ (c : R) (x : α₁ →₀ M), ↑(Finsupp.domCongr e) (c • x) = c • ↑(Finsupp.domCongr e) x
[PROOFSTEP]
simpa only [equivMapDomain_eq_mapDomain, domCongr_apply] using (lmapDomain M R e).map_smul
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α₁ : Type u_7
α₂ : Type u_8
e : α₁ ≃ α₂
i : α₁
m : M
⊢ ↑(Finsupp.domLCongr e) (single i m) = single (↑e i) m
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
s : Set α
t : Set α'
e : ↑s ≃ ↑t
⊢ { x // x ∈ supported M R s } ≃ₗ[R] { x // x ∈ supported M R t }
[PROOFSTEP]
haveI := Classical.decPred fun x => x ∈ s
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
s : Set α
t : Set α'
e : ↑s ≃ ↑t
this : DecidablePred fun x => x ∈ s
⊢ { x // x ∈ supported M R s } ≃ₗ[R] { x // x ∈ supported M R t }
[PROOFSTEP]
haveI := Classical.decPred fun x => x ∈ t
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α' : Type u_7
s : Set α
t : Set α'
e : ↑s ≃ ↑t
this✝ : DecidablePred fun x => x ∈ s
this : DecidablePred fun x => x ∈ t
⊢ { x // x ∈ supported M R s } ≃ₗ[R] { x // x ∈ supported M R t }
[PROOFSTEP]
exact Finsupp.supportedEquivFinsupp s ≪≫ₗ (Finsupp.domLCongr e ≪≫ₗ (Finsupp.supportedEquivFinsupp t).symm)
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
κ : Type u_8
e₁ : ι ≃ κ
e₂ : M ≃ₗ[R] N
i : ι
m : M
⊢ ↑(lcongr e₁ e₂) (single i m) = single (↑e₁ i) (↑e₂ m)
[PROOFSTEP]
simp [lcongr]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
κ : Type u_8
e₁ : ι ≃ κ
e₂ : M ≃ₗ[R] N
k : κ
n : N
⊢ ↑(LinearEquiv.symm (lcongr e₁ e₂)) (single k n) = single (↑e₁.symm k) (↑(LinearEquiv.symm e₂) n)
[PROOFSTEP]
apply_fun (lcongr e₁ e₂ : (ι →₀ M) → (κ →₀ N)) using (lcongr e₁ e₂).injective
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
κ : Type u_8
e₁ : ι ≃ κ
e₂ : M ≃ₗ[R] N
k : κ
n : N
⊢ ↑(lcongr e₁ e₂) (↑(LinearEquiv.symm (lcongr e₁ e₂)) (single k n)) =
    ↑(lcongr e₁ e₂) (single (↑e₁.symm k) (↑(LinearEquiv.symm e₂) n))
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
κ : Type u_8
e₁ : ι ≃ κ
e₂ : M ≃ₗ[R] N
⊢ LinearEquiv.symm (lcongr e₁ e₂) = lcongr e₁.symm (LinearEquiv.symm e₂)
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
ι : Type u_7
κ : Type u_8
e₁ : ι ≃ κ
e₂ : M ≃ₗ[R] N
x✝ : κ →₀ N
a✝ : ι
⊢ ↑(↑(LinearEquiv.symm (lcongr e₁ e₂)) x✝) a✝ = ↑(↑(lcongr e₁.symm (LinearEquiv.symm e₂)) x✝) a✝
[PROOFSTEP]
rfl
[GOAL]
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_7
β : Type u_8
src✝ : (α ⊕ β →₀ M) ≃+ (α →₀ M) × (β →₀ M) := sumFinsuppAddEquivProdFinsupp
⊢ ∀ (r : R) (x : α ⊕ β →₀ M),
    AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ :
              ∀ (x y : α ⊕ β →₀ M),
                Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
        (r • x) =
      ↑(RingHom.id R) r •
        AddHom.toFun
          { toFun := src✝.toFun,
            map_add' :=
              (_ :
                ∀ (x y : α ⊕ β →₀ M),
                  Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
          x
[PROOFSTEP]
intros
[GOAL]
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_7
β : Type u_8
src✝ : (α ⊕ β →₀ M) ≃+ (α →₀ M) × (β →₀ M) := sumFinsuppAddEquivProdFinsupp
r✝ : R
x✝ : α ⊕ β →₀ M
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ (x y : α ⊕ β →₀ M),
              Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
      (r✝ • x✝) =
    ↑(RingHom.id R) r✝ •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ :
              ∀ (x y : α ⊕ β →₀ M),
                Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
        x✝
[PROOFSTEP]
ext
[GOAL]
case h₁.h
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_7
β : Type u_8
src✝ : (α ⊕ β →₀ M) ≃+ (α →₀ M) × (β →₀ M) := sumFinsuppAddEquivProdFinsupp
r✝ : R
x✝ : α ⊕ β →₀ M
a✝ : α
⊢ ↑(AddHom.toFun
            { toFun := src✝.toFun,
              map_add' :=
                (_ :
                  ∀ (x y : α ⊕ β →₀ M),
                    Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
            (r✝ • x✝)).fst
      a✝ =
    ↑(↑(RingHom.id R) r✝ •
            AddHom.toFun
              { toFun := src✝.toFun,
                map_add' :=
                  (_ :
                    ∀ (x y : α ⊕ β →₀ M),
                      Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
              x✝).fst
      a✝
[PROOFSTEP]
simp only [Equiv.toFun_as_coe, AddEquiv.toEquiv_eq_coe, AddEquiv.coe_toEquiv, Prod.smul_fst, Prod.smul_snd, smul_apply,
  snd_sumFinsuppAddEquivProdFinsupp, fst_sumFinsuppAddEquivProdFinsupp, RingHom.id_apply]
[GOAL]
case h₂.h
α✝ : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_7
β : Type u_8
src✝ : (α ⊕ β →₀ M) ≃+ (α →₀ M) × (β →₀ M) := sumFinsuppAddEquivProdFinsupp
r✝ : R
x✝ : α ⊕ β →₀ M
a✝ : β
⊢ ↑(AddHom.toFun
            { toFun := src✝.toFun,
              map_add' :=
                (_ :
                  ∀ (x y : α ⊕ β →₀ M),
                    Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
            (r✝ • x✝)).snd
      a✝ =
    ↑(↑(RingHom.id R) r✝ •
            AddHom.toFun
              { toFun := src✝.toFun,
                map_add' :=
                  (_ :
                    ∀ (x y : α ⊕ β →₀ M),
                      Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
              x✝).snd
      a✝
[PROOFSTEP]
simp only [Equiv.toFun_as_coe, AddEquiv.toEquiv_eq_coe, AddEquiv.coe_toEquiv, Prod.smul_fst, Prod.smul_snd, smul_apply,
  snd_sumFinsuppAddEquivProdFinsupp, fst_sumFinsuppAddEquivProdFinsupp, RingHom.id_apply]
[GOAL]
α : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : AddCommMonoid M✝
inst✝⁸ : Module R M✝
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
η : Type u_7
inst✝³ : Fintype η
ιs✝ : η → Type u_8
inst✝² : Zero α
M : Type u_9
ιs : η → Type u_10
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : ((j : η) × ιs j →₀ M) ≃+ ((j : η) → ιs j →₀ M) := sigmaFinsuppAddEquivPiFinsupp
c : R
f : (j : η) × ιs j →₀ M
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' :=
          (_ :
            ∀ (x y : (j : η) × ιs j →₀ M),
              Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
      (c • f) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' :=
            (_ :
              ∀ (x y : (j : η) × ιs j →₀ M),
                Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
        f
[PROOFSTEP]
ext
[GOAL]
case h.h
α : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring S
inst✝⁹ : AddCommMonoid M✝
inst✝⁸ : Module R M✝
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
η : Type u_7
inst✝³ : Fintype η
ιs✝ : η → Type u_8
inst✝² : Zero α
M : Type u_9
ιs : η → Type u_10
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : ((j : η) × ιs j →₀ M) ≃+ ((j : η) → ιs j →₀ M) := sigmaFinsuppAddEquivPiFinsupp
c : R
f : (j : η) × ιs j →₀ M
x✝ : η
a✝ : ιs x✝
⊢ ↑(AddHom.toFun
          { toFun := src✝.toFun,
            map_add' :=
              (_ :
                ∀ (x y : (j : η) × ιs j →₀ M),
                  Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
          (c • f) x✝)
      a✝ =
    ↑((↑(RingHom.id R) c •
            AddHom.toFun
              { toFun := src✝.toFun,
                map_add' :=
                  (_ :
                    ∀ (x y : (j : η) × ιs j →₀ M),
                      Equiv.toFun src✝.toEquiv (x + y) = Equiv.toFun src✝.toEquiv x + Equiv.toFun src✝.toEquiv y) }
              f)
          x✝)
      a✝
[PROOFSTEP]
simp
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : (α × β →₀ M) ≃ (α →₀ β →₀ M) := finsuppProdEquiv
f g : α × β →₀ M
⊢ Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ f + Equiv.toFun src✝ g
[PROOFSTEP]
ext
[GOAL]
case h.h
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : (α × β →₀ M) ≃ (α →₀ β →₀ M) := finsuppProdEquiv
f g : α × β →₀ M
a✝¹ : α
a✝ : β
⊢ ↑(↑(Equiv.toFun src✝ (f + g)) a✝¹) a✝ = ↑(↑(Equiv.toFun src✝ f + Equiv.toFun src✝ g) a✝¹) a✝
[PROOFSTEP]
simp [finsuppProdEquiv, curry_apply]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : (α × β →₀ M) ≃ (α →₀ β →₀ M) := finsuppProdEquiv
c : R
f : α × β →₀ M
⊢ AddHom.toFun
      { toFun := src✝.toFun,
        map_add' := (_ : ∀ (f g : α × β →₀ M), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ f + Equiv.toFun src✝ g) }
      (c • f) =
    ↑(RingHom.id R) c •
      AddHom.toFun
        { toFun := src✝.toFun,
          map_add' := (_ : ∀ (f g : α × β →₀ M), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ f + Equiv.toFun src✝ g) }
        f
[PROOFSTEP]
ext
[GOAL]
case h.h
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
src✝ : (α × β →₀ M) ≃ (α →₀ β →₀ M) := finsuppProdEquiv
c : R
f : α × β →₀ M
a✝¹ : α
a✝ : β
⊢ ↑(↑(AddHom.toFun
              { toFun := src✝.toFun,
                map_add' :=
                  (_ : ∀ (f g : α × β →₀ M), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ f + Equiv.toFun src✝ g) }
              (c • f))
          a✝¹)
      a✝ =
    ↑(↑(↑(RingHom.id R) c •
              AddHom.toFun
                { toFun := src✝.toFun,
                  map_add' :=
                    (_ : ∀ (f g : α × β →₀ M), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ f + Equiv.toFun src✝ g) }
                f)
          a✝¹)
      a✝
[PROOFSTEP]
simp [finsuppProdEquiv, curry_apply]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α × β →₀ M
x : α
y : β
⊢ ↑(↑(↑(finsuppProdLEquiv R) f) x) y = ↑f (x, y)
[PROOFSTEP]
rw [finsuppProdLEquiv, LinearEquiv.coe_mk, finsuppProdEquiv, Finsupp.curry_apply]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α →₀ β →₀ M
xy : α × β
⊢ ↑(↑(LinearEquiv.symm (finsuppProdLEquiv R)) f) xy = ↑(↑f xy.fst) xy.snd
[PROOFSTEP]
conv_rhs => rw [← (finsuppProdLEquiv R).apply_symm_apply f, finsuppProdLEquiv_apply, Prod.mk.eta]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α →₀ β →₀ M
xy : α × β
| ↑(↑f xy.fst) xy.snd
[PROOFSTEP]
rw [← (finsuppProdLEquiv R).apply_symm_apply f, finsuppProdLEquiv_apply, Prod.mk.eta]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α →₀ β →₀ M
xy : α × β
| ↑(↑f xy.fst) xy.snd
[PROOFSTEP]
rw [← (finsuppProdLEquiv R).apply_symm_apply f, finsuppProdLEquiv_apply, Prod.mk.eta]
[GOAL]
α✝ : Type u_1
M✝ : Type u_2
N : Type u_3
P : Type u_4
R✝ : Type u_5
S : Type u_6
inst✝¹⁰ : Semiring R✝
inst✝⁹ : Semiring S
inst✝⁸ : AddCommMonoid M✝
inst✝⁷ : Module R✝ M✝
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R✝ N
inst✝⁴ : AddCommMonoid P
inst✝³ : Module R✝ P
α : Type u_7
β : Type u_8
R : Type u_9
M : Type u_10
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : α →₀ β →₀ M
xy : α × β
| ↑(↑f xy.fst) xy.snd
[PROOFSTEP]
rw [← (finsuppProdLEquiv R).apply_symm_apply f, finsuppProdLEquiv_apply, Prod.mk.eta]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
ι : Type u_7
inst✝¹ : Countable R
inst✝ : Countable ι
v : ι → M
⊢ Countable { x // x ∈ span R (Set.range v) }
[PROOFSTEP]
refine
  Set.countable_coe_iff.mpr
    (Set.Countable.mono ?_ (Set.countable_range (fun c : (ι →₀ R) => c.sum fun i _ => (c i) • v i)))
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁹ : Semiring R
inst✝⁸ : Semiring S
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
inst✝³ : AddCommMonoid P
inst✝² : Module R P
ι : Type u_7
inst✝¹ : Countable R
inst✝ : Countable ι
v : ι → M
⊢ ↑(span R (Set.range v)) ⊆ Set.range fun c => sum c fun i x => ↑c i • v i
[PROOFSTEP]
exact fun _ h => Finsupp.mem_span_range_iff_exists_finsupp.mp (SetLike.mem_coe.mp h)
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ v : α → M
f g : α → R
⊢ (fun f => ∑ i : α, f i • v i) (f + g) = (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g
[PROOFSTEP]
simp_rw [← Finset.sum_add_distrib, ← add_smul]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ v : α → M
f g : α → R
⊢ ∑ i : α, (f + g) i • v i = ∑ x : α, (f x + g x) • v x
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ v : α → M
r : R
f : α → R
⊢ AddHom.toFun
      { toFun := fun f => ∑ i : α, f i • v i,
        map_add' :=
          (_ :
            ∀ (f g : α → R),
              (fun f => ∑ i : α, f i • v i) (f + g) =
                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
      (r • f) =
    ↑(RingHom.id R) r •
      AddHom.toFun
        { toFun := fun f => ∑ i : α, f i • v i,
          map_add' :=
            (_ :
              ∀ (f g : α → R),
                (fun f => ∑ i : α, f i • v i) (f + g) =
                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
        f
[PROOFSTEP]
simp_rw [Finset.smul_sum, smul_smul]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ v : α → M
r : R
f : α → R
⊢ ∑ i : α, (r • f) i • v i = ∑ x : α, (↑(RingHom.id R) r * f x) • v x
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ u v : α → M
⊢ (fun v =>
        {
          toAddHom :=
            { toFun := fun f => ∑ i : α, f i • v i,
              map_add' :=
                (_ :
                  ∀ (f g : α → R),
                    (fun f => ∑ i : α, f i • v i) (f + g) =
                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
          map_smul' :=
            (_ :
              ∀ (r : R) (f : α → R),
                AddHom.toFun
                    { toFun := fun f => ∑ i : α, f i • v i,
                      map_add' :=
                        (_ :
                          ∀ (f g : α → R),
                            (fun f => ∑ i : α, f i • v i) (f + g) =
                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                    (r • f) =
                  ↑(RingHom.id R) r •
                    AddHom.toFun
                      { toFun := fun f => ∑ i : α, f i • v i,
                        map_add' :=
                          (_ :
                            ∀ (f g : α → R),
                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                      f) })
      (u + v) =
    (fun v =>
          {
            toAddHom :=
              { toFun := fun f => ∑ i : α, f i • v i,
                map_add' :=
                  (_ :
                    ∀ (f g : α → R),
                      (fun f => ∑ i : α, f i • v i) (f + g) =
                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
            map_smul' :=
              (_ :
                ∀ (r : R) (f : α → R),
                  AddHom.toFun
                      { toFun := fun f => ∑ i : α, f i • v i,
                        map_add' :=
                          (_ :
                            ∀ (f g : α → R),
                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                      (r • f) =
                    ↑(RingHom.id R) r •
                      AddHom.toFun
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                        f) })
        u +
      (fun v =>
          {
            toAddHom :=
              { toFun := fun f => ∑ i : α, f i • v i,
                map_add' :=
                  (_ :
                    ∀ (f g : α → R),
                      (fun f => ∑ i : α, f i • v i) (f + g) =
                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
            map_smul' :=
              (_ :
                ∀ (r : R) (f : α → R),
                  AddHom.toFun
                      { toFun := fun f => ∑ i : α, f i • v i,
                        map_add' :=
                          (_ :
                            ∀ (f g : α → R),
                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                      (r • f) =
                    ↑(RingHom.id R) r •
                      AddHom.toFun
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                        f) })
        v
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ u v : α → M
x✝ : α → R
⊢ ↑((fun v =>
            {
              toAddHom :=
                { toFun := fun f => ∑ i : α, f i • v i,
                  map_add' :=
                    (_ :
                      ∀ (f g : α → R),
                        (fun f => ∑ i : α, f i • v i) (f + g) =
                          (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (f : α → R),
                    AddHom.toFun
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                        (r • f) =
                      ↑(RingHom.id R) r •
                        AddHom.toFun
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                          f) })
          (u + v))
      x✝ =
    ↑((fun v =>
              {
                toAddHom :=
                  { toFun := fun f => ∑ i : α, f i • v i,
                    map_add' :=
                      (_ :
                        ∀ (f g : α → R),
                          (fun f => ∑ i : α, f i • v i) (f + g) =
                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                map_smul' :=
                  (_ :
                    ∀ (r : R) (f : α → R),
                      AddHom.toFun
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                          (r • f) =
                        ↑(RingHom.id R) r •
                          AddHom.toFun
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                            f) })
            u +
          (fun v =>
              {
                toAddHom :=
                  { toFun := fun f => ∑ i : α, f i • v i,
                    map_add' :=
                      (_ :
                        ∀ (f g : α → R),
                          (fun f => ∑ i : α, f i • v i) (f + g) =
                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                map_smul' :=
                  (_ :
                    ∀ (r : R) (f : α → R),
                      AddHom.toFun
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                          (r • f) =
                        ↑(RingHom.id R) r •
                          AddHom.toFun
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                            f) })
            v)
      x✝
[PROOFSTEP]
simp [Finset.sum_add_distrib, Pi.add_apply, smul_add]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ : α → M
r : S
v : α → M
⊢ AddHom.toFun
      {
        toFun := fun v =>
          {
            toAddHom :=
              { toFun := fun f => ∑ i : α, f i • v i,
                map_add' :=
                  (_ :
                    ∀ (f g : α → R),
                      (fun f => ∑ i : α, f i • v i) (f + g) =
                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
            map_smul' :=
              (_ :
                ∀ (r : R) (f : α → R),
                  AddHom.toFun
                      { toFun := fun f => ∑ i : α, f i • v i,
                        map_add' :=
                          (_ :
                            ∀ (f g : α → R),
                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                      (r • f) =
                    ↑(RingHom.id R) r •
                      AddHom.toFun
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                        f) },
        map_add' :=
          (_ :
            ∀ (u v : α → M),
              (fun v =>
                    {
                      toAddHom :=
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                      map_smul' :=
                        (_ :
                          ∀ (r : R) (f : α → R),
                            AddHom.toFun
                                { toFun := fun f => ∑ i : α, f i • v i,
                                  map_add' :=
                                    (_ :
                                      ∀ (f g : α → R),
                                        (fun f => ∑ i : α, f i • v i) (f + g) =
                                          (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                (r • f) =
                              ↑(RingHom.id R) r •
                                AddHom.toFun
                                  { toFun := fun f => ∑ i : α, f i • v i,
                                    map_add' :=
                                      (_ :
                                        ∀ (f g : α → R),
                                          (fun f => ∑ i : α, f i • v i) (f + g) =
                                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                  f) })
                  (u + v) =
                (fun v =>
                      {
                        toAddHom :=
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                        map_smul' :=
                          (_ :
                            ∀ (r : R) (f : α → R),
                              AddHom.toFun
                                  { toFun := fun f => ∑ i : α, f i • v i,
                                    map_add' :=
                                      (_ :
                                        ∀ (f g : α → R),
                                          (fun f => ∑ i : α, f i • v i) (f + g) =
                                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                  (r • f) =
                                ↑(RingHom.id R) r •
                                  AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    f) })
                    u +
                  (fun v =>
                      {
                        toAddHom :=
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                        map_smul' :=
                          (_ :
                            ∀ (r : R) (f : α → R),
                              AddHom.toFun
                                  { toFun := fun f => ∑ i : α, f i • v i,
                                    map_add' :=
                                      (_ :
                                        ∀ (f g : α → R),
                                          (fun f => ∑ i : α, f i • v i) (f + g) =
                                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                  (r • f) =
                                ↑(RingHom.id R) r •
                                  AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    f) })
                    v) }
      (r • v) =
    ↑(RingHom.id S) r •
      AddHom.toFun
        {
          toFun := fun v =>
            {
              toAddHom :=
                { toFun := fun f => ∑ i : α, f i • v i,
                  map_add' :=
                    (_ :
                      ∀ (f g : α → R),
                        (fun f => ∑ i : α, f i • v i) (f + g) =
                          (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (f : α → R),
                    AddHom.toFun
                        { toFun := fun f => ∑ i : α, f i • v i,
                          map_add' :=
                            (_ :
                              ∀ (f g : α → R),
                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                        (r • f) =
                      ↑(RingHom.id R) r •
                        AddHom.toFun
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                          f) },
          map_add' :=
            (_ :
              ∀ (u v : α → M),
                (fun v =>
                      {
                        toAddHom :=
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                        map_smul' :=
                          (_ :
                            ∀ (r : R) (f : α → R),
                              AddHom.toFun
                                  { toFun := fun f => ∑ i : α, f i • v i,
                                    map_add' :=
                                      (_ :
                                        ∀ (f g : α → R),
                                          (fun f => ∑ i : α, f i • v i) (f + g) =
                                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                  (r • f) =
                                ↑(RingHom.id R) r •
                                  AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    f) })
                    (u + v) =
                  (fun v =>
                        {
                          toAddHom :=
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                          map_smul' :=
                            (_ :
                              ∀ (r : R) (f : α → R),
                                AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    (r • f) =
                                  ↑(RingHom.id R) r •
                                    AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      f) })
                      u +
                    (fun v =>
                        {
                          toAddHom :=
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                          map_smul' :=
                            (_ :
                              ∀ (r : R) (f : α → R),
                                AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    (r • f) =
                                  ↑(RingHom.id R) r •
                                    AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      f) })
                      v) }
        v
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v✝ : α → M
r : S
v : α → M
x✝ : α → R
⊢ ↑(AddHom.toFun
          {
            toFun := fun v =>
              {
                toAddHom :=
                  { toFun := fun f => ∑ i : α, f i • v i,
                    map_add' :=
                      (_ :
                        ∀ (f g : α → R),
                          (fun f => ∑ i : α, f i • v i) (f + g) =
                            (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                map_smul' :=
                  (_ :
                    ∀ (r : R) (f : α → R),
                      AddHom.toFun
                          { toFun := fun f => ∑ i : α, f i • v i,
                            map_add' :=
                              (_ :
                                ∀ (f g : α → R),
                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                          (r • f) =
                        ↑(RingHom.id R) r •
                          AddHom.toFun
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                            f) },
            map_add' :=
              (_ :
                ∀ (u v : α → M),
                  (fun v =>
                        {
                          toAddHom :=
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                          map_smul' :=
                            (_ :
                              ∀ (r : R) (f : α → R),
                                AddHom.toFun
                                    { toFun := fun f => ∑ i : α, f i • v i,
                                      map_add' :=
                                        (_ :
                                          ∀ (f g : α → R),
                                            (fun f => ∑ i : α, f i • v i) (f + g) =
                                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                    (r • f) =
                                  ↑(RingHom.id R) r •
                                    AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      f) })
                      (u + v) =
                    (fun v =>
                          {
                            toAddHom :=
                              { toFun := fun f => ∑ i : α, f i • v i,
                                map_add' :=
                                  (_ :
                                    ∀ (f g : α → R),
                                      (fun f => ∑ i : α, f i • v i) (f + g) =
                                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                            map_smul' :=
                              (_ :
                                ∀ (r : R) (f : α → R),
                                  AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      (r • f) =
                                    ↑(RingHom.id R) r •
                                      AddHom.toFun
                                        { toFun := fun f => ∑ i : α, f i • v i,
                                          map_add' :=
                                            (_ :
                                              ∀ (f g : α → R),
                                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                        f) })
                        u +
                      (fun v =>
                          {
                            toAddHom :=
                              { toFun := fun f => ∑ i : α, f i • v i,
                                map_add' :=
                                  (_ :
                                    ∀ (f g : α → R),
                                      (fun f => ∑ i : α, f i • v i) (f + g) =
                                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                            map_smul' :=
                              (_ :
                                ∀ (r : R) (f : α → R),
                                  AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      (r • f) =
                                    ↑(RingHom.id R) r •
                                      AddHom.toFun
                                        { toFun := fun f => ∑ i : α, f i • v i,
                                          map_add' :=
                                            (_ :
                                              ∀ (f g : α → R),
                                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                        f) })
                        v) }
          (r • v))
      x✝ =
    ↑(↑(RingHom.id S) r •
          AddHom.toFun
            {
              toFun := fun v =>
                {
                  toAddHom :=
                    { toFun := fun f => ∑ i : α, f i • v i,
                      map_add' :=
                        (_ :
                          ∀ (f g : α → R),
                            (fun f => ∑ i : α, f i • v i) (f + g) =
                              (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                  map_smul' :=
                    (_ :
                      ∀ (r : R) (f : α → R),
                        AddHom.toFun
                            { toFun := fun f => ∑ i : α, f i • v i,
                              map_add' :=
                                (_ :
                                  ∀ (f g : α → R),
                                    (fun f => ∑ i : α, f i • v i) (f + g) =
                                      (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                            (r • f) =
                          ↑(RingHom.id R) r •
                            AddHom.toFun
                              { toFun := fun f => ∑ i : α, f i • v i,
                                map_add' :=
                                  (_ :
                                    ∀ (f g : α → R),
                                      (fun f => ∑ i : α, f i • v i) (f + g) =
                                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                              f) },
              map_add' :=
                (_ :
                  ∀ (u v : α → M),
                    (fun v =>
                          {
                            toAddHom :=
                              { toFun := fun f => ∑ i : α, f i • v i,
                                map_add' :=
                                  (_ :
                                    ∀ (f g : α → R),
                                      (fun f => ∑ i : α, f i • v i) (f + g) =
                                        (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                            map_smul' :=
                              (_ :
                                ∀ (r : R) (f : α → R),
                                  AddHom.toFun
                                      { toFun := fun f => ∑ i : α, f i • v i,
                                        map_add' :=
                                          (_ :
                                            ∀ (f g : α → R),
                                              (fun f => ∑ i : α, f i • v i) (f + g) =
                                                (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                      (r • f) =
                                    ↑(RingHom.id R) r •
                                      AddHom.toFun
                                        { toFun := fun f => ∑ i : α, f i • v i,
                                          map_add' :=
                                            (_ :
                                              ∀ (f g : α → R),
                                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                        f) })
                        (u + v) =
                      (fun v =>
                            {
                              toAddHom :=
                                { toFun := fun f => ∑ i : α, f i • v i,
                                  map_add' :=
                                    (_ :
                                      ∀ (f g : α → R),
                                        (fun f => ∑ i : α, f i • v i) (f + g) =
                                          (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                              map_smul' :=
                                (_ :
                                  ∀ (r : R) (f : α → R),
                                    AddHom.toFun
                                        { toFun := fun f => ∑ i : α, f i • v i,
                                          map_add' :=
                                            (_ :
                                              ∀ (f g : α → R),
                                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                        (r • f) =
                                      ↑(RingHom.id R) r •
                                        AddHom.toFun
                                          { toFun := fun f => ∑ i : α, f i • v i,
                                            map_add' :=
                                              (_ :
                                                ∀ (f g : α → R),
                                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                          f) })
                          u +
                        (fun v =>
                            {
                              toAddHom :=
                                { toFun := fun f => ∑ i : α, f i • v i,
                                  map_add' :=
                                    (_ :
                                      ∀ (f g : α → R),
                                        (fun f => ∑ i : α, f i • v i) (f + g) =
                                          (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) },
                              map_smul' :=
                                (_ :
                                  ∀ (r : R) (f : α → R),
                                    AddHom.toFun
                                        { toFun := fun f => ∑ i : α, f i • v i,
                                          map_add' :=
                                            (_ :
                                              ∀ (f g : α → R),
                                                (fun f => ∑ i : α, f i • v i) (f + g) =
                                                  (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                        (r • f) =
                                      ↑(RingHom.id R) r •
                                        AddHom.toFun
                                          { toFun := fun f => ∑ i : α, f i • v i,
                                            map_add' :=
                                              (_ :
                                                ∀ (f g : α → R),
                                                  (fun f => ∑ i : α, f i • v i) (f + g) =
                                                    (fun f => ∑ i : α, f i • v i) f + (fun f => ∑ i : α, f i • v i) g) }
                                          f) })
                          v) }
            v)
      x✝
[PROOFSTEP]
simp [Finset.smul_sum, smul_comm]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁷ : Fintype α
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
S : Type u_4
inst✝³ : Semiring S
inst✝² : Module S M
inst✝¹ : SMulCommClass R S M
v : α → M
inst✝ : DecidableEq α
i : α
r : R
⊢ ↑(↑(Fintype.total R S) v) (Pi.single i r) = r • v i
[PROOFSTEP]
simp_rw [Fintype.total_apply, Pi.single_apply, ite_smul, zero_smul]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁷ : Fintype α
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
S : Type u_4
inst✝³ : Semiring S
inst✝² : Module S M
inst✝¹ : SMulCommClass R S M
v : α → M
inst✝ : DecidableEq α
i : α
r : R
⊢ (∑ x : α, if x = i then r • v x else 0) = r • v i
[PROOFSTEP]
rw [Finset.sum_ite_eq', if_pos (Finset.mem_univ _)]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : α → R
⊢ ↑(Finsupp.total α M R v) (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x) = ↑(↑(Fintype.total R S) v) x
[PROOFSTEP]
apply Finset.sum_subset
[GOAL]
case h
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : α → R
⊢ (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x).support ⊆ Finset.univ
[PROOFSTEP]
exact Finset.subset_univ _
[GOAL]
case hf
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : α → R
⊢ ∀ (x_1 : α),
    x_1 ∈ Finset.univ →
      ¬x_1 ∈ (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x).support →
        (fun i => ↑((fun i => smulRight LinearMap.id (v i)) i)) x_1
            (↑(↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x) x_1) =
          0
[PROOFSTEP]
intro x _ hx
[GOAL]
case hf
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x✝ : α → R
x : α
a✝ : x ∈ Finset.univ
hx : ¬x ∈ (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x✝).support
⊢ (fun i => ↑((fun i => smulRight LinearMap.id (v i)) i)) x
      (↑(↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x✝) x) =
    0
[PROOFSTEP]
rw [Finsupp.not_mem_support_iff.mp hx]
[GOAL]
case hf
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x✝ : α → R
x : α
a✝ : x ∈ Finset.univ
hx : ¬x ∈ (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) x✝).support
⊢ (fun i => ↑((fun i => smulRight LinearMap.id (v i)) i)) x 0 = 0
[PROOFSTEP]
exact zero_smul _ _
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
⊢ LinearMap.range (↑(Fintype.total R S) v) = span R (Set.range v)
[PROOFSTEP]
rw [← Finsupp.total_eq_fintype_total, LinearMap.range_comp, LinearEquiv.range, Submodule.map_top, Finsupp.range_total]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : M
⊢ x ∈ span R (Set.range v) ↔ ∃ c, ∑ i : α, c i • v i = x
[PROOFSTEP]
rw [Finsupp.equivFunOnFinite.surjective.exists]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : M
⊢ x ∈ span R (Set.range v) ↔ ∃ x_1, ∑ i : α, ↑Finsupp.equivFunOnFinite x_1 i • v i = x
[PROOFSTEP]
simp [Finsupp.mem_span_range_iff_exists_finsupp, Finsupp.equivFunOnFinite_apply]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : M
⊢ (∃ c, (Finsupp.sum c fun i a => a • v i) = x) ↔ ∃ x_1, ∑ x : α, ↑x_1 x • v x = x
[PROOFSTEP]
exact exists_congr fun c => Eq.congr_left <| Finsupp.sum_fintype _ _ fun i => zero_smul _ _
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : M
⊢ ⊤ ≤ span R (Set.range v) ↔ ∀ (x : M), ∃ c, ∑ i : α, c i • v i = x
[PROOFSTEP]
simp_rw [← mem_span_range_iff_exists_fun]
[GOAL]
α : Type u_1
M : Type u_2
R : Type u_3
inst✝⁶ : Fintype α
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
S : Type u_4
inst✝² : Semiring S
inst✝¹ : Module S M
inst✝ : SMulCommClass R S M
v : α → M
x : M
⊢ ⊤ ≤ span R (Set.range v) ↔ ∀ (x : M), x ∈ span R (Set.range fun i => v i)
[PROOFSTEP]
exact ⟨fun h x => h trivial, fun h x _ => h x⟩
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
w : Set M
x : { x // x ∈ span R w }
⊢ ↑(Finsupp.total (↑w) M R Subtype.val) (repr R w x) = ↑x
[PROOFSTEP]
rw [Span.repr_def]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
w : Set M
x : { x // x ∈ span R w }
⊢ ↑(Finsupp.total (↑w) M R Subtype.val) (Exists.choose (_ : ∃ l, ↑(Finsupp.total (↑w) M R Subtype.val) l = ↑x)) = ↑x
[PROOFSTEP]
exact ((Finsupp.mem_span_iff_total _ _ _).mp x.2).choose_spec
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
f : M →ₗ[R] N
ι : Type u_4
g : ι → M
l : ι →₀ R
⊢ ↑f (↑(Finsupp.total ι M R g) l) = ↑(Finsupp.total ι N R (↑f ∘ g)) l
[PROOFSTEP]
simp only [Finsupp.total_apply, Finsupp.total_apply, Finsupp.sum, f.map_sum, f.map_smul, (· ∘ ·)]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
ι : Type u_4
p : ι → Submodule R M
m : M
hm : m ∈ ⨆ (i : ι), p i
⊢ ∃ s, m ∈ ⨆ (i : ι) (_ : i ∈ s), p i
[PROOFSTEP]
have :=
  CompleteLattice.IsCompactElement.exists_finset_of_le_iSup (Submodule R M)
    (Submodule.singleton_span_isCompactElement m) p
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
ι : Type u_4
p : ι → Submodule R M
m : M
hm : m ∈ ⨆ (i : ι), p i
this : span R {m} ≤ ⨆ (i : ι), p i → ∃ s, span R {m} ≤ ⨆ (i : ι) (_ : i ∈ s), p i
⊢ ∃ s, m ∈ ⨆ (i : ι) (_ : i ∈ s), p i
[PROOFSTEP]
simp only [Submodule.span_singleton_le_iff_mem] at this 
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
ι : Type u_4
p : ι → Submodule R M
m : M
hm : m ∈ ⨆ (i : ι), p i
this : m ∈ ⨆ (i : ι), p i → ∃ s, m ∈ ⨆ (i : ι) (_ : i ∈ s), p i
⊢ ∃ s, m ∈ ⨆ (i : ι) (_ : i ∈ s), p i
[PROOFSTEP]
exact this hm
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Finset M
x : M
hx : x ∈ span R ↑s
⊢ x ∈ span R (_root_.id '' ↑s)
[PROOFSTEP]
rwa [Set.image_id]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
⊢ m ∈ span R s ↔ ∃ c, ↑c.support ⊆ s ∧ (Finsupp.sum c fun mi r => r • mi) = m
[PROOFSTEP]
conv_lhs => rw [← Set.image_id s]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
| m ∈ span R s
[PROOFSTEP]
rw [← Set.image_id s]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
| m ∈ span R s
[PROOFSTEP]
rw [← Set.image_id s]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
| m ∈ span R s
[PROOFSTEP]
rw [← Set.image_id s]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
⊢ m ∈ span R (_root_.id '' s) ↔ ∃ c, ↑c.support ⊆ s ∧ (Finsupp.sum c fun mi r => r • mi) = m
[PROOFSTEP]
exact Finsupp.mem_span_image_iff_total R (v := _root_.id (α := M))
[GOAL]
R✝ : Type u_1
M✝ : Type u_2
N : Type u_3
inst✝⁸ : Semiring R✝
inst✝⁷ : AddCommMonoid M✝
inst✝⁶ : Module R✝ M✝
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_4
M : Type u_5
ι : Type u_6
inst✝³ : Semiring R
inst✝² : Subsingleton R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
⊢ (fun x => 0)
      (AddHom.toFun
        { toAddHom := { toFun := fun x => 0, map_add' := (_ : M → M → 0 = 0 + 0) },
            map_smul' := (_ : ∀ (r : R), M → 0 = r • 0) }.toAddHom
        m) =
    m
[PROOFSTEP]
letI := Module.subsingleton R M
[GOAL]
R✝ : Type u_1
M✝ : Type u_2
N : Type u_3
inst✝⁸ : Semiring R✝
inst✝⁷ : AddCommMonoid M✝
inst✝⁶ : Module R✝ M✝
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_4
M : Type u_5
ι : Type u_6
inst✝³ : Semiring R
inst✝² : Subsingleton R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
this : Subsingleton M := Module.subsingleton R M
⊢ (fun x => 0)
      (AddHom.toFun
        { toAddHom := { toFun := fun x => 0, map_add' := (_ : M → M → 0 = 0 + 0) },
            map_smul' := (_ : ∀ (r : R), M → 0 = r • 0) }.toAddHom
        m) =
    m
[PROOFSTEP]
simp only [eq_iff_true_of_subsingleton]
[GOAL]
R✝ : Type u_1
M✝ : Type u_2
N : Type u_3
inst✝⁸ : Semiring R✝
inst✝⁷ : AddCommMonoid M✝
inst✝⁶ : Module R✝ M✝
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R✝ N
R : Type u_4
M : Type u_5
ι : Type u_6
inst✝³ : Semiring R
inst✝² : Subsingleton R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
f : ι →₀ R
⊢ AddHom.toFun
      { toAddHom := { toFun := fun x => 0, map_add' := (_ : M → M → 0 = 0 + 0) },
          map_smul' := (_ : ∀ (r : R), M → 0 = r • 0) }.toAddHom
      ((fun x => 0) f) =
    f
[PROOFSTEP]
simp only [eq_iff_true_of_subsingleton]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
⊢ comp f (splittingOfFinsuppSurjective f s) = id
[PROOFSTEP]
refine lhom_ext' fun x => ext_ring <| Finsupp.ext fun y => ?_
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
x y : α
⊢ ↑(↑(comp (comp f (splittingOfFinsuppSurjective f s)) (lsingle x)) 1) y = ↑(↑(comp id (lsingle x)) 1) y
[PROOFSTEP]
dsimp [splittingOfFinsuppSurjective]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
x y : α
⊢ ↑(↑f (sum (Finsupp.single x 1) fun x r => r • Exists.choose (_ : ∃ a, ↑f a = Finsupp.single x 1))) y =
    ↑(Finsupp.single x 1) y
[PROOFSTEP]
congr
[GOAL]
case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
x y : α
⊢ ↑f (sum (Finsupp.single x 1) fun x r => r • Exists.choose (_ : ∃ a, ↑f a = Finsupp.single x 1)) = Finsupp.single x 1
[PROOFSTEP]
rw [sum_single_index, one_smul]
[GOAL]
case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
x y : α
⊢ ↑f (Exists.choose (_ : ∃ a, ↑f a = Finsupp.single x 1)) = Finsupp.single x 1
[PROOFSTEP]
exact (s (Finsupp.single x 1)).choose_spec
[GOAL]
case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ↑f
x y : α
⊢ 0 • Exists.choose (_ : ∃ a, ↑f a = Finsupp.single x 1) = 0
[PROOFSTEP]
rw [zero_smul]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Fintype α
f : M →ₗ[R] α → R
s : Surjective ↑f
⊢ comp f (splittingOfFunOnFintypeSurjective f s) = id
[PROOFSTEP]
classical
  -- Porting note: `ext` can't find appropriate theorems.
refine pi_ext' fun x => ext_ring <| funext fun y => ?_
dsimp [splittingOfFunOnFintypeSurjective]
rw [linearEquivFunOnFinite_symm_single, Finsupp.sum_single_index, one_smul, (s (Finsupp.single x 1)).choose_spec,
  Finsupp.single_eq_pi_single]
rw [zero_smul]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Fintype α
f : M →ₗ[R] α → R
s : Surjective ↑f
⊢ comp f (splittingOfFunOnFintypeSurjective f s) = id
[PROOFSTEP]
refine pi_ext' fun x => ext_ring <| funext fun y => ?_
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Fintype α
f : M →ₗ[R] α → R
s : Surjective ↑f
x y : α
⊢ ↑(comp (comp f (splittingOfFunOnFintypeSurjective f s)) (single x)) 1 y = ↑(comp id (single x)) 1 y
[PROOFSTEP]
dsimp [splittingOfFunOnFintypeSurjective]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Fintype α
f : M →ₗ[R] α → R
s : Surjective ↑f
x y : α
⊢ ↑f
      (sum (↑(LinearEquiv.symm (linearEquivFunOnFinite R R α)) (Pi.single x 1)) fun x r =>
        r • Exists.choose (_ : ∃ a, ↑f a = ↑(Finsupp.single x 1)))
      y =
    Pi.single x 1 y
[PROOFSTEP]
rw [linearEquivFunOnFinite_symm_single, Finsupp.sum_single_index, one_smul, (s (Finsupp.single x 1)).choose_spec,
  Finsupp.single_eq_pi_single]
[GOAL]
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
α : Type u_4
inst✝ : Fintype α
f : M →ₗ[R] α → R
s : Surjective ↑f
x y : α
⊢ 0 • Exists.choose (_ : ∃ a, ↑f a = ↑(Finsupp.single x 1)) = 0
[PROOFSTEP]
rw [zero_smul]
