Built with doc-gen4, running Lean4.
Bubbles () indicate interactive fragments: hover for details, tap to reveal contents.
Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus.
On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2018 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Kenny Lau
! This file was ported from Lean 3 source module data.dfinsupp.basic
! leanprover-community/mathlib commit 6623e6af705e97002a9054c1c05a980180276fc1
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Module.LinearMap
import Mathlib.Algebra.BigOperators.Basic
import Mathlib.Data.Set.Finite
import Mathlib.GroupTheory.Submonoid.Membership
import Mathlib.GroupTheory.GroupAction.BigOperators
import Mathlib.Data.Finset.Preimage
/-!
# Dependent functions with finite support
For a non-dependent version see `data/finsupp.lean`.
## Notation
This file introduces the notation `Π₀ a, β a` as notation for `Dfinsupp β`, mirroring the `α →₀ β`
notation used for `Finsupp`. This works for nested binders too, with `Π₀ a b, γ a b` as notation
for `Dfinsupp (λ a, Dfinsupp (γ a))`.
## Implementation notes
The support is internally represented (in the primed `Dfinsupp.support'`) as a `Multiset` that
represents a superset of the true support of the function, quotiented by the always-true relation so
that this does not impact equality. This approach has computational benefits over storing a
`Finset`; it allows us to add together two finitely-supported functions without
having to evaluate the resulting function to recompute its support (which would required
decidability of `b = 0` for `b : β i`).
The true support of the function can still be recovered with `Dfinsupp.support`; but these
decidability obligations are now postponed to when the support is actually needed. As a consequence,
there are two ways to sum a `Dfinsupp`: with `Dfinsupp.sum` which works over an arbitrary function
but requires recomputation of the support and therefore a `Decidable` argument; and with
`Dfinsupp.sumAddHom` which requires an additive morphism, using its properties to show that
summing over a superset of the support is sufficient.
`Finsupp` takes an altogether different approach here; it uses `Classical.Decidable` and declares
the `Add` instance as noncomputable. This design difference is independent of the fact that
`Dfinsupp` is dependently-typed and `Finsupp` is not; in future, we may want to align these two
definitions, or introduce two more definitions for the other combinations of decisions.
-/
universe u u₁ u₂ v v₁ v₂ v₃ w x y l
open BigOperators
variable {
β)
/-- A dependent function `Π i, β i` with finite support, with notation `Π₀ i, β i`.
Note that `Dfinsupp.support` is the preferred API for accessing the support of the function,
`Dfinsupp.support'` is a implementation detail that aids computability; see the implementation
notes in this file for more information. -/
structure
Dfinsupp: {ι : Type u} → (β : ι → Type v) → [inst : (i : ι) → Zero (βi)] → Type (maxuv)
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) x✝¹, x✝: Dfinsuppfun i => βi f₁: (i : ι) → βi s₁✝: Trunc{ s // ∀ (i : ι), i∈s∨f₁i=0 } f₂: (i : ι) → βi s₁: Trunc{ s // ∀ (i : ι), i∈s∨f₂i=0 } h: f₁=f₂
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) x✝¹, x✝: Dfinsuppfun i => βi f₁: (i : ι) → βi s₁✝, s₁: Trunc{ s // ∀ (i : ι), i∈s∨f₁i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) x✝¹, x✝: Dfinsuppfun i => βi f₁: (i : ι) → βi s₁✝: Trunc{ s // ∀ (i : ι), i∈s∨f₁i=0 } f₂: (i : ι) → βi s₁: Trunc{ s // ∀ (i : ι), i∈s∨f₂i=0 } h: f₁=f₂
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) x✝¹, x✝: Dfinsuppfun i => βi f₁: (i : ι) → βi s₁✝, s₁: Trunc{ s // ∀ (i : ι), i∈s∨f₁i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) x✝¹, x✝: Dfinsuppfun i => βi f₁: (i : ι) → βi s₁✝: Trunc{ s // ∀ (i : ι), i∈s∨f₁i=0 } f₂: (i : ι) → βi s₁: Trunc{ s // ∀ (i : ι), i∈s∨f₂i=0 } h: f₁=f₂
Dfinsupp.zero_apply: ∀ {ι : Type u} {β : ι → Type v} [inst : (i : ι) → Zero (βi)] (i : ι), ↑0i=0
Dfinsupp.zero_apply
/-- The composition of `f : β₁ → β₂` and `g : Π₀ i, β₁ i` is
`mapRange f hf g : Π₀ i, β₂ i`, well defined when `f 0 = 0`.
This preserves the structure on `f`, and exists in various bundled forms for when `f` is itself
bundled:
* `Dfinsupp.mapRange.addMonoidHom`
* `Dfinsupp.mapRange.addEquiv`
* `dfinsupp.mapRange.linearMap`
* `dfinsupp.mapRange.linearEquiv`
-/
def
mapRange: {ι : Type u} →
{β₁ : ι → Type v₁} →
{β₂ : ι → Type v₂} →
[inst : (i : ι) → Zero (β₁i)] →
[inst_1 : (i : ι) → Zero (β₂i)] →
(f : (i : ι) → β₁i → β₂i) → (∀ (i : ι), fi0=0) → (Dfinsuppfun i => β₁i) → Dfinsuppfun i => β₂i
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 x: Dfinsuppfun i => β₁i s: { s // ∀ (i : ι), i∈s∨toFunxi=0 } i: ι h: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 x: Dfinsuppfun i => β₁i s: { s // ∀ (i : ι), i∈s∨toFunxi=0 } i: ι h: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 x: Dfinsuppfun i => β₁i s: { s // ∀ (i : ι), i∈s∨toFunxi=0 } i: ι h: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 x: Dfinsuppfun i => β₁i s: { s // ∀ (i : ι), i∈s∨toFunxi=0 } i: ι h: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 x: Dfinsuppfun i => β₁i s: { s // ∀ (i : ι), i∈s∨toFunxi=0 } i: ι h: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) h: optParam (∀ (i : ι), id0=0) (_ : ∀ (i : ι), id0=id0) g: Dfinsuppfun i => β₁i
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) h: optParam (∀ (i : ι), id0=0) (_ : ∀ (i : ι), id0=id0) g: Dfinsuppfun i => β₁i i✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) h: optParam (∀ (i : ι), id0=0) (_ : ∀ (i : ι), id0=id0) g: Dfinsuppfun i => β₁i
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi i✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi i✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi i✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i f₂: (i : ι) → βi → β₁i hf: ∀ (i : ι), fi0=0 hf₂: ∀ (i : ι), f₂i0=0 h: ∀ (i : ι), (fi∘f₂i) 0=0 g: Dfinsuppfun i => βi
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0 i✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i hf: ∀ (i : ι), fi0=0
Dfinsupp.mapRange_zero: ∀ {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [inst : (i : ι) → Zero (β₁i)] [inst_1 : (i : ι) → Zero (β₂i)]
(f : (i : ι) → β₁i → β₂i) (hf : ∀ (i : ι), fi0=0), mapRangefhf0=0
Dfinsupp.mapRange_zero
/-- Let `f i` be a binary operation `β₁ i → β₂ i → β i` such that `f i 0 0 = 0`.
Then `zipWith f hf` is a binary operation `Π₀ i, β₁ i → Π₀ i, β₂ i → Π₀ i, β i`. -/
def
zipWith: {ι : Type u} →
{β : ι → Type v} →
{β₁ : ι → Type v₁} →
{β₂ : ι → Type v₂} →
[inst : (i : ι) → Zero (βi)] →
[inst_1 : (i : ι) → Zero (β₁i)] →
[inst_2 : (i : ι) → Zero (β₂i)] →
(f : (i : ι) → β₁i → β₂i → βi) →
(∀ (i : ι), fi00=0) → (Dfinsuppfun i => β₁i) → (Dfinsuppfun i => β₂i) → Dfinsuppfun i => βi
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 }
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 }
{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: i∈↑xs
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: i∈↑ys
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i
Trunc{ s // ∀ (i : ι), i∈s∨(fun i => fi (↑xi) (↑yi)) i=0 }
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝²: (i : ι) → Zero (βi) inst✝¹: (i : ι) → Zero (β₁i) inst✝: (i : ι) → Zero (β₂i) f: (i : ι) → β₁i → β₂i → βi hf: ∀ (i : ι), fi00=0 x: Dfinsuppfun i => β₁i y: Dfinsuppfun i => β₂i xs: { s // ∀ (i : ι), i∈s∨toFunxi=0 } ys: { s // ∀ (i : ι), i∈s∨toFunyi=0 } i: ι h1: ↑xi=0 h2: ↑yi=0
Dfinsupp.piecewise_apply: ∀ {ι : Type u} {β : ι → Type v} [inst : (i : ι) → Zero (βi)] (x y : Dfinsuppfun i => βi) (s : Setι)
[inst_1 : (i : ι) → Decidable (i∈s)] (i : ι), ↑(piecewisexys) i=if i∈s then ↑xi else ↑yi
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝³: (i : ι) → Zero (βi) inst✝²: (i : ι) → Zero (β₁i) inst✝¹: (i : ι) → Zero (β₂i) x, y: Dfinsuppfun i => βi s: Setι inst✝: (i : ι) → Decidable (i∈s)
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝³: (i : ι) → Zero (βi) inst✝²: (i : ι) → Zero (β₁i) inst✝¹: (i : ι) → Zero (β₂i) x, y: Dfinsuppfun i => βi s: Setι inst✝: (i : ι) → Decidable (i∈s) x✝: ι
ι: Type u γ: Type w β: ι → Type v β₁: ι → Type v₁ β₂: ι → Type v₂ inst✝³: (i : ι) → Zero (βi) inst✝²: (i : ι) → Zero (β₁i) inst✝¹: (i : ι) → Zero (β₂i) x, y: Dfinsuppfun i => βi s: Setι inst✝: (i : ι) → Decidable (i∈s)
coe_finset_sum: ∀ {ι : Type u} {β : ι → Type v} {α : Type u_1} [inst : (i : ι) → AddCommMonoid (βi)] (s : Finsetα)
(g : α → Dfinsuppfun i => βi), ↑(∑ a in s, ga)=∑ a in s, ↑(ga)
Dfinsupp.coe_finset_sum: ∀ {ι : Type u} {β : ι → Type v} {α : Type u_1} [inst : (i : ι) → AddCommMonoid (βi)] (s : Finsetα)
(g : α → Dfinsuppfun i => βi), ↑(∑ a in s, ga)=∑ a in s, ↑(ga)
Dfinsupp.coe_finset_sum
@[simp]
theorem
finset_sum_apply: ∀ {ι : Type u} {β : ι → Type v} {α : Type u_1} [inst : (i : ι) → AddCommMonoid (βi)] (s : Finsetα)
(g : α → Dfinsuppfun i => βi) (i : ι), ↑(∑ a in s, ga) i=∑ a in s, ↑(ga) i
Dfinsupp.finset_sum_apply: ∀ {ι : Type u} {β : ι → Type v} {α : Type u_1} [inst : (i : ι) → AddCommMonoid (βi)] (s : Finsetα)
(g : α → Dfinsuppfun i => βi) (i : ι), ↑(∑ a in s, ga) i=∑ a in s, ↑(ga) i