Documentation

Books.ConvexAnalysis_Rockafellar_1970.Chapters.Chap04.section19_part10

theorem helperForCorollary_19_3_2_polyhedral_preimage_intersection {n : } {C₁ C₂ : Set (Fin n)} (A₁ A₂ : (Fin (n + n)) →ₗ[] Fin n) (hC₁ : IsPolyhedralConvexSet n C₁) (hC₂ : IsPolyhedralConvexSet n C₂) :
IsPolyhedralConvexSet (n + n) (A₁ ⁻¹' C₁ A₂ ⁻¹' C₂)

Helper for Corollary 19.3.2: the intersection of the two split preimages is polyhedral whenever the two source sets are polyhedral.

theorem helperForCorollary_19_3_2_image_polyhedral_of_polyhedralCarrier {n : } (B : (Fin (n + n)) →ₗ[] Fin n) (P : Set (Fin (n + n))) (hPpoly : IsPolyhedralConvexSet (n + n) P) :

Helper for Corollary 19.3.2: a linear image of a polyhedral carrier in Fin (n+n) → ℝ is polyhedral in Fin n → ℝ.

Helper for Corollary 19.3.2: split projections recover the two components from Fin.append.

theorem helperForCorollary_19_3_2_append_mem_split_preimage_intersection {n : } (C₁ C₂ : Set (Fin n)) (A₁ A₂ : (Fin (n + n)) →ₗ[] Fin n) (hA₁ : A₁ = LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i)) (hA₂ : A₂ = LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i)) (u v : Fin n) (hu : u C₁) (hv : v C₂) :
Fin.append u v A₁ ⁻¹' C₁ A₂ ⁻¹' C₂

Helper for Corollary 19.3.2: appending witnesses from C₁ and C₂ produces a point in the split-preimage intersection carrier.

theorem helperForCorollary_19_3_2_sumMap_image_eq_setAdd {n : } (C₁ C₂ : Set (Fin n)) (A₁ A₂ B : (Fin (n + n)) →ₗ[] Fin n) (hA₁ : A₁ = LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i)) (hA₂ : A₂ = LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i)) (hB : B = A₁ + A₂) :
B '' (A₁ ⁻¹' C₁ A₂ ⁻¹' C₂) = C₁ + C₂

Helper for Corollary 19.3.2: the split-sum linear image of the split-preimage carrier is exactly the Minkowski sum C₁ + C₂.

theorem polyhedral_convexSet_add (n : ) (C₁ C₂ : Set (Fin n)) :

Corollary 19.3.2: If C₁ and C₂ are polyhedral convex sets in ℝ^n, then C₁ + C₂ is polyhedral.

theorem helperForCorollary_19_3_3_polyhedral_implies_convex_pair {n : } {C₁ C₂ : Set (Fin n)} (hC₁poly : IsPolyhedralConvexSet n C₁) (hC₂poly : IsPolyhedralConvexSet n C₂) :
Convex C₁ Convex C₂

Helper for Corollary 19.3.3: polyhedral convexity of each set implies convexity of both.

Helper for Corollary 19.3.3: negation preserves polyhedral convexity.

theorem helperForCorollary_19_3_3_sub_polyhedral_closed {n : } {C₁ C₂ : Set (Fin n)} (hC₁poly : IsPolyhedralConvexSet n C₁) (hC₂poly : IsPolyhedralConvexSet n C₂) :
IsPolyhedralConvexSet n (C₁ - C₂) IsClosed (C₁ - C₂)

Helper for Corollary 19.3.3: the set difference C₁ - C₂ is polyhedral and closed.

theorem helperForCorollary_19_3_3_zero_not_mem_sub_of_disjoint {n : } {C₁ C₂ : Set (Fin n)} (hdisj : Disjoint C₁ C₂) :
0C₁ - C₂

Helper for Corollary 19.3.3: disjointness excludes 0 from the set difference C₁ - C₂.

