Theorem: Finsupp.linearIndependent_single
File: Mathlib/LinearAlgebra/FinsuppVectorSpace.lean

tactic: apply @linearIndependent_iUnion_finite R _ _ _ _ ι φ fun i x => single i (f i x)
state_before: R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ LinearIndependent R fun ix => single ix.fst (f ix.fst ix.snd)

tactic: intro i
state_before: case hindep
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ ∀ (j : ι), LinearIndependent R fun x => single j (f j x)

tactic: have h_disjoint : Disjoint (span R (range (f i))) (ker (lsingle i)) := by
  rw [ker_lsingle]
  exact disjoint_bot_right
state_before: case hindep
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
⊢ LinearIndependent R fun x => single i (f i x)

tactic: apply (hf i).map h_disjoint
state_before: case hindep
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
h_disjoint : Disjoint (span R (Set.range (f i))) (ker (lsingle i))
⊢ LinearIndependent R fun x => single i (f i x)

tactic: rw [ker_lsingle]
state_before: R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
⊢ Disjoint (span R (Set.range (f i))) (ker (lsingle i))

tactic: exact disjoint_bot_right
state_before: R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
⊢ Disjoint (span R (Set.range (f i))) ⊥

tactic: intro i t _ hit
state_before: case hd
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ ∀ (i : ι) (t : Set ι),
    Set.Finite t →
      ¬i ∈ t →
        Disjoint (span R (Set.range fun x => single i (f i x)))
          (⨆ (i : ι) (_ : i ∈ t), span R (Set.range fun x => single i (f i x)))

tactic: refine' (disjoint_lsingle_lsingle {i} t (disjoint_singleton_left.2 hit)).mono _ _
state_before: case hd
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ Disjoint (span R (Set.range fun x => single i (f i x)))
    (⨆ (i : ι) (_ : i ∈ t), span R (Set.range fun x => single i (f i x)))

tactic: rw [span_le]
state_before: case hd.refine'_1
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ span R (Set.range fun x => single i (f i x)) ≤ ⨆ (a : ι) (_ : a ∈ {i}), LinearMap.range (lsingle a)

tactic: simp only [iSup_singleton]
state_before: case hd.refine'_1
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ (Set.range fun x => single i (f i x)) ⊆ ↑(⨆ (a : ι) (_ : a ∈ {i}), LinearMap.range (lsingle a))

tactic: rw [range_coe]
state_before: case hd.refine'_1
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ (Set.range fun x => single i (f i x)) ⊆ ↑(LinearMap.range (lsingle i))

tactic: apply range_comp_subset_range _ (lsingle i)
state_before: case hd.refine'_1
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ (Set.range fun x => single i (f i x)) ⊆ Set.range ↑(lsingle i)

tactic: refine' iSup₂_mono fun i hi => _
state_before: case hd.refine'_2
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i ∈ t
⊢ (⨆ (i : ι) (_ : i ∈ t), span R (Set.range fun x => single i (f i x))) ≤
    ⨆ (a : ι) (_ : a ∈ t), LinearMap.range (lsingle a)

tactic: rw [span_le, range_coe]
state_before: case hd.refine'_2
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i✝ : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i✝ ∈ t
i : ι
hi : i ∈ t
⊢ span R (Set.range fun x => single i (f i x)) ≤ LinearMap.range (lsingle i)

tactic: apply range_comp_subset_range _ (lsingle i)
state_before: case hd.refine'_2
R : Type u_2
M : Type u_3
ι : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_1
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i✝ : ι
t : Set ι
a✝ : Set.Finite t
hit : ¬i✝ ∈ t
i : ι
hi : i ∈ t
⊢ (Set.range fun x => single i (f i x)) ⊆ Set.range ↑(lsingle i)