Theorem: Submodule.biSup_eq_range_dfinsupp_lsum
File: Mathlib/LinearAlgebra/DFinsupp.lean

tactic: apply le_antisymm
state_before: ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
⊢ ⨆ i, ⨆ (_ : p i), S i = LinearMap.range (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p)
state_after: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
⊢ ⨆ i, ⨆ (_ : p i), S i ≤ LinearMap.range (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p)

case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
⊢ LinearMap.range (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) ≤ ⨆ i, ⨆ (_ : p i), S i

tactic: refine iSup₂_le fun i hi y hy => ⟨DFinsupp.single i ⟨y, hy⟩, ?_⟩
state_before: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
⊢ ⨆ i, ⨆ (_ : p i), S i ≤ LinearMap.range (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p)
state_after: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
i : ι
hi : p i
y : N
hy : y ∈ S i
⊢ (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) (single i ⟨y, hy⟩) = y

tactic: rw [LinearMap.comp_apply, filterLinearMap_apply, filter_single_pos _ _ hi]
state_before: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
i : ι
hi : p i
y : N
hy : y ∈ S i
⊢ (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) (single i ⟨y, hy⟩) = y
state_after: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
i : ι
hi : p i
y : N
hy : y ∈ S i
⊢ ((lsum ℕ) fun i => (S i).subtype) (single i ⟨y, hy⟩) = y

tactic: simp only [lsum_apply_apply, sumAddHom_single, LinearMap.toAddMonoidHom_coe, coeSubtype]
state_before: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
i : ι
hi : p i
y : N
hy : y ∈ S i
⊢ ((lsum ℕ) fun i => (S i).subtype) (single i ⟨y, hy⟩) = y
state_after: no goals

tactic: rintro x ⟨v, rfl⟩
state_before: case a
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
⊢ LinearMap.range (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) ≤ ⨆ i, ⨆ (_ : p i), S i
state_after: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
⊢ (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) v ∈ ⨆ i, ⨆ (_ : p i), S i

tactic: refine dfinsupp_sumAddHom_mem _ _ _ fun i _ => ?_
state_before: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
⊢ (((lsum ℕ) fun i => (S i).subtype) ∘ₗ filterLinearMap R (fun i => ↥(S i)) p) v ∈ ⨆ i, ⨆ (_ : p i), S i
state_after: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ i, ⨆ (_ : p i), S i

tactic: refine mem_iSup_of_mem i ?_
state_before: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ i, ⨆ (_ : p i), S i
state_after: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i

tactic: by_cases hp : p i
state_before: case a.intro
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i
state_after: case pos
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
hp : p i
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i

case neg
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
hp : ¬p i
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i

tactic: simp [hp]
state_before: case pos
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
hp : p i
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i
state_after: no goals

tactic: simp [hp]
state_before: case neg
ι : Type u_1
R : Type u_2
S✝ : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : DecidableEq ι
p : ι → Prop
inst✝ : DecidablePred p
S : ι → Submodule R N
v : Π₀ (i : ι), ↥(S i)
i : ι
x✝ : ((filterLinearMap R (fun i => ↥(S i)) p) v) i ≠ 0
hp : ¬p i
⊢ ((fun i => (S i).subtype) i).toAddMonoidHom (((filterLinearMap R (fun i => ↥(S i)) p) v) i) ∈ ⨆ (_ : p i), S i
state_after: no goals