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_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ LinearIndependent R fun ix => single ix.fst (f ix.fst ix.snd)
state_after: case hindep
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ ∀ (j : ι), LinearIndependent R fun x => single j (f j x)

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

tactic: intro i
state_before: case hindep
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ ∀ (j : ι), LinearIndependent R fun x => single j (f j x)
state_after: case hindep
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
⊢ LinearIndependent R fun x => single i (f i 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_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
⊢ LinearIndependent R fun x => single i (f i x)
state_after: case hindep
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
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: apply (hf i).map h_disjoint
state_before: case hindep
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
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)
state_after: no goals

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

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

tactic: intro i t _ hit
state_before: case hd
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
⊢ ∀ (i : ι) (t : Set ι),
    t.Finite →
      i ∉ t →
        Disjoint (span R (Set.range fun x => single i (f i x))) (⨆ i ∈ t, span R (Set.range fun x => single i (f i x)))
state_after: case hd
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : t.Finite
hit : i ∉ t
⊢ Disjoint (span R (Set.range fun x => single i (f i x))) (⨆ 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_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : t.Finite
hit : i ∉ t
⊢ Disjoint (span R (Set.range fun x => single i (f i x))) (⨆ i ∈ t, span R (Set.range fun x => single i (f i x)))
state_after: case hd.refine_1
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : t.Finite
hit : i ∉ t
⊢ span R (Set.range fun x => single i (f i x)) ≤ ⨆ a ∈ {i}, LinearMap.range (lsingle a)

case hd.refine_2
R : Type u_1
M : Type u_2
ι : Type u_3
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
φ : ι → Type u_4
f : (ι : ι) → φ ι → M
hf : ∀ (i : ι), LinearIndependent R (f i)
i : ι
t : Set ι
a✝ : t.Finite
hit : i ∉ t
⊢ ⨆ i ∈ t, span R (Set.range fun x => single i (f i x)) ≤ ⨆ a ∈ t, LinearMap.range (lsingle a)

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

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

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

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

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

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

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