Theorem: LinearMap.iInf_ker_proj_le_iSup_range_stdBasis
File: Mathlib/LinearAlgebra/StdBasis.lean

tactic: intro b hb
state_before: R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
⊢ ∀ ⦃x : (i : ι) → φ i⦄, (x ∈ ⨅ (i : ι) (_ : i ∈ J), ker (proj i)) → x ∈ ⨆ (i : ι) (_ : i ∈ I), range (stdBasis R φ i)

tactic: simp only [mem_iInf, mem_ker, proj_apply] at hb
state_before: R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : b ∈ ⨅ (i : ι) (_ : i ∈ J), ker (proj i)
⊢ b ∈ ⨆ (i : ι) (_ : i ∈ I), range (stdBasis R φ i)

tactic: rw [←
  show (∑ i in I, stdBasis R φ i (b i)) = b by
    ext i
    rw [Finset.sum_apply, ← stdBasis_same R φ i (b i)]
    refine Finset.sum_eq_single i (fun j _ ne => stdBasis_ne _ _ _ _ ne.symm _) ?_
    intro hiI
    rw [stdBasis_same]
    exact hb _ ((hu trivial).resolve_left hiI)]
state_before: R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
⊢ b ∈ ⨆ (i : ι) (_ : i ∈ I), range (stdBasis R φ i)

tactic: exact sum_mem_biSup fun i _ => mem_range_self (stdBasis R φ i) (b i)
state_before: R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
⊢ ∑ i in I, ↑(stdBasis R φ i) (b i) ∈ ⨆ (i : ι) (_ : i ∈ I), range (stdBasis R φ i)

tactic: ext i
state_before: R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
⊢ ∑ i in I, ↑(stdBasis R φ i) (b i) = b

tactic: rw [Finset.sum_apply, ← stdBasis_same R φ i (b i)]
state_before: case h
R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
i : ι
⊢ Finset.sum I (fun i => ↑(stdBasis R φ i) (b i)) i = b i

tactic: refine Finset.sum_eq_single i (fun j _ ne => stdBasis_ne _ _ _ _ ne.symm _) ?_
state_before: case h
R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
i : ι
⊢ ∑ c in I, ↑(stdBasis R φ c) (b c) i = ↑(stdBasis R φ i) (b i) i

tactic: intro hiI
state_before: case h
R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
i : ι
⊢ ¬i ∈ I → ↑(stdBasis R φ i) (b i) i = 0

tactic: rw [stdBasis_same]
state_before: case h
R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
i : ι
hiI : ¬i ∈ I
⊢ ↑(stdBasis R φ i) (b i) i = 0

tactic: exact hb _ ((hu trivial).resolve_left hiI)
state_before: case h
R : Type u_3
ι : Type u_1
inst✝³ : Semiring R
φ : ι → Type u_2
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
inst✝ : DecidableEq ι
I : Finset ι
J : Set ι
hu : Set.univ ⊆ ↑I ∪ J
b : (i : ι) → φ i
hb : ∀ (i : ι), i ∈ J → b i = 0
i : ι
hiI : ¬i ∈ I
⊢ b i = 0