theorem helperForCorollary_19_3_3_zero_not_mem_closure_sub {n : } {C₁ C₂ : Set (Fin n)} (hdisj : Disjoint C₁ C₂) (hSubClosed : IsClosed (C₁ - C₂)) :
0closure (C₁ - C₂)

Helper for Corollary 19.3.3: disjointness and closedness of C₁ - C₂ force 0 ∉ closure (C₁ - C₂).

theorem helperForCorollary_19_3_3_apply_strongSeparation_iff {n : } {C₁ C₂ : Set (Fin n)} (hC₁ne : C₁.Nonempty) (hC₂ne : C₂.Nonempty) (hC₁conv : Convex C₁) (hC₂conv : Convex C₂) (h0notClosure : 0closure (C₁ - C₂)) :
∃ (H : Set (Fin n)), HyperplaneSeparatesStrongly n H C₁ C₂

Helper for Corollary 19.3.3: the Theorem 11.4 criterion yields a strongly separating hyperplane from 0 ∉ closure (C₁ - C₂).

theorem exists_hyperplaneSeparatesStrongly_of_disjoint_polyhedralConvex (n : ) (C₁ C₂ : Set (Fin n)) :
C₁.NonemptyC₂.NonemptyDisjoint C₁ C₂IsPolyhedralConvexSet n C₁IsPolyhedralConvexSet n C₂∃ (H : Set (Fin n)), HyperplaneSeparatesStrongly n H C₁ C₂

Corollary 19.3.3: If C₁ and C₂ are non-empty disjoint polyhedral convex sets, there exists a hyperplane separating C₁ and C₂ strongly.

theorem helperForCorollary_19_3_4_imageUnder_sumMap_eq_infimalConvolution {n : } (f₁ f₂ : (Fin n)EReal) :
have A₁ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i); have A₂ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i); have B := A₁ + A₂; have h := fun (z : Fin (n + n)) => f₁ (A₁ z) + f₂ (A₂ z); imageUnderLinearMap B h = infimalConvolution f₁ f₂

Helper for Corollary 19.3.4: infimalConvolution is an image-under-linear-map infimum for the split-coordinate sum map.

theorem helperForCorollary_19_3_4_realSplit_of_sum_le_coe {a b : EReal} {μ : } (ha_bot : a ) (hb_bot : b ) (hab : a + b μ) :
∃ (μ₁ : ) (μ₂ : ), a μ₁ b μ₂ μ₁ + μ₂ = μ

Helper for Corollary 19.3.4: split a finite real upper bound on a + b into real upper bounds on each summand, assuming neither summand is .

theorem helperForCorollary_19_3_4_transformedProjectedEpigraph_eq_sum {n : } (f₁ f₂ : (Fin n)EReal) (hproper₁ : ProperConvexFunctionOn Set.univ f₁) (hproper₂ : ProperConvexFunctionOn Set.univ f₂) :
have A₁ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i); have A₂ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i); have B := A₁ + A₂; have h := fun (z : Fin (n + n)) => f₁ (A₁ z) + f₂ (A₂ z); (fun (p : (Fin n) × ) => prodLinearEquiv_append p) '' ((linearMap_prod B) '' epigraph Set.univ h) = (fun (p : (Fin n) × ) => prodLinearEquiv_append p) '' epigraph Set.univ f₁ + (fun (p : (Fin n) × ) => prodLinearEquiv_append p) '' epigraph Set.univ f₂

Helper for Corollary 19.3.4: the transformed projected epigraph of the split-sum model equals the Minkowski sum of the transformed epigraphs of f₁ and f₂.

theorem helperForCorollary_19_3_4_transformedProjectedEpigraph_eq_sum_coord {n : } (f₁ f₂ : (Fin n)EReal) (hproper₁ : ProperConvexFunctionOn Set.univ f₁) (hproper₂ : ProperConvexFunctionOn Set.univ f₂) :
have A₁ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i); have A₂ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i); have B := A₁ + A₂; have h := fun (z : Fin (n + n)) => f₁ (A₁ z) + f₂ (A₂ z); (fun (p : (Fin n) × ) => (prodLinearEquiv_append_coord n) p) '' ((linearMap_prod B) '' epigraph Set.univ h) = (fun (p : (Fin n) × ) => (prodLinearEquiv_append_coord n) p) '' epigraph Set.univ f₁ + (fun (p : (Fin n) × ) => (prodLinearEquiv_append_coord n) p) '' epigraph Set.univ f₂

Helper for Corollary 19.3.4: coordinate version of helperForCorollary_19_3_4_transformedProjectedEpigraph_eq_sum.

theorem helperForCorollary_19_3_4_projectedEpigraph_closed {n : } (f₁ f₂ : (Fin n)EReal) (hf₁poly : IsPolyhedralConvexFunction n f₁) (hf₂poly : IsPolyhedralConvexFunction n f₂) (hproper₁ : ProperConvexFunctionOn Set.univ f₁) (hproper₂ : ProperConvexFunctionOn Set.univ f₂) :
have A₁ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.castAdd n i); have A₂ := LinearMap.pi fun (i : Fin n) => LinearMap.proj (Fin.natAdd n i); have B := A₁ + A₂; have h := fun (z : Fin (n + n)) => f₁ (A₁ z) + f₂ (A₂ z); IsClosed ((linearMap_prod B) '' epigraph Set.univ h)

Helper for Corollary 19.3.4: the projected epigraph of the split-sum model is closed, via its transformed description as a sum of transformed polyhedral epigraphs.

theorem helperForCorollary_19_3_4_polyhedralEpigraph_infimalConvolution {n : } (f₁ f₂ : (Fin n)EReal) (hf₁poly : IsPolyhedralConvexFunction n f₁) (hf₂poly : IsPolyhedralConvexFunction n f₂) (hproper₁ : ProperConvexFunctionOn Set.univ f₁) (hproper₂ : ProperConvexFunctionOn Set.univ f₂) :

Helper for Corollary 19.3.4: the transformed epigraph of infimalConvolution f₁ f₂ is polyhedral, obtained from the closed projected-epigraph identity and the transformed sum description.

theorem helperForCorollary_19_3_4_eq_sub_of_add_eq {n : } {u v x : Fin n} (h : u + v = x) :
u = x - v

Helper for Corollary 19.3.4: isolate the first summand in an equality u + v = x as u = x - v.

theorem helperForCorollary_19_3_4_attainment_of_finite_value {n : } (f₁ f₂ : (Fin n)EReal) (hf₁poly : IsPolyhedralConvexFunction n f₁) (hf₂poly : IsPolyhedralConvexFunction n f₂) (hproper₁ : ProperConvexFunctionOn Set.univ f₁) (hproper₂ : ProperConvexFunctionOn Set.univ f₂) (x : Fin n) {r : } (hr : infimalConvolution f₁ f₂ x = r) :
∃ (y : Fin n), infimalConvolution f₁ f₂ x = f₁ (x - y) + f₂ y

Helper for Corollary 19.3.4: when the infimal-convolution value at x is finite, the infimum is attained by some y.

theorem helperForCorollary_19_3_4_attainment_of_top_value {n : } (f₁ f₂ : (Fin n)EReal) (x : Fin n) (htop : infimalConvolution f₁ f₂ x = ) :
∃ (y : Fin n), infimalConvolution f₁ f₂ x = f₁ (x - y) + f₂ y

Helper for Corollary 19.3.4: if the infimal-convolution value at x is , the defining infimum is attained by the witness y = 0.

Helper for Corollary 19.3.4: any EReal value that is neither nor equals the coercion of its toReal value.

theorem polyhedralConvexFunction_infimalConvolution (n : ) (f₁ f₂ : (Fin n)EReal) :

Corollary 19.3.4: If f₁ and f₂ are proper polyhedral convex functions on ℝ^n, then infimalConvolution f₁ f₂ is a polyhedral convex function. Moreover, if infimalConvolution f₁ f₂ is proper, the infimum in the definition of (f₁ \sqcup f₂)(x) is attained for each x.