Theorem: Finsupp.supported_iUnion
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: refine le_antisymm ?_ (iSup_le fun i => supported_mono <| Set.subset_iUnion _ _)
state_before: α : 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)
state_after: α : 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)

tactic: haveI := Classical.decPred fun x => x ∈ ⋃ i, s i
state_before: α : 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)
state_after: α : 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)

tactic: 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
state_before: α : 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)
state_after: α : 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) ≤ ⨆ i, supported M R (s i)

tactic: rw [range_le_iff_comap, eq_top_iff]
state_before: α : 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) ≤ ⨆ i, supported M R (s i)
state_after: α : 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))

tactic: rintro l ⟨⟩
state_before: α : 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))
state_after: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))

tactic: refine Finsupp.induction l ?_ ?_
state_before: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))
state_after: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))

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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i)) →
          single a b + f ∈
            comap ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))

tactic: rwa [LinearMap.range_comp, range_restrictDom, Submodule.map_top, range_subtype] at this
state_before: α : 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) ≤ ⨆ i, supported M R (s i)
⊢ supported M R (⋃ i, s i) ≤ ⨆ i, supported M R (s i)
state_after: no goals

tactic: exact zero_mem _
state_before: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))
state_after: no goals

tactic: refine fun x a l _ _ => add_mem ?_
state_before: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i)) →
          single a b + f ∈
            comap ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))
state_after: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))

tactic: by_cases h : ∃ i, x ∈ s i <;> simp [h]
state_before: 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 ((supported M R (⋃ i, s i)).subtype ∘ₗ restrictDom M R (⋃ i, s i)) (⨆ i, supported M R (s i))
state_after: 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)

tactic: cases' h with i hi
state_before: 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)
state_after: 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)

tactic: exact le_iSup (fun i => supported M R (s i)) i (single_mem_supported R _ hi)
state_before: 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)
state_after: no goals