Split a box along one or more hyperplanes #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Main definitions #
A hyperplane {x : ι → ℝ | x i = a}
splits a rectangular box I : box_integral.box ι
into two
smaller boxes. If a ∉ Ioo (I.lower i, I.upper i)
, then one of these boxes is empty, so it is not a
box in the sense of box_integral.box
.
We introduce the following definitions.
box_integral.box.split_lower I i a
andbox_integral.box.split_upper I i a
are these boxes (aswith_bot (box_integral.box ι)
);box_integral.prepartition.split I i a
is the partition ofI
made of these two boxes (or of one boxI
if one of these boxes is empty);box_integral.prepartition.split_many I s
, wheres : finset (ι × ℝ)
is a finite set of hyperplanes{x : ι → ℝ | x i = a}
encoded as pairs(i, a)
, is the partition ofI
made by cutting it along all the hyperplanes ins
.
Main results #
The main result box_integral.prepartition.exists_Union_eq_diff
says that any prepartition π
of
I
admits a prepartition π'
of I
that covers exactly I \ π.Union
. One of these prepartitions
is available as box_integral.prepartition.compl
.
Tags #
rectangular box, partition, hyperplane
Given a box I
and x ∈ (I.lower i, I.upper i)
, the hyperplane {y : ι → ℝ | y i = x}
splits
I
into two boxes. box_integral.box.split_lower I i x
is the box I ∩ {y | y i ≤ x}
(if it is nonempty). As usual, we represent a box that may be empty as
with_bot (box_integral.box ι)
.
Equations
- I.split_lower i x = box_integral.box.mk' I.lower (function.update I.upper i (linear_order.min x (I.upper i)))
Given a box I
and x ∈ (I.lower i, I.upper i)
, the hyperplane {y : ι → ℝ | y i = x}
splits
I
into two boxes. box_integral.box.split_upper I i x
is the box I ∩ {y | x < y i}
(if it is nonempty). As usual, we represent a box that may be empty as
with_bot (box_integral.box ι)
.
Equations
- I.split_upper i x = box_integral.box.mk' (function.update I.lower i (linear_order.max x (I.lower i))) I.upper
The partition of I : box ι
into the boxes I ∩ {y | y ≤ x i}
and I ∩ {y | x i < y}
.
One of these boxes can be empty, then this partition is just the single-box partition ⊤
.
Equations
- box_integral.prepartition.split I i x = box_integral.prepartition.of_with_bot {I.split_lower i x, I.split_upper i x} _ _
If x ∉ (I.lower i, I.upper i)
, then the hyperplane {y | y i = x}
does not split I
.
Split a box along many hyperplanes {y | y i = x}
; each hyperplane is given by the pair
(i x)
.
Equations
- box_integral.prepartition.split_many I s = s.inf (λ (p : ι × ℝ), box_integral.prepartition.split I p.fst p.snd)
Let s : finset (ι × ℝ)
be a set of hyperplanes {x : ι → ℝ | x i = r}
in ι → ℝ
encoded as
pairs (i, r)
. Suppose that this set contains all faces of a box J
. The hyperplanes of s
split
a box I
into subboxes. Let Js
be one of them. If J
and Js
have nonempty intersection, then
Js
is a subbox of J
.
Let s
be a finite set of boxes in ℝⁿ = ι → ℝ
. Then there exists a finite set t₀
of
hyperplanes (namely, the set of all hyperfaces of boxes in s
) such that for any t ⊇ t₀
and any box I
in ℝⁿ
the following holds. The hyperplanes from t
split I
into subboxes.
Let J'
be one of them, and let J
be one of the boxes in s
. If these boxes have a nonempty
intersection, then J' ≤ J
.
If π
is a partition of I
, then there exists a finite set s
of hyperplanes such that
split_many I s ≤ π
.
For every prepartition π
of I
there exists a prepartition that covers exactly
I \ π.Union
.
If π
is a prepartition of I
, then π.compl
is a prepartition of I
such that π.compl.Union = I \ π.Union
.
Since the definition of box_integral.prepartition.compl
uses Exists.some
,
the result depends only on π.Union
.