Module docstring
{"# Pointwise operations on filters
This file defines pointwise operations on filters. This is useful because usual algebraic operations
distribute over pointwise operations. For example,
* (f₁ * f₂).map m = f₁.map m * f₂.map m
* 𝓝 (x * y) = 𝓝 x * 𝓝 y
Main declarations
0(Filter.instZero): Pure filter at0 : α, or alternatively principal filter at0 : Set α.1(Filter.instOne): Pure filter at1 : α, or alternatively principal filter at1 : Set α.f + g(Filter.instAdd): Addition, filter generated by alls + twheres ∈ fandt ∈ g.f * g(Filter.instMul): Multiplication, filter generated by alls * twheres ∈ fandt ∈ g.-f(Filter.instNeg): Negation, filter of all-swheres ∈ f.f⁻¹(Filter.instInv): Inversion, filter of alls⁻¹wheres ∈ f.f - g(Filter.instSub): Subtraction, filter generated by alls - twheres ∈ fandt ∈ g.f / g(Filter.instDiv): Division, filter generated by alls / twheres ∈ fandt ∈ g.f +ᵥ g(Filter.instVAdd): Scalar addition, filter generated by alls +ᵥ twheres ∈ fandt ∈ g.f -ᵥ g(Filter.instVSub): Scalar subtraction, filter generated by alls -ᵥ twheres ∈ fandt ∈ g.f • g(Filter.instSMul): Scalar multiplication, filter generated by alls • twheres ∈ fandt ∈ g.a +ᵥ f(Filter.instVAddFilter): Translation, filter of alla +ᵥ swheres ∈ f.a • f(Filter.instSMulFilter): Scaling, filter of alla • swheres ∈ f.
For α a semigroup/monoid, Filter α is a semigroup/monoid.
As an unfortunate side effect, this means that n • f, where n : ℕ, is ambiguous between
pointwise scaling and repeated pointwise addition. See note [pointwise nat action].
Implementation notes
We put all instances in the locale Pointwise, so that these instances are not available by
default. Note that we do not mark them as reducible (as argued by note [reducible non-instances])
since we expect the locale to be open whenever the instances are actually used (and making the
instances reducible changes the behavior of simp).
Tags
filter multiplication, filter addition, pointwise addition, pointwise multiplication,
","### 0/1 as filters ","### Filter negation/inversion ","### Filter addition/multiplication ","### Filter subtraction/division ","Note that Filter α is not a Distrib because f * g + f * h has cross terms that f * (g + h)
lacks.
","Note that Filter is not a MulZeroClass because 0 * ⊥ ≠ 0. ","Note that Filter α is not a group because f / f ≠ 1 in general ","### Scalar addition/multiplication of filters ","### Scalar subtraction of filters ","### Translation/scaling of filters ","Note that we have neither SMulWithZero α (Filter β) nor SMulWithZero (Filter α) (Filter β)
because 0 * ⊥ ≠ 0.
"}