Partitions of rectangular boxes in ℝⁿ
#
In this file we define (pre)partitions of rectangular boxes in ℝⁿ
. A partition of a box I
in
ℝⁿ
(see BoxIntegral.Prepartition
and BoxIntegral.Prepartition.IsPartition
) is a finite set
of pairwise disjoint boxes such that their union is exactly I
. We use boxes : Finset (Box ι)
to
store the set of boxes.
Many lemmas about box integrals deal with pairwise disjoint collections of subboxes, so we define a
structure BoxIntegral.Prepartition (I : BoxIntegral.Box ι)
that stores a collection of boxes
such that
- each box
J ∈ boxes
is a subbox ofI
; - the boxes are pairwise disjoint as sets in
ℝⁿ
.
Then we define a predicate BoxIntegral.Prepartition.IsPartition
; π.IsPartition
means that the
boxes of π
actually cover the whole I
. We also define some operations on prepartitions:
BoxIntegral.Prepartition.biUnion
: split each box of a partition into smaller boxes;BoxIntegral.Prepartition.restrict
: restrict a partition to a smaller box.
We also define a SemilatticeInf
structure on BoxIntegral.Prepartition I
for all
I : BoxIntegral.Box ι
.
Tags #
rectangular box, partition
A prepartition of I : BoxIntegral.Box ι
is a finite set of pairwise disjoint subboxes of
I
.
- boxes : Finset (BoxIntegral.Box ι)
The underlying set of boxes
- le_of_mem' : ∀ J ∈ self.boxes, J ≤ I
Each box is a sub-box of
I
- pairwiseDisjoint : (↑self.boxes).Pairwise (Disjoint on BoxIntegral.Box.toSet)
The boxes in a prepartition are pairwise disjoint.
Instances For
Equations
- BoxIntegral.Prepartition.instMembershipBox = { mem := fun (π : BoxIntegral.Prepartition I) (J : BoxIntegral.Box ι) => J ∈ π.boxes }
The singleton prepartition {J}
, J ≤ I
.
Equations
- BoxIntegral.Prepartition.single I J h = { boxes := {J}, le_of_mem' := ⋯, pairwiseDisjoint := ⋯ }
Instances For
We say that π ≤ π'
if each box of π
is a subbox of some box of π'
.
Equations
- BoxIntegral.Prepartition.instLE = { le := fun (π π' : BoxIntegral.Prepartition I) => ∀ ⦃I_1 : BoxIntegral.Box ι⦄, I_1 ∈ π → ∃ I' ∈ π', I_1 ≤ I' }
Equations
- BoxIntegral.Prepartition.partialOrder = PartialOrder.mk ⋯
Equations
- BoxIntegral.Prepartition.instOrderTop = OrderTop.mk ⋯
Equations
- BoxIntegral.Prepartition.instOrderBot = OrderBot.mk ⋯
An auxiliary lemma used to prove that the same point can't belong to more than
2 ^ Fintype.card ι
closed boxes of a prepartition.
The set of boxes of a prepartition that contain x
in their closures has cardinality
at most 2 ^ Fintype.card ι
.
Given a prepartition π : BoxIntegral.Prepartition I
, π.iUnion
is the part of I
covered by
the boxes of π
.
Equations
- π.iUnion = ⋃ J ∈ π, ↑J
Instances For
Given a prepartition π
of a box I
and a collection of prepartitions πi J
of all boxes
J ∈ π
, returns the prepartition of I
into the union of the boxes of all πi J
.
Though we only use the values of πi
on the boxes of π
, we require πi
to be a globally defined
function.
Equations
- π.biUnion πi = { boxes := π.boxes.biUnion fun (J : BoxIntegral.Box ι) => (πi J).boxes, le_of_mem' := ⋯, pairwiseDisjoint := ⋯ }
Instances For
Given a box J ∈ π.biUnion πi
, returns the box J' ∈ π
such that J ∈ πi J'
.
For J ∉ π.biUnion πi
, returns I
.
Instances For
Uniqueness property of BoxIntegral.Prepartition.biUnionIndex
.
Create a BoxIntegral.Prepartition
from a collection of possibly empty boxes by filtering out
the empty one if it exists.
Equations
- BoxIntegral.Prepartition.ofWithBot boxes le_of_mem pairwise_disjoint = { boxes := Finset.eraseNone boxes, le_of_mem' := ⋯, pairwiseDisjoint := ⋯ }
Instances For
Restrict a prepartition to a box.
Equations
- π.restrict J = BoxIntegral.Prepartition.ofWithBot (Finset.image (fun (J' : BoxIntegral.Box ι) => ↑J ⊓ ↑J') π.boxes) ⋯ ⋯
Instances For
Restricting to a larger box does not change the set of boxes. We cannot claim equality of prepartitions because they have different types.
Equations
- BoxIntegral.Prepartition.instSemilatticeInf = SemilatticeInf.mk (fun (π₁ π₂ : BoxIntegral.Prepartition I) => π₁.biUnion fun (J : BoxIntegral.Box ι) => π₂.restrict J) ⋯ ⋯ ⋯
The prepartition with boxes {J ∈ π | p J}
.
Equations
- π.filter p = { boxes := Finset.filter (fun (J : BoxIntegral.Box ι) => p J) π.boxes, le_of_mem' := ⋯, pairwiseDisjoint := ⋯ }
Instances For
Union of two disjoint prepartitions.
Equations
Instances For
The distortion of a prepartition is the maximum of the distortions of the boxes of this prepartition.
Equations
- π.distortion = π.boxes.sup BoxIntegral.Box.distortion
Instances For
A prepartition π
of I
is a partition if the boxes of π
cover the whole I
.