Documentation

Analysis.MeasureTheory.Section_1_1_1

Instances For

    Coerces a BoundedInterval to its underlying set of real numbers.

    Equations
    Instances For
      @[implicit_reducible]

      Enables coercion from BoundedInterval to Set ℝ.

      Equations
      @[implicit_reducible]

      The empty BoundedInterval is represented as the degenerate open interval (0,0).

      Equations
      @[simp]

      The empty BoundedInterval coerces to the empty set.

      @[implicit_reducible]

      This is to make Finsets of BoundedIntervals work properly

      Equations
      @[simp]
      theorem BoundedInterval.set_Ioo (a b : ℝ) :
      ↑(Ioo a b) = Set.Ioo a b

      Simp lemmas for coercing each BoundedInterval constructor to Set ℝ.

      @[simp]
      theorem BoundedInterval.set_Icc (a b : ℝ) :
      ↑(Icc a b) = Set.Icc a b
      @[simp]
      theorem BoundedInterval.set_Ioc (a b : ℝ) :
      ↑(Ioc a b) = Set.Ioc a b
      @[simp]
      theorem BoundedInterval.set_Ico (a b : ℝ) :
      ↑(Ico a b) = Set.Ico a b

      Some helpful general lemmas about BoundedInterval

      theorem BoundedInterval.Icc_eq_endpoints {a₁ b₁ a₂ b₂ : ℝ} (h : Set.Icc a₁ b₁ = Set.Icc a₂ b₂) (ha₁b₁ : a₁ ≤ b₁) (ha₂b₂ : a₂ ≤ b₂) :
      a₁ = a₂ ∧ b₁ = b₂

      Extract endpoints from BoundedInterval.Icc equality

      theorem BoundedInterval.Ioo_ne_Icc {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ < b₁) (ha₂b₂ : a₂ ≤ b₂) :
      Set.Ioo a₁ b₁ ≠ Set.Icc a₂ b₂

      BoundedInterval.Ioo cannot equal BoundedInterval.Icc

      theorem BoundedInterval.Ioo_ne_Ioc {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ < b₁) (ha₂b₂ : a₂ < b₂) :
      Set.Ioo a₁ b₁ ≠ Set.Ioc a₂ b₂

      BoundedInterval.Ioo cannot equal BoundedInterval.Ioc

      theorem BoundedInterval.Ioo_ne_Ico {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ < b₁) (ha₂b₂ : a₂ < b₂) :
      Set.Ioo a₁ b₁ ≠ Set.Ico a₂ b₂

      BoundedInterval.Ioo cannot equal BoundedInterval.Ico

      theorem BoundedInterval.Ioc_ne_Ico {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ < b₁) (ha₂b₂ : a₂ < b₂) :
      Set.Ioc a₁ b₁ ≠ Set.Ico a₂ b₂

      BoundedInterval.Ioc cannot equal BoundedInterval.Ico

      theorem BoundedInterval.Icc_ne_Ioc {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ ≤ b₁) (ha₂b₂ : a₂ < b₂) :
      Set.Icc a₁ b₁ ≠ Set.Ioc a₂ b₂

      BoundedInterval.Icc cannot equal BoundedInterval.Ioc

      theorem BoundedInterval.Icc_ne_Ico {a₁ b₁ a₂ b₂ : ℝ} (ha₁b₁ : a₁ ≤ b₁) (ha₂b₂ : a₂ < b₂) :
      Set.Icc a₁ b₁ ≠ Set.Ico a₂ b₂

      BoundedInterval.Icc cannot equal BoundedInterval.Ico

      theorem BoundedInterval.toSet_injective_of_nonempty {I J : BoundedInterval} (hI : (↑I).Nonempty) (hJ : (↑J).Nonempty) (h_eq : ↑I = ↑J) :
      I = J

      BoundedInterval.toSet is injective for non-empty intervals

      A witness for lowerBound of upperBounds

      Equations
      • ⋯ = ⋯
      Instances For

        A witness for upperBound of lowerBounds

        Equations
        • ⋯ = ⋯
        Instances For
          theorem lt_sSup_of_ne_sSup {X : Set ℝ} {x b : ℝ} (_hBddAbove : BddAbove X) (_hb : b = sSup X) (hb_notin : b ∉ X) (hx : x ∈ X) (hx_le_b : x ≤ b) :
          x < b

          Show x < b when b = sSup X and b ∉ X

          theorem sInf_lt_of_ne_sInf {X : Set ℝ} {a x : ℝ} (_hBddBelow : BddBelow X) (_ha : a = sInf X) (ha_notin : a ∉ X) (hx : x ∈ X) (ha_le_x : a ≤ x) :
          a < x

          Show a < x when a = sInf X and a ∉ X

          theorem mem_of_mem_Icc_ordConnected {X : Set ℝ} (hOrdConn : ∀ ⦃x : ℝ⦄, x ∈ X → ∀ ⦃y : ℝ⦄, y ∈ X → Set.Icc x y ⊆ X) {x w z : ℝ} (hw : w ∈ X) (hz : z ∈ X) (hx : x ∈ Set.Icc w z) :
          x ∈ X

          Use order-connectedness to show x ∈ X when x ∈ [w, z] and w, z ∈ X

          A set of reals is bounded and order-connected if and only if it equals some bounded interval.

          theorem BoundedInterval.inter (I J : BoundedInterval) :
          ∃ (K : BoundedInterval), ↑I ∩ ↑J = ↑K

          The intersection of two bounded intervals is again a bounded interval.

          @[implicit_reducible]

          Instance enabling ∩ notation for BoundedIntervals.

          Equations
          @[simp]
          theorem BoundedInterval.inter_eq (I J : BoundedInterval) :
          ↑(I ∩ J) = ↑I ∩ ↑J

          The intersection of BoundedIntervals equals the set-theoretic intersection.

          @[implicit_reducible]

          Instance enabling ∈ notation for membership in BoundedInterval.

          Equations
          @[simp]
          theorem BoundedInterval.mem_iff (I : BoundedInterval) (x : ℝ) :
          x ∈ I ↔ x ∈ ↑I

          Membership in BoundedInterval is equivalent to membership in its underlying set.

          @[implicit_reducible]

          Instance enabling ⊆ notation for BoundedIntervals.

          Equations
          @[simp]
          theorem BoundedInterval.subset_iff (I J : BoundedInterval) :
          I ⊆ J ↔ ↑I ⊆ ↑J

          Subset of BoundedIntervals is equivalent to subset of their underlying sets.

          @[reducible, inline]

          Extracts the left endpoint of a bounded interval.

          Equations
          Instances For
            @[reducible, inline]

            Extracts the right endpoint of a bounded interval.

            Equations
            Instances For

              Any nonempty BoundedInterval has a ≤ b

              Any bounded interval is contained in the closed interval with the same endpoints.

              The open interval with the same endpoints is contained in any bounded interval.

              @[reducible, inline]

              Definition 1.1.1 (boxes): The length of an interval is max(b - a, 0).

              Equations
              Instances For

                Length is always non-negative

                Using ||ₗ subscript here to not override ||

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  structure Box (d : ℕ) :

                  A d-dimensional box is a Cartesian product of d bounded intervals.

                  Instances For
                    theorem Box.ext_iff {d : ℕ} {x y : Box d} :
                    x = y ↔ x.side = y.side
                    theorem Box.ext {d : ℕ} {x y : Box d} (side : x.side = y.side) :
                    x = y
                    def Box.toSet {d : ℕ} (B : Box d) :

                    Coerces a Box to its underlying set in d-dimensional Euclidean space.

                    Equations
                    Instances For
                      @[simp]
                      theorem Box.mem_toSet {d : ℕ} {B : Box d} {x : EuclideanSpace' d} :
                      x ∈ ↑B ↔ ∀ (i : Fin d), x.ofLp i ∈ ↑(B.side i)
                      @[implicit_reducible]
                      instance Box.inst_coeSet {d : ℕ} :

                      Enables coercion from Box d to Set (EuclideanSpace' d).

                      Equations
                      @[implicit_reducible]
                      noncomputable instance Box.decidableEq {d : ℕ} :

                      This is to make Finsets of Boxes work properly.

                      Equations
                      @[reducible, inline]

                      Lifts a 1-dimensional interval to a 1-dimensional box.

                      Equations
                      • ↑I = { side := fun (x : Fin 1) => I }
                      Instances For
                        @[implicit_reducible]

                        Enables coercion from BoundedInterval to Box 1.

                        Equations
                        @[simp]
                        theorem BoundedInterval.toBox_inj {I J : BoundedInterval} :
                        ↑I = ↑J ↔ I = J

                        Coercing to Box 1 is injective: equal boxes implies equal intervals.

                        @[simp]

                        A 1D box's set equals the image of the interval under the Real ≃ EuclideanSpace' 1 equivalence.

                        @[reducible, inline]
                        abbrev Box.volume {d : ℕ} (B : Box d) :

                        Definition 1.1.1 (boxes): The volume of a box is the product of its side lengths.

                        Equations
                        Instances For

                          Using ||ᵥ subscript here to not override ||

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem Box.volume_eq_zero_of_empty {d : ℕ} (B : Box d) (h : ↑B = ∅) :
                            B.volume = 0

                            Helper lemma: If a box is empty, its volume is zero

                            theorem Box.volume_singleton {d : ℕ} (hd : 0 < d) (x : EuclideanSpace' d) :
                            { side := fun (i : Fin d) => BoundedInterval.Icc (x.ofLp i) (x.ofLp i) }.volume = 0

                            A box with all degenerate sides [x, x] has volume 0 when d > 0

                            theorem Box.side_nonempty_of_nonempty {d : ℕ} (B : Box d) (hB : (↑B).Nonempty) (i : Fin d) :
                            (↑(B.side i)).Nonempty

                            A nonempty box has nonempty sides at each dimension

                            @[simp]

                            The volume of a 1D box equals the length of the underlying interval.

                            theorem Box.toSet_injective_of_nonempty {d : ℕ} {B₁ B₂ : Box d} (h₁ : (↑B₁).Nonempty) (h₂ : (↑B₂).Nonempty) (h_eq : ↑B₁ = ↑B₂) :
                            B₁ = B₂

                            Box.toSet is injective on non-empty boxes

                            @[reducible, inline]
                            abbrev IsElementary {d : ℕ} (E : Set (EuclideanSpace' d)) :

                            A set is elementary if it can be expressed as a finite union of boxes.

                            Equations
                            Instances For
                              theorem IsElementary.box {d : ℕ} (B : Box d) :

                              Every box is an elementary set (witnessed by the singleton finset).

                              theorem IsElementary.union {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) :

                              Exercise 1.1.1 (Boolean closure): The union of two elementary sets is elementary.

                              The empty set is elementary.

                              theorem IsElementary.union' {d : ℕ} {S : Finset (Set (EuclideanSpace' d))} (hE : ∀ E ∈ S, IsElementary E) :
                              IsElementary (⋃ E ∈ S, E)

                              The union of a finset of elementary sets is elementary.

                              theorem Box.inter {d : ℕ} (B₁ B₂ : Box d) :
                              ∃ (B : Box d), ↑B = ↑B₁ ∩ ↑B₂

                              The intersection of two boxes is a box: intersect the sides coordinatewise.

                              theorem IsElementary.inter {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) :

                              Exercise 1.1.1 (Boolean closure): The intersection of two elementary sets is elementary.

                              def BoundedInterval.mk' (a b : ℝ) (lclosed uclosed : Bool) :

                              The bounded interval with the given endpoints, open or closed at each end as specified.

                              Equations
                              Instances For

                                Whether a bounded interval contains its left endpoint.

                                Equations
                                Instances For

                                  Whether a bounded interval contains its right endpoint.

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem BoundedInterval.mk'_a (a b : ℝ) (lclosed uclosed : Bool) :
                                    (mk' a b lclosed uclosed).a = a
                                    @[simp]
                                    theorem BoundedInterval.mk'_b (a b : ℝ) (lclosed uclosed : Bool) :
                                    (mk' a b lclosed uclosed).b = b
                                    @[simp]
                                    theorem BoundedInterval.mk'_lclosed (a b : ℝ) (lclosed uclosed : Bool) :
                                    (mk' a b lclosed uclosed).lclosed = lclosed
                                    @[simp]
                                    theorem BoundedInterval.mk'_uclosed (a b : ℝ) (lclosed uclosed : Bool) :
                                    (mk' a b lclosed uclosed).uclosed = uclosed
                                    theorem BoundedInterval.sdiff (I J : BoundedInterval) :
                                    ∃ (K₁ : BoundedInterval) (K₂ : BoundedInterval), ↑I \ ↑J = ↑K₁ ∪ ↑K₂

                                    The set difference of two bounded intervals is the union of two bounded intervals: the part of the first below the second, and the part above it.

                                    theorem Box.sdiff {d : ℕ} (B C : Box d) :
                                    IsElementary (↑B \ ↑C)

                                    The difference of two boxes is elementary: a point of the difference leaves the second box in some coordinate, and in that coordinate the difference of the two sides is a union of two intervals.

                                    theorem IsElementary.sdiff {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) :

                                    Exercise 1.1.1 (Boolean closure): The set difference of two elementary sets is elementary.

                                    Exercise 1.1.1 (Boolean closure): The symmetric difference of two elementary sets is elementary.

                                    theorem BoundedInterval.translate (I : BoundedInterval) (c : ℝ) :
                                    ↑(mk' (I.a + c) (I.b + c) I.lclosed I.uclosed) = ↑I + {c}

                                    Translating a bounded interval gives a bounded interval with the same open/closed ends.

                                    theorem Box.translate {d : ℕ} (B : Box d) (x : EuclideanSpace' d) :
                                    ∃ (B' : Box d), ↑B' = ↑B + {x}

                                    Translating a box gives a box.

                                    Exercise 1.1.1 (Boolean closure): Translation of an elementary set is elementary.

                                    theorem BoundedInterval.partition (S : Finset BoundedInterval) :
                                    ∃ (T : Finset BoundedInterval), (↑T).PairwiseDisjoint toSet ∧ ∀ I ∈ S, ∃ (U : Set ↥T), ↑I = ⋃ J ∈ U, ↑↑J

                                    A sublemma for proving Lemma 1.1.2(i): Any finset of intervals admits a common refinement into pairwise disjoint sub-intervals.

                                    theorem Box.partition {d : ℕ} (S : Finset (Box d)) :
                                    ∃ (T : Finset (Box d)), (↑T).PairwiseDisjoint toSet ∧ ∀ I ∈ S, ∃ (U : Set ↥T), ↑I = ⋃ J ∈ U, ↑↑J

                                    Lemma 1.1.2(i): Any finset of boxes admits a common refinement into pairwise disjoint sub-boxes.

                                    theorem IsElementary.partition {d : ℕ} {E : Set (EuclideanSpace' d)} (hE : IsElementary E) :
                                    ∃ (T : Finset (Box d)), (↑T).PairwiseDisjoint Box.toSet ∧ E = ⋃ J ∈ T, ↑J

                                    Every elementary set can be partitioned into pairwise disjoint boxes.

                                    theorem BoundedInterval.sample_finite (I : BoundedInterval) {N : ℕ} (hN : N ≠ 0) :
                                    Finite ↑(↑I ∩ Set.range fun (n : ℤ) => (↑N)⁻¹ * ↑n)

                                    Helper lemma for Lemma 1.1.2(ii): The set of lattice points (multiples of 1/N) in an interval is finite.

                                    theorem BoundedInterval.length_eq (I : BoundedInterval) :
                                    Filter.Tendsto (fun (N : ℕ) => (↑N)⁻¹ * ↑(Nat.card ↑(↑I ∩ Set.range fun (n : ℤ) => (↑N)⁻¹ * ↑n))) Filter.atTop (nhds I.length)

                                    Exercise for Lemma 1.1.2(ii): Interval length equals the limit of lattice point counts scaled by 1/N.

                                    def Box.sample_congr {d : ℕ} (B : Box d) (N : ℕ) :
                                    ↑(↑B ∩ Set.range fun (n : Fin d → ℤ) => WithLp.toLp 2 fun (i : Fin d) => (↑N)⁻¹ * ↑(n i)) ≃ ((i : Fin d) → ↑(↑(B.side i) ∩ Set.range fun (n : ℤ) => (↑N)⁻¹ * ↑n))

                                    Lattice points in a box decompose as a product of lattice points in each interval side.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For
                                      theorem Box.sample_finite {d : ℕ} (B : Box d) {N : ℕ} (hN : N ≠ 0) :
                                      Finite ↑(↑B ∩ Set.range fun (n : Fin d → ℤ) => WithLp.toLp 2 fun (i : Fin d) => (↑N)⁻¹ * ↑(n i))

                                      Helper lemma for Lemma 1.1.2(ii): The set of lattice points in a box is finite.

                                      theorem Box.vol_eq {d : ℕ} (B : Box d) :
                                      Filter.Tendsto (fun (N : ℕ) => ↑N ^ (-↑d) * ↑(Nat.card ↑(↑B ∩ Set.range fun (n : Fin d → ℤ) => WithLp.toLp 2 fun (i : Fin d) => (↑N)⁻¹ * ↑(n i)))) Filter.atTop (nhds B.volume)

                                      Helper lemma for Lemma 1.1.2(ii): Box volume equals the limit of lattice point counts scaled by N^(-d).

                                      theorem Box.sum_vol_eq {d : ℕ} {T : Finset (Box d)} (hT : (↑T).PairwiseDisjoint toSet) :
                                      Filter.Tendsto (fun (N : ℕ) => ↑N ^ (-↑d) * ↑(Nat.card ↑((⋃ B ∈ T, ↑B) ∩ Set.range fun (n : Fin d → ℤ) => WithLp.toLp 2 fun (i : Fin d) => (↑N)⁻¹ * ↑(n i)))) Filter.atTop (nhds (∑ B ∈ T, B.volume))

                                      Lemma 1.1.2(ii), helper lemma: Sum of volumes equals limit of lattice counts over a disjoint union.

                                      theorem Box.measure_uniq {d : ℕ} {T₁ T₂ : Finset (Box d)} (hT₁ : (↑T₁).PairwiseDisjoint toSet) (hT₂ : (↑T₂).PairwiseDisjoint toSet) (heq : ⋃ B ∈ T₁, ↑B = ⋃ B ∈ T₂, ↑B) :
                                      ∑ B ∈ T₁, B.volume = ∑ B ∈ T₂, B.volume

                                      Lemma 1.1.2(ii): Two disjoint partitions of the same set have equal sums of volumes.

                                      @[reducible, inline]
                                      noncomputable abbrev IsElementary.measure {d : ℕ} {E : Set (EuclideanSpace' d)} (hE : IsElementary E) :

                                      The elementary measure of a set, defined as the sum of volumes over a disjoint partition.

                                      Equations
                                      Instances For
                                        theorem IsElementary.measure_eq {d : ℕ} {E : Set (EuclideanSpace' d)} (hE : IsElementary E) {T : Finset (Box d)} (hT : (↑T).PairwiseDisjoint Box.toSet) (heq : E = ⋃ B ∈ T, ↑B) :
                                        hE.measure = ∑ B ∈ T, B.volume

                                        The measure equals the sum of volumes for any disjoint box partition of the set.

                                        theorem Box.measure_uniq' {d : ℕ} {T₁ T₂ : Finset (Box d)} (hT₁ : (↑T₁).PairwiseDisjoint toSet) (hT₂ : (↑T₂).PairwiseDisjoint toSet) (heq : ⋃ B ∈ T₁, ↑B = ⋃ B ∈ T₂, ↑B) :
                                        ∑ B ∈ T₁, B.volume = ∑ B ∈ T₂, B.volume

                                        Exercise 1.1.2: give an alternate proof of this proposition by showing that the two partitions T₁, T₂ admit a mutual refinement into boxes arising from taking Cartesian products of elements from finite collections of disjoint intervals.

                                        Elementary measure is always non-negative.

                                        theorem IsElementary.measure_of_disjUnion {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) (hdisj : Disjoint E F) :

                                        Measure is additive on disjoint elementary sets: μ(E ∪ F) = μ(E) + μ(F).

                                        theorem IsElementary.measure_irrelevant {d : ℕ} {E : Set (EuclideanSpace' d)} (h₁ h₂ : IsElementary E) :
                                        h₁.measure = h₂.measure

                                        Two different proofs that a set is elementary yield the same measure.

                                        theorem IsElementary.measure_eq_of_set_eq {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) (h : E = F) :

                                        If two elementary sets are equal, their measures are equal.

                                        theorem IsElementary.union'_empty_eq {d : ℕ} :
                                        ⋃ E ∈ ∅, E = ∅

                                        The union over an empty finset of elementary sets is the empty set.

                                        theorem IsElementary.sum_insert_split {d : ℕ} {a : Set (EuclideanSpace' d)} {S' : Finset (Set (EuclideanSpace' d))} (ha : a ∉ S') (hE : ∀ E ∈ insert a S', IsElementary E) :
                                        ∑ E : ↥(insert a S'), ⋯.measure = ⋯.measure + ∑ E : ↥S', ⋯.measure

                                        Measure of a sum over insert a S' equals the measure of a plus the measure of the sum over S'.

                                        theorem IsElementary.measure_of_disjUnion' {d : ℕ} {S : Finset (Set (EuclideanSpace' d))} (hE : ∀ E ∈ S, IsElementary E) (hdisj : (↑S).PairwiseDisjoint id) :
                                        ⋯.measure = ∑ E : ↥S, ⋯.measure

                                        Measure is additive on pairwise disjoint finsets of elementary sets.

                                        @[simp]

                                        The empty set has measure zero.

                                        @[simp]
                                        theorem IsElementary.measure_of_box {d : ℕ} (B : Box d) :

                                        The measure of a single box equals its volume.

                                        theorem IsElementary.measure_mono {d : ℕ} {E F : Set (EuclideanSpace' d)} (hE : IsElementary E) (hF : IsElementary F) (hcont : E ⊆ F) :

                                        Elementary measure is monotone: if E ⊆ F then μ(E) ≤ μ(F).

                                        Subadditivity of measure on unions: μ(E ∪ F) ≤ μ(E) + μ(F).

                                        theorem IsElementary.measure_of_union' {d : ℕ} {S : Finset (Set (EuclideanSpace' d))} (hE : ∀ E ∈ S, IsElementary E) :
                                        ⋯.measure ≤ ∑ E : ↥S, ⋯.measure

                                        Subadditivity of measure on finset unions: μ(⋃ S) ≤ ∑ μ(E) for E ∈ S.

                                        theorem BoundedInterval.length_of_translate (I : BoundedInterval) (c : ℝ) :
                                        ∃ (I' : BoundedInterval), ↑I' = ↑I + {c} ∧ I'.length = I.length

                                        Helper: Translation preserves interval length

                                        theorem Box.volume_of_translate {d : ℕ} (B : Box d) (x : EuclideanSpace' d) :
                                        ∃ (B' : Box d), ↑B' = ↑B + {x} ∧ B'.volume = B.volume

                                        Helper: Translation preserves box volume

                                        theorem Set.translate_inj {d : ℕ} (x : EuclideanSpace' d) (S₁ S₂ : Set (EuclideanSpace' d)) (h_eq : S₁ + {x} = S₂ + {x}) :
                                        S₁ = S₂

                                        Translation is injective on sets: if S₁ + {x} = S₂ + {x}, then S₁ = S₂

                                        Elementary measure is translation-invariant: μ(E + {x}) = μ(E).

                                        theorem IsElementary.measure_uniq {d : ℕ} {m' : (E : Set (EuclideanSpace' d)) → IsElementary E → ℝ} (hnonneg : ∀ (E : Set (EuclideanSpace' d)) (hE : IsElementary E), m' E hE ≥ 0) (hadd : ∀ (E F : Set (EuclideanSpace' d)) (hE : IsElementary E) (hF : IsElementary F), Disjoint E F → m' (E ∪ F) ⋯ = m' E hE + m' F hF) (htrans : ∀ (E : Set (EuclideanSpace' d)) (hE : IsElementary E) (x : EuclideanSpace' d), m' (E + {x}) ⋯ = m' E hE) :
                                        ∃ c ≥ 0, ∀ (E : Set (EuclideanSpace' d)) (hE : IsElementary E), m' E hE = c * hE.measure

                                        Exercise 1.1.3 (uniqueness of elementary measure): Any non-negative, additive, translation-invariant function on elementary sets is a scalar multiple of the standard elementary measure.

                                        @[reducible, inline]
                                        abbrev Box.unit_cube (d : ℕ) :
                                        Box d

                                        The d-dimensional unit cube (0,1]^d.

                                        Equations
                                        Instances For
                                          theorem IsElementary.measure_uniq' {d : ℕ} {m' : (E : Set (EuclideanSpace' d)) → IsElementary E → ℝ} (hnonneg : ∀ (E : Set (EuclideanSpace' d)) (hE : IsElementary E), m' E hE ≥ 0) (hadd : ∀ (E F : Set (EuclideanSpace' d)) (hE : IsElementary E) (hF : IsElementary F), Disjoint E F → m' (E ∪ F) ⋯ = m' E hE + m' F hF) (htrans : ∀ (E : Set (EuclideanSpace' d)) (hE : IsElementary E) (x : EuclideanSpace' d), m' (E + {x}) ⋯ = m' E hE) (hcube : m' ↑(Box.unit_cube d) ⋯ = 1) (E : Set (EuclideanSpace' d)) (hE : IsElementary E) :
                                          m' E hE = hE.measure

                                          Any measure satisfying normalization m'(unit cube) = 1 must equal the standard elementary measure.

                                          @[reducible, inline]
                                          abbrev Box.prod {d₁ d₂ : ℕ} (B₁ : Box d₁) (B₂ : Box d₂) :
                                          Box (d₁ + d₂)

                                          The Cartesian product of two boxes is a box in the sum dimension.

                                          Equations
                                          Instances For
                                            theorem Box.prod_side {d₁ d₂ : ℕ} (B₁ : Box d₁) (B₂ : Box d₂) (i : Fin (d₁ + d₂)) :
                                            (B₁.prod B₂).side i = if h : ↑i < d₁ then B₁.side ⟨↑i, h⟩ else B₂.side ⟨↑i - d₁, ⋯⟩

                                            Unfold Box.prod on a coordinate.

                                            theorem EuclideanSpace'.prod_equiv_symm_apply_left {d₁ d₂ : ℕ} (y : EuclideanSpace' d₁) (z : EuclideanSpace' d₂) {i : ℕ} (hi : i < d₁) :
                                            ((prod_equiv d₁ d₂).symm (y, z)).ofLp ⟨i, ⋯⟩ = y.ofLp ⟨i, hi⟩

                                            Coordinate of a product vector in the first block.

                                            theorem EuclideanSpace'.prod_equiv_symm_apply_right {d₁ d₂ : ℕ} (y : EuclideanSpace' d₁) (z : EuclideanSpace' d₂) {j : ℕ} (hj : j < d₂) :
                                            ((prod_equiv d₁ d₂).symm (y, z)).ofLp ⟨d₁ + j, ⋯⟩ = z.ofLp ⟨j, hj⟩

                                            Coordinate of a product vector in the second block.

                                            theorem EuclideanSpace'.prod_equiv_apply_fst {d₁ d₂ : ℕ} (x : EuclideanSpace' (d₁ + d₂)) (i : Fin d₁) :
                                            ((prod_equiv d₁ d₂) x).1.ofLp i = x.ofLp ⟨↑i, ⋯⟩

                                            First factor of prod_equiv.

                                            theorem EuclideanSpace'.prod_equiv_apply_snd {d₁ d₂ : ℕ} (x : EuclideanSpace' (d₁ + d₂)) (j : Fin d₂) :
                                            ((prod_equiv d₁ d₂) x).2.ofLp j = x.ofLp ⟨↑j + d₁, ⋯⟩

                                            Second factor of prod_equiv. Matches toFun, which uses i + d₁.

                                            theorem Box.prod_toSet {d₁ d₂ : ℕ} (B₁ : Box d₁) (B₂ : Box d₂) :
                                            EuclideanSpace'.prod ↑B₁ ↑B₂ = ↑(B₁.prod B₂)

                                            The set of a product box is the Cartesian product of the two boxes.

                                            theorem Box.prod_injective {d₁ d₂ : ℕ} :
                                            Function.Injective fun (p : Box d₁ × Box d₂) => p.1.prod p.2

                                            Recovering the factors from a product box.

                                            theorem Box.volume_prod {d₁ d₂ : ℕ} (B₁ : Box d₁) (B₂ : Box d₂) :
                                            (B₁.prod B₂).volume = B₁.volume * B₂.volume

                                            Volume of a product box is the product of the volumes.

                                            theorem IsElementary.prod {d₁ d₂ : ℕ} {E₁ : Set (EuclideanSpace' d₁)} {E₂ : Set (EuclideanSpace' d₂)} (hE₁ : IsElementary E₁) (hE₂ : IsElementary E₂) :

                                            Exercise 1.1.4: The Cartesian product of two elementary sets is elementary.

                                            theorem Box.prod_pairwiseDisjoint {d₁ d₂ : ℕ} {S : Finset (Box d₁)} {T : Finset (Box d₂)} (hS : (↑S).PairwiseDisjoint toSet) (hT : (↑T).PairwiseDisjoint toSet) :
                                            (↑(Finset.image (fun (p : Box d₁ × Box d₂) => p.1.prod p.2) (S ×ˢ T))).PairwiseDisjoint toSet

                                            The product of two pairwise disjoint box families remains pairwise disjoint.

                                            theorem IsElementary.measure_of_prod {d₁ d₂ : ℕ} {E₁ : Set (EuclideanSpace' d₁)} {E₂ : Set (EuclideanSpace' d₂)} (hE₁ : IsElementary E₁) (hE₂ : IsElementary E₂) :
                                            ⋯.measure = hE₁.measure * hE₂.measure

                                            Measure is multiplicative on products: μ(E₁ × E₂) = μ(E₁) * μ(E₂).