analysis.convex.hull
β·
Mathlib.Analysis.Convex.Hull
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
@@ -101,6 +101,9 @@ lemma segment_subset_convex_hull (hx : x β s) (hy : y β s) : segment π x
@[simp] lemma convex_hull_singleton (x : E) : convex_hull π ({x} : set E) = {x} :=
(convex_singleton x).convex_hull_eq
+@[simp] lemma convex_hull_zero : convex_hull π (0 : set E) = 0 :=
+convex_hull_singleton 0
+
@[simp] lemma convex_hull_pair (x y : E) : convex_hull π {x, y} = segment π x y :=
begin
refine (convex_hull_min _ $ convex_segment _ _).antisymm
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -198,7 +198,7 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
by
constructor
Β· rintro hsx hx
- rw [hsx.convex_hull_eq] at hx
+ rw [hsx.convex_hull_eq] at hx
exact hx.2 (mem_singleton _)
rintro hx
suffices h : s \ {x} = convexHull π (s \ {x}); Β· convert convex_convexHull π _
@@ -208,8 +208,8 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
-/
-#print IsLinearMap.convexHull_image /-
-theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
+#print IsLinearMap.image_convexHull /-
+theorem IsLinearMap.image_convexHull {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
Set.Subset.antisymm
(convexHull_min (image_subset _ (subset_convexHull π s)) <|
@@ -217,14 +217,14 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
(image_subset_iff.2 <|
convexHull_min (image_subset_iff.1 <| subset_convexHull π _)
((convex_convexHull π _).is_linear_preimage hf))
-#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
+#align is_linear_map.convex_hull_image IsLinearMap.image_convexHull
-/
-#print LinearMap.convexHull_image /-
-theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
+#print LinearMap.image_convexHull /-
+theorem LinearMap.image_convexHull (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
- f.isLinear.convexHull_image s
-#align linear_map.convex_hull_image LinearMap.convexHull_image
+ f.isLinear.image_convexHull s
+#align linear_map.convex_hull_image LinearMap.image_convexHull
-/
end AddCommMonoid
@@ -237,7 +237,7 @@ variable [OrderedCommSemiring π] [AddCommMonoid E] [Module π E]
#print convexHull_smul /-
theorem convexHull_smul (a : π) (s : Set E) : convexHull π (a β’ s) = a β’ convexHull π s :=
- (LinearMap.lsmul _ _ a).convexHull_image _
+ (LinearMap.lsmul _ _ a).image_convexHull _
#align convex_hull_smul convexHull_smul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -44,7 +44,7 @@ variable (π) [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π
#print convexHull /-
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
def convexHull : ClosureOperator (Set E) :=
- ClosureOperator.mkβ (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
+ ClosureOperator.ofPred (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
(fun s =>
Set.subset_iInter fun t => Set.subset_iInter fun hst => Set.subset_iInter fun ht => hst)
(fun s => convex_iInter fun t => convex_iInter fun ht => convex_iInter id) fun s t hst ht =>
@@ -62,7 +62,7 @@ theorem subset_convexHull : s β convexHull π s :=
#print convex_convexHull /-
theorem convex_convexHull : Convex π (convexHull π s) :=
- ClosureOperator.closure_mem_mkβ s
+ ClosureOperator.closure_mem_ofPred s
#align convex_convex_hull convex_convexHull
-/
@@ -82,7 +82,7 @@ theorem mem_convexHull_iff : x β convexHull π s β β t, s β t β Conv
#print convexHull_min /-
theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s β t :=
- ClosureOperator.closure_le_mkβ_iff (show s β€ t from hst) ht
+ ClosureOperator.closure_le_ofPred_iff (show s β€ t from hst) ht
#align convex_hull_min convexHull_min
-/
@@ -101,7 +101,7 @@ theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π
#print Convex.convexHull_eq /-
theorem Convex.convexHull_eq (hs : Convex π s) : convexHull π s = s :=
- ClosureOperator.mem_mkβ_closed hs
+ ClosureOperator.ofPred_isClosed hs
#align convex.convex_hull_eq Convex.convexHull_eq
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Yury Kudriashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
-/
-import Mathbin.Analysis.Convex.Basic
-import Mathbin.Order.Closure
+import Analysis.Convex.Basic
+import Order.Closure
#align_import analysis.convex.hull from "leanprover-community/mathlib"@"92bd7b1ffeb306a89f450bee126ddd8a284c259d"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -141,7 +141,7 @@ theorem convexHull_nonempty_iff : (convexHull π s).Nonempty β s.Nonempty :=
#align convex_hull_nonempty_iff convexHull_nonempty_iff
-/
-alias convexHull_nonempty_iff β _ Set.Nonempty.convexHull
+alias β¨_, Set.Nonempty.convexHullβ© := convexHull_nonempty_iff
#align set.nonempty.convex_hull Set.Nonempty.convexHull
attribute [protected] Set.Nonempty.convexHull
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Yury Kudriashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
-
-! This file was ported from Lean 3 source module analysis.convex.hull
-! leanprover-community/mathlib commit 92bd7b1ffeb306a89f450bee126ddd8a284c259d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Convex.Basic
import Mathbin.Order.Closure
+#align_import analysis.convex.hull from "leanprover-community/mathlib"@"92bd7b1ffeb306a89f450bee126ddd8a284c259d"
+
/-!
# Convex hull
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf2428c9486c407ca38b5b3fb10b87dad0bc99fa
@@ -162,10 +162,12 @@ theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
#align convex_hull_singleton convexHull_singleton
-/
+#print convexHull_zero /-
@[simp]
theorem convexHull_zero : convexHull π (0 : Set E) = 0 :=
convexHull_singleton 0
#align convex_hull_zero convexHull_zero
+-/
#print convexHull_pair /-
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/b01d6eb9d0a308807af54319b264d0994b91774b
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
! This file was ported from Lean 3 source module analysis.convex.hull
-! leanprover-community/mathlib commit 31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0
+! leanprover-community/mathlib commit 92bd7b1ffeb306a89f450bee126ddd8a284c259d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -162,6 +162,11 @@ theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
#align convex_hull_singleton convexHull_singleton
-/
+@[simp]
+theorem convexHull_zero : convexHull π (0 : Set E) = 0 :=
+ convexHull_singleton 0
+#align convex_hull_zero convexHull_zero
+
#print convexHull_pair /-
@[simp]
theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -44,6 +44,7 @@ section AddCommMonoid
variable (π) [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
+#print convexHull /-
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
def convexHull : ClosureOperator (Set E) :=
ClosureOperator.mkβ (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
@@ -52,6 +53,7 @@ def convexHull : ClosureOperator (Set E) :=
(fun s => convex_iInter fun t => convex_iInter fun ht => convex_iInter id) fun s t hst ht =>
Set.iInter_subset_of_subset t <| Set.iInter_subset_of_subset hst <| Set.iInter_subset _ ht
#align convex_hull convexHull
+-/
variable (s : Set E)
@@ -61,9 +63,11 @@ theorem subset_convexHull : s β convexHull π s :=
#align subset_convex_hull subset_convexHull
-/
+#print convex_convexHull /-
theorem convex_convexHull : Convex π (convexHull π s) :=
ClosureOperator.closure_mem_mkβ s
#align convex_convex_hull convex_convexHull
+-/
#print convexHull_eq_iInter /-
theorem convexHull_eq_iInter : convexHull π s = β (t : Set E) (hst : s β t) (ht : Convex π t), t :=
@@ -85,9 +89,11 @@ theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s
#align convex_hull_min convexHull_min
-/
+#print Convex.convexHull_subset_iff /-
theorem Convex.convexHull_subset_iff (ht : Convex π t) : convexHull π s β t β s β t :=
β¨(subset_convexHull _ _).trans, fun h => convexHull_min h htβ©
#align convex.convex_hull_subset_iff Convex.convexHull_subset_iff
+-/
#print convexHull_mono /-
@[mono]
@@ -96,9 +102,11 @@ theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π
#align convex_hull_mono convexHull_mono
-/
+#print Convex.convexHull_eq /-
theorem Convex.convexHull_eq (hs : Convex π s) : convexHull π s = s :=
ClosureOperator.mem_mkβ_closed hs
#align convex.convex_hull_eq Convex.convexHull_eq
+-/
#print convexHull_univ /-
@[simp]
@@ -166,16 +174,21 @@ theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y :=
#align convex_hull_pair convexHull_pair
-/
+#print convexHull_convexHull_union_left /-
theorem convexHull_convexHull_union_left (s t : Set E) :
convexHull π (convexHull π s βͺ t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_left _ _ _
#align convex_hull_convex_hull_union_left convexHull_convexHull_union_left
+-/
+#print convexHull_convexHull_union_right /-
theorem convexHull_convexHull_union_right (s t : Set E) :
convexHull π (s βͺ convexHull π t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_right _ _ _
#align convex_hull_convex_hull_union_right convexHull_convexHull_union_right
+-/
+#print Convex.convex_remove_iff_not_mem_convexHull_remove /-
theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Convex π s) (x : E) :
Convex π (s \ {x}) β x β convexHull π (s \ {x}) :=
by
@@ -189,7 +202,9 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
subset.antisymm (subset_convexHull π _) fun y hy =>
β¨convexHull_min (diff_subset _ _) hs hy, by rintro (rfl : y = x); exact hx hyβ©
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
+-/
+#print IsLinearMap.convexHull_image /-
theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
Set.Subset.antisymm
@@ -199,11 +214,14 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
convexHull_min (image_subset_iff.1 <| subset_convexHull π _)
((convex_convexHull π _).is_linear_preimage hf))
#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
+-/
+#print LinearMap.convexHull_image /-
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
f.isLinear.convexHull_image s
#align linear_map.convex_hull_image LinearMap.convexHull_image
+-/
end AddCommMonoid
@@ -229,6 +247,7 @@ section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
+#print AffineMap.image_convexHull /-
theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
by
apply Set.Subset.antisymm
@@ -241,6 +260,7 @@ theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π
convexHull_min (Set.image_subset _ (subset_convexHull π s))
((convex_convexHull π s).affine_image f)
#align affine_map.image_convex_hull AffineMap.image_convexHull
+-/
#print convexHull_subset_affineSpan /-
theorem convexHull_subset_affineSpan : convexHull π s β (affineSpan π s : Set E) :=
@@ -258,9 +278,11 @@ theorem affineSpan_convexHull : affineSpan π (convexHull π s) = affineSpan
#align affine_span_convex_hull affineSpan_convexHull
-/
+#print convexHull_neg /-
theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s := by
simp_rw [β image_neg]; exact (AffineMap.image_convexHull _ <| -1).symm
#align convex_hull_neg convexHull_neg
+-/
end AddCommGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -181,7 +181,7 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
by
constructor
Β· rintro hsx hx
- rw [hsx.convex_hull_eq] at hx
+ rw [hsx.convex_hull_eq] at hx
exact hx.2 (mem_singleton _)
rintro hx
suffices h : s \ {x} = convexHull π (s \ {x}); Β· convert convex_convexHull π _
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -30,7 +30,7 @@ while the impact on writing code is minimal as `convex_hull π s` is automatic
open Set
-open Pointwise
+open scoped Pointwise
variable {π E F : Type _}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -44,12 +44,6 @@ section AddCommMonoid
variable (π) [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
-/- warning: convex_hull -> convexHull is a dubious translation:
-lean 3 declaration is
- forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2], ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))
-but is expected to have type
- forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2], ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E)))))))
-Case conversion may be inaccurate. Consider using '#align convex_hull convexHullβ'. -/
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
def convexHull : ClosureOperator (Set E) :=
ClosureOperator.mkβ (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
@@ -67,12 +61,6 @@ theorem subset_convexHull : s β convexHull π s :=
#align subset_convex_hull subset_convexHull
-/
-/- warning: convex_convex_hull -> convex_convexHull is a dubious translation:
-lean 3 declaration is
- forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E), Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s)
-but is expected to have type
- forall (π : Type.{u2}) {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] (s : Set.{u1} E), Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s)
-Case conversion may be inaccurate. Consider using '#align convex_convex_hull convex_convexHullβ'. -/
theorem convex_convexHull : Convex π (convexHull π s) :=
ClosureOperator.closure_mem_mkβ s
#align convex_convex_hull convex_convexHull
@@ -97,12 +85,6 @@ theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s
#align convex_hull_min convexHull_min
-/
-/- warning: convex.convex_hull_subset_iff -> Convex.convexHull_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E} {t : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) t) -> (Iff (HasSubset.Subset.{u2} (Set.{u2} E) (Set.hasSubset.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) t) (HasSubset.Subset.{u2} (Set.{u2} E) (Set.hasSubset.{u2} E) s t))
-but is expected to have type
- forall {π : Type.{u2}} {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] {s : Set.{u1} E} {t : Set.{u1} E}, (Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} E) (Set.instHasSubsetSet.{u1} E) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s) t) (HasSubset.Subset.{u1} (Set.{u1} E) (Set.instHasSubsetSet.{u1} E) s t))
-Case conversion may be inaccurate. Consider using '#align convex.convex_hull_subset_iff Convex.convexHull_subset_iffβ'. -/
theorem Convex.convexHull_subset_iff (ht : Convex π t) : convexHull π s β t β s β t :=
β¨(subset_convexHull _ _).trans, fun h => convexHull_min h htβ©
#align convex.convex_hull_subset_iff Convex.convexHull_subset_iff
@@ -114,12 +96,6 @@ theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π
#align convex_hull_mono convexHull_mono
-/
-/- warning: convex.convex_hull_eq -> Convex.convexHull_eq is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) s)
-but is expected to have type
- forall {π : Type.{u2}} {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] {s : Set.{u1} E}, (Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) s) -> (Eq.{succ u1} (Set.{u1} E) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s) s)
-Case conversion may be inaccurate. Consider using '#align convex.convex_hull_eq Convex.convexHull_eqβ'. -/
theorem Convex.convexHull_eq (hs : Convex π s) : convexHull π s = s :=
ClosureOperator.mem_mkβ_closed hs
#align convex.convex_hull_eq Convex.convexHull_eq
@@ -190,34 +166,16 @@ theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y :=
#align convex_hull_pair convexHull_pair
-/
-/- warning: convex_hull_convex_hull_union_left -> convexHull_convexHull_union_left is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) t)) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s t))
-but is expected to have type
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) s) t)) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s t))
-Case conversion may be inaccurate. Consider using '#align convex_hull_convex_hull_union_left convexHull_convexHull_union_leftβ'. -/
theorem convexHull_convexHull_union_left (s t : Set E) :
convexHull π (convexHull π s βͺ t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_left _ _ _
#align convex_hull_convex_hull_union_left convexHull_convexHull_union_left
-/- warning: convex_hull_convex_hull_union_right -> convexHull_convexHull_union_right is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) t))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s t))
-but is expected to have type
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) t))) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s t))
-Case conversion may be inaccurate. Consider using '#align convex_hull_convex_hull_union_right convexHull_convexHull_union_rightβ'. -/
theorem convexHull_convexHull_union_right (s t : Set E) :
convexHull π (s βͺ convexHull π t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_right _ _ _
#align convex_hull_convex_hull_union_right convexHull_convexHull_union_right
-/- warning: convex.convex_remove_iff_not_mem_convex_hull_remove -> Convex.convex_remove_iff_not_mem_convexHull_remove is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (forall (x : E), Iff (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (SDiff.sdiff.{u2} (Set.{u2} E) (BooleanAlgebra.toHasSdiff.{u2} (Set.{u2} E) (Set.booleanAlgebra.{u2} E)) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.hasSingleton.{u2} E) x))) (Not (Membership.Mem.{u2, u2} E (Set.{u2} E) (Set.hasMem.{u2} E) x (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (SDiff.sdiff.{u2} (Set.{u2} E) (BooleanAlgebra.toHasSdiff.{u2} (Set.{u2} E) (Set.booleanAlgebra.{u2} E)) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.hasSingleton.{u2} E) x))))))
-but is expected to have type
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u1, u2} π E (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} π E (MonoidWithZero.toZero.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (forall (x : E), Iff (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u1, u2} π E (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} π E (MonoidWithZero.toZero.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (SDiff.sdiff.{u2} (Set.{u2} E) (Set.instSDiffSet.{u2} E) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.instSingletonSet.{u2} E) x))) (Not (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) x (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (SDiff.sdiff.{u2} (Set.{u2} E) (Set.instSDiffSet.{u2} E) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.instSingletonSet.{u2} E) x))))))
-Case conversion may be inaccurate. Consider using '#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_removeβ'. -/
theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Convex π s) (x : E) :
Convex π (s \ {x}) β x β convexHull π (s \ {x}) :=
by
@@ -232,12 +190,6 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
β¨convexHull_min (diff_subset _ _) hs hy, by rintro (rfl : y = x); exact hx hyβ©
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
-/- warning: is_linear_map.convex_hull_image -> IsLinearMap.convexHull_image is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] {f : E -> F}, (IsLinearMap.{u1, u2, u3} π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 f) -> (forall (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F f s)) (Set.image.{u2, u3} E F f (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s)))
-but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] {f : E -> F}, (IsLinearMap.{u3, u2, u1} π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 f) -> (forall (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F f s)) (Set.image.{u2, u1} E F f (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s)))
-Case conversion may be inaccurate. Consider using '#align is_linear_map.convex_hull_image IsLinearMap.convexHull_imageβ'. -/
theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
Set.Subset.antisymm
@@ -248,9 +200,6 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
((convex_convexHull π _).is_linear_preimage hf))
#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
-/- warning: linear_map.convex_hull_image -> LinearMap.convexHull_image is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align linear_map.convex_hull_image LinearMap.convexHull_imageβ'. -/
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
f.isLinear.convexHull_image s
@@ -280,9 +229,6 @@ section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
-/- warning: affine_map.image_convex_hull -> AffineMap.image_convexHull is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align affine_map.image_convex_hull AffineMap.image_convexHullβ'. -/
theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
by
apply Set.Subset.antisymm
@@ -312,12 +258,6 @@ theorem affineSpan_convexHull : affineSpan π (convexHull π s) = affineSpan
#align affine_span_convex_hull affineSpan_convexHull
-/
-/- warning: convex_hull_neg -> convexHull_neg is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_4 : Module.{u1, u2} π E (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] (s : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (SubNegMonoid.toHasNeg.{u2} E (AddGroup.toSubNegMonoid.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)))) s)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (SubNegMonoid.toHasNeg.{u2} E (AddGroup.toSubNegMonoid.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) s))
-but is expected to have type
- forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π (OrderedRing.toOrderedSemiring.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] (s : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) s)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s))
-Case conversion may be inaccurate. Consider using '#align convex_hull_neg convexHull_negβ'. -/
theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s := by
simp_rw [β image_neg]; exact (AffineMap.image_convexHull _ <| -1).symm
#align convex_hull_neg convexHull_neg
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -229,10 +229,7 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
suffices h : s \ {x} = convexHull π (s \ {x}); Β· convert convex_convexHull π _
exact
subset.antisymm (subset_convexHull π _) fun y hy =>
- β¨convexHull_min (diff_subset _ _) hs hy,
- by
- rintro (rfl : y = x)
- exact hx hyβ©
+ β¨convexHull_min (diff_subset _ _) hs hy, by rintro (rfl : y = x); exact hx hyβ©
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
/- warning: is_linear_map.convex_hull_image -> IsLinearMap.convexHull_image is a dubious translation:
@@ -321,10 +318,8 @@ lean 3 declaration is
but is expected to have type
forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π (OrderedRing.toOrderedSemiring.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] (s : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) s)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s))
Case conversion may be inaccurate. Consider using '#align convex_hull_neg convexHull_negβ'. -/
-theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s :=
- by
- simp_rw [β image_neg]
- exact (AffineMap.image_convexHull _ <| -1).symm
+theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s := by
+ simp_rw [β image_neg]; exact (AffineMap.image_convexHull _ <| -1).symm
#align convex_hull_neg convexHull_neg
end AddCommGroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -252,10 +252,7 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
/- warning: linear_map.convex_hull_image -> LinearMap.convexHull_image is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] (f : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) s)) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s))
-but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
+<too large>
Case conversion may be inaccurate. Consider using '#align linear_map.convex_hull_image LinearMap.convexHull_imageβ'. -/
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
@@ -287,10 +284,7 @@ section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
/- warning: affine_map.image_convex_hull -> AffineMap.image_convexHull is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u3} F] [_inst_4 : Module.{u1, u2} π E (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u1, u3} π F (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))), Eq.{succ u3} (Set.{u3} F) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) s)) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3) _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) s))
-but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedRing.{u3} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))), Eq.{succ u1} (Set.{u1} F) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1003 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s)) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3) _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1003 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) s))
+<too large>
Case conversion may be inaccurate. Consider using '#align affine_map.image_convex_hull AffineMap.image_convexHullβ'. -/
theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -255,7 +255,7 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
lean 3 declaration is
forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] (f : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) s)) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s))
but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
Case conversion may be inaccurate. Consider using '#align linear_map.convex_hull_image LinearMap.convexHull_imageβ'. -/
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -255,7 +255,7 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
lean 3 declaration is
forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] (f : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) s)) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s))
but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
Case conversion may be inaccurate. Consider using '#align linear_map.convex_hull_image LinearMap.convexHull_imageβ'. -/
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -290,7 +290,7 @@ variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s :
lean 3 declaration is
forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u3} F] [_inst_4 : Module.{u1, u2} π E (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u1, u3} π F (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))), Eq.{succ u3} (Set.{u3} F) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) s)) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3) _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) s))
but is expected to have type
- forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedRing.{u3} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))), Eq.{succ u1} (Set.{u1} F) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1004 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s)) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3) _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1004 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) s))
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedRing.{u3} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))), Eq.{succ u1} (Set.{u1} F) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1003 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s)) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3) _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1003 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) s))
Case conversion may be inaccurate. Consider using '#align affine_map.image_convex_hull AffineMap.image_convexHullβ'. -/
theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -54,9 +54,9 @@ Case conversion may be inaccurate. Consider using '#align convex_hull convexHull
def convexHull : ClosureOperator (Set E) :=
ClosureOperator.mkβ (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
(fun s =>
- Set.subset_interα΅’ fun t => Set.subset_interα΅’ fun hst => Set.subset_interα΅’ fun ht => hst)
- (fun s => convex_interα΅’ fun t => convex_interα΅’ fun ht => convex_interα΅’ id) fun s t hst ht =>
- Set.interα΅’_subset_of_subset t <| Set.interα΅’_subset_of_subset hst <| Set.interα΅’_subset _ ht
+ Set.subset_iInter fun t => Set.subset_iInter fun hst => Set.subset_iInter fun ht => hst)
+ (fun s => convex_iInter fun t => convex_iInter fun ht => convex_iInter id) fun s t hst ht =>
+ Set.iInter_subset_of_subset t <| Set.iInter_subset_of_subset hst <| Set.iInter_subset _ ht
#align convex_hull convexHull
variable (s : Set E)
@@ -77,17 +77,17 @@ theorem convex_convexHull : Convex π (convexHull π s) :=
ClosureOperator.closure_mem_mkβ s
#align convex_convex_hull convex_convexHull
-#print convexHull_eq_interα΅’ /-
-theorem convexHull_eq_interα΅’ : convexHull π s = β (t : Set E) (hst : s β t) (ht : Convex π t), t :=
+#print convexHull_eq_iInter /-
+theorem convexHull_eq_iInter : convexHull π s = β (t : Set E) (hst : s β t) (ht : Convex π t), t :=
rfl
-#align convex_hull_eq_Inter convexHull_eq_interα΅’
+#align convex_hull_eq_Inter convexHull_eq_iInter
-/
variable {π s} {t : Set E} {x y : E}
#print mem_convexHull_iff /-
theorem mem_convexHull_iff : x β convexHull π s β β t, s β t β Convex π t β x β t := by
- simp_rw [convexHull_eq_interα΅’, mem_Inter]
+ simp_rw [convexHull_eq_iInter, mem_Inter]
#align mem_convex_hull_iff mem_convexHull_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/3cacc945118c8c637d89950af01da78307f59325
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
! This file was ported from Lean 3 source module analysis.convex.hull
-! leanprover-community/mathlib commit a50170a88a47570ed186b809ca754110590f9476
+! leanprover-community/mathlib commit 31ca6f9cf5f90a6206092cd7f84b359dcb6d52e0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Order.Closure
/-!
# Convex hull
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines the convex hull of a set `s` in a module. `convex_hull π s` is the smallest convex
set containing `s`. In order theory speak, this is a closure operator.
mathlib commit https://github.com/leanprover-community/mathlib/commit/728baa2f54e6062c5879a3e397ac6bac323e506f
@@ -41,6 +41,12 @@ section AddCommMonoid
variable (π) [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
+/- warning: convex_hull -> convexHull is a dubious translation:
+lean 3 declaration is
+ forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2], ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))
+but is expected to have type
+ forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2], ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E)))))))
+Case conversion may be inaccurate. Consider using '#align convex_hull convexHullβ'. -/
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
def convexHull : ClosureOperator (Set E) :=
ClosureOperator.mkβ (fun s => β (t : Set E) (hst : s β t) (ht : Convex π t), t) (Convex π)
@@ -52,51 +58,84 @@ def convexHull : ClosureOperator (Set E) :=
variable (s : Set E)
+#print subset_convexHull /-
theorem subset_convexHull : s β convexHull π s :=
(convexHull π).le_closure s
#align subset_convex_hull subset_convexHull
+-/
+/- warning: convex_convex_hull -> convex_convexHull is a dubious translation:
+lean 3 declaration is
+ forall (π : Type.{u1}) {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E), Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s)
+but is expected to have type
+ forall (π : Type.{u2}) {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] (s : Set.{u1} E), Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s)
+Case conversion may be inaccurate. Consider using '#align convex_convex_hull convex_convexHullβ'. -/
theorem convex_convexHull : Convex π (convexHull π s) :=
ClosureOperator.closure_mem_mkβ s
#align convex_convex_hull convex_convexHull
+#print convexHull_eq_interα΅’ /-
theorem convexHull_eq_interα΅’ : convexHull π s = β (t : Set E) (hst : s β t) (ht : Convex π t), t :=
rfl
#align convex_hull_eq_Inter convexHull_eq_interα΅’
+-/
variable {π s} {t : Set E} {x y : E}
+#print mem_convexHull_iff /-
theorem mem_convexHull_iff : x β convexHull π s β β t, s β t β Convex π t β x β t := by
simp_rw [convexHull_eq_interα΅’, mem_Inter]
#align mem_convex_hull_iff mem_convexHull_iff
+-/
+#print convexHull_min /-
theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s β t :=
ClosureOperator.closure_le_mkβ_iff (show s β€ t from hst) ht
#align convex_hull_min convexHull_min
+-/
+/- warning: convex.convex_hull_subset_iff -> Convex.convexHull_subset_iff is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E} {t : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) t) -> (Iff (HasSubset.Subset.{u2} (Set.{u2} E) (Set.hasSubset.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) t) (HasSubset.Subset.{u2} (Set.{u2} E) (Set.hasSubset.{u2} E) s t))
+but is expected to have type
+ forall {π : Type.{u2}} {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] {s : Set.{u1} E} {t : Set.{u1} E}, (Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) t) -> (Iff (HasSubset.Subset.{u1} (Set.{u1} E) (Set.instHasSubsetSet.{u1} E) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s) t) (HasSubset.Subset.{u1} (Set.{u1} E) (Set.instHasSubsetSet.{u1} E) s t))
+Case conversion may be inaccurate. Consider using '#align convex.convex_hull_subset_iff Convex.convexHull_subset_iffβ'. -/
theorem Convex.convexHull_subset_iff (ht : Convex π t) : convexHull π s β t β s β t :=
β¨(subset_convexHull _ _).trans, fun h => convexHull_min h htβ©
#align convex.convex_hull_subset_iff Convex.convexHull_subset_iff
+#print convexHull_mono /-
@[mono]
theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π t :=
(convexHull π).Monotone hst
#align convex_hull_mono convexHull_mono
+-/
+/- warning: convex.convex_hull_eq -> Convex.convexHull_eq is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) s)
+but is expected to have type
+ forall {π : Type.{u2}} {E : Type.{u1}} [_inst_1 : OrderedSemiring.{u2} π] [_inst_2 : AddCommMonoid.{u1} E] [_inst_4 : Module.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2] {s : Set.{u1} E}, (Convex.{u2, u1} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} π E (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u2, u1} π E (MonoidWithZero.toZero.{u2} π (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1))) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u2, u1} π E (Semiring.toMonoidWithZero.{u2} π (OrderedSemiring.toSemiring.{u2} π _inst_1)) (AddMonoid.toZero.{u1} E (AddCommMonoid.toAddMonoid.{u1} E _inst_2)) (Module.toMulActionWithZero.{u2, u1} π E (OrderedSemiring.toSemiring.{u2} π _inst_1) _inst_2 _inst_4)))) s) -> (Eq.{succ u1} (Set.{u1} E) (OrderHom.toFun.{u1, u1} (Set.{u1} E) (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} E) (PartialOrder.toPreorder.{u1} (Set.{u1} E) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} E) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} E) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} E) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} E) (Set.instCompleteBooleanAlgebraSet.{u1} E))))))) (convexHull.{u2, u1} π E _inst_1 _inst_2 _inst_4)) s) s)
+Case conversion may be inaccurate. Consider using '#align convex.convex_hull_eq Convex.convexHull_eqβ'. -/
theorem Convex.convexHull_eq (hs : Convex π s) : convexHull π s = s :=
ClosureOperator.mem_mkβ_closed hs
#align convex.convex_hull_eq Convex.convexHull_eq
+#print convexHull_univ /-
@[simp]
theorem convexHull_univ : convexHull π (univ : Set E) = univ :=
ClosureOperator.closure_top (convexHull π)
#align convex_hull_univ convexHull_univ
+-/
+#print convexHull_empty /-
@[simp]
theorem convexHull_empty : convexHull π (β
: Set E) = β
:=
convex_empty.convexHull_eq
#align convex_hull_empty convexHull_empty
+-/
+#print convexHull_empty_iff /-
@[simp]
theorem convexHull_empty_iff : convexHull π s = β
β s = β
:=
by
@@ -107,28 +146,36 @@ theorem convexHull_empty_iff : convexHull π s = β
β s = β
:=
Β· rintro rfl
exact convexHull_empty
#align convex_hull_empty_iff convexHull_empty_iff
+-/
+#print convexHull_nonempty_iff /-
@[simp]
theorem convexHull_nonempty_iff : (convexHull π s).Nonempty β s.Nonempty :=
by
rw [nonempty_iff_ne_empty, nonempty_iff_ne_empty, Ne.def, Ne.def]
exact not_congr convexHull_empty_iff
#align convex_hull_nonempty_iff convexHull_nonempty_iff
+-/
alias convexHull_nonempty_iff β _ Set.Nonempty.convexHull
#align set.nonempty.convex_hull Set.Nonempty.convexHull
attribute [protected] Set.Nonempty.convexHull
+#print segment_subset_convexHull /-
theorem segment_subset_convexHull (hx : x β s) (hy : y β s) : segment π x y β convexHull π s :=
(convex_convexHull _ _).segment_subset (subset_convexHull _ _ hx) (subset_convexHull _ _ hy)
#align segment_subset_convex_hull segment_subset_convexHull
+-/
+#print convexHull_singleton /-
@[simp]
theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
(convex_singleton x).convexHull_eq
#align convex_hull_singleton convexHull_singleton
+-/
+#print convexHull_pair /-
@[simp]
theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y :=
by
@@ -138,17 +185,36 @@ theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y :=
rw [insert_subset, singleton_subset_iff]
exact β¨left_mem_segment _ _ _, right_mem_segment _ _ _β©
#align convex_hull_pair convexHull_pair
+-/
+/- warning: convex_hull_convex_hull_union_left -> convexHull_convexHull_union_left is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s) t)) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s t))
+but is expected to have type
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) s) t)) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s t))
+Case conversion may be inaccurate. Consider using '#align convex_hull_convex_hull_union_left convexHull_convexHull_union_leftβ'. -/
theorem convexHull_convexHull_union_left (s t : Set E) :
convexHull π (convexHull π s βͺ t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_left _ _ _
#align convex_hull_convex_hull_union_left convexHull_convexHull_union_left
+/- warning: convex_hull_convex_hull_union_right -> convexHull_convexHull_union_right is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) t))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (Union.union.{u2} (Set.{u2} E) (Set.hasUnion.{u2} E) s t))
+but is expected to have type
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] (s : Set.{u2} E) (t : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) t))) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (Union.union.{u2} (Set.{u2} E) (Set.instUnionSet.{u2} E) s t))
+Case conversion may be inaccurate. Consider using '#align convex_hull_convex_hull_union_right convexHull_convexHull_union_rightβ'. -/
theorem convexHull_convexHull_union_right (s t : Set E) :
convexHull π (s βͺ convexHull π t) = convexHull π (s βͺ t) :=
ClosureOperator.closure_sup_closure_right _ _ _
#align convex_hull_convex_hull_union_right convexHull_convexHull_union_right
+/- warning: convex.convex_remove_iff_not_mem_convex_hull_remove -> Convex.convex_remove_iff_not_mem_convexHull_remove is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (forall (x : E), Iff (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} π E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (SMulWithZero.toSmulZeroClass.{u1, u2} π E (MulZeroClass.toHasZero.{u1} π (MulZeroOneClass.toMulZeroClass.{u1} π (MonoidWithZero.toMulZeroOneClass.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))))) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2))) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (SDiff.sdiff.{u2} (Set.{u2} E) (BooleanAlgebra.toHasSdiff.{u2} (Set.{u2} E) (Set.booleanAlgebra.{u2} E)) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.hasSingleton.{u2} E) x))) (Not (Membership.Mem.{u2, u2} E (Set.{u2} E) (Set.hasMem.{u2} E) x (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) (SDiff.sdiff.{u2} (Set.{u2} E) (BooleanAlgebra.toHasSdiff.{u2} (Set.{u2} E) (Set.booleanAlgebra.{u2} E)) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.hasSingleton.{u2} E) x))))))
+but is expected to have type
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] {s : Set.{u2} E}, (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u1, u2} π E (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} π E (MonoidWithZero.toZero.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) s) -> (forall (x : E), Iff (Convex.{u1, u2} π E _inst_1 _inst_2 (SMulZeroClass.toSMul.{u1, u2} π E (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (SMulWithZero.toSMulZeroClass.{u1, u2} π E (MonoidWithZero.toZero.{u1} π (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (MulActionWithZero.toSMulWithZero.{u1, u2} π E (Semiring.toMonoidWithZero.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)) (AddMonoid.toZero.{u2} E (AddCommMonoid.toAddMonoid.{u2} E _inst_2)) (Module.toMulActionWithZero.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_4)))) (SDiff.sdiff.{u2} (Set.{u2} E) (Set.instSDiffSet.{u2} E) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.instSingletonSet.{u2} E) x))) (Not (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) x (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4)) (SDiff.sdiff.{u2} (Set.{u2} E) (Set.instSDiffSet.{u2} E) s (Singleton.singleton.{u2, u2} E (Set.{u2} E) (Set.instSingletonSet.{u2} E) x))))))
+Case conversion may be inaccurate. Consider using '#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_removeβ'. -/
theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Convex π s) (x : E) :
Convex π (s \ {x}) β x β convexHull π (s \ {x}) :=
by
@@ -166,6 +232,12 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
exact hx hyβ©
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
+/- warning: is_linear_map.convex_hull_image -> IsLinearMap.convexHull_image is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] {f : E -> F}, (IsLinearMap.{u1, u2, u3} π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 f) -> (forall (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F f s)) (Set.image.{u2, u3} E F f (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s)))
+but is expected to have type
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] {f : E -> F}, (IsLinearMap.{u3, u2, u1} π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 f) -> (forall (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F f s)) (Set.image.{u2, u1} E F f (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s)))
+Case conversion may be inaccurate. Consider using '#align is_linear_map.convex_hull_image IsLinearMap.convexHull_imageβ'. -/
theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
Set.Subset.antisymm
@@ -176,6 +248,12 @@ theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s
((convex_convexHull π _).is_linear_preimage hf))
#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
+/- warning: linear_map.convex_hull_image -> LinearMap.convexHull_image is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedSemiring.{u1} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u3} F] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2] [_inst_5 : Module.{u1, u3} π F (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_3] (f : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u3} (Set.{u3} F) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F _inst_1 _inst_3 _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) s)) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} π π (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) => E -> F) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} π π E F (OrderedSemiring.toSemiring.{u1} π _inst_1) (OrderedSemiring.toSemiring.{u1} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u1} π (Semiring.toNonAssocSemiring.{u1} π (OrderedSemiring.toSemiring.{u1} π _inst_1)))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E _inst_1 _inst_2 _inst_4) s))
+but is expected to have type
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedSemiring.{u3} π] [_inst_2 : AddCommMonoid.{u2} E] [_inst_3 : AddCommMonoid.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_3] (f : LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) (s : Set.{u2} E), Eq.{succ u1} (Set.{u1} F) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F _inst_1 _inst_3 _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) s)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} π π (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1))) E F _inst_2 _inst_3 _inst_4 _inst_5) E (fun (_x : E) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : E) => F) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} π π E F (OrderedSemiring.toSemiring.{u3} π _inst_1) (OrderedSemiring.toSemiring.{u3} π _inst_1) _inst_2 _inst_3 _inst_4 _inst_5 (RingHom.id.{u3} π (Semiring.toNonAssocSemiring.{u3} π (OrderedSemiring.toSemiring.{u3} π _inst_1)))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E _inst_1 _inst_2 _inst_4)) s))
+Case conversion may be inaccurate. Consider using '#align linear_map.convex_hull_image LinearMap.convexHull_imageβ'. -/
theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
convexHull π (f '' s) = f '' convexHull π s :=
f.isLinear.convexHull_image s
@@ -189,9 +267,11 @@ section OrderedCommSemiring
variable [OrderedCommSemiring π] [AddCommMonoid E] [Module π E]
+#print convexHull_smul /-
theorem convexHull_smul (a : π) (s : Set E) : convexHull π (a β’ s) = a β’ convexHull π s :=
(LinearMap.lsmul _ _ a).convexHull_image _
#align convex_hull_smul convexHull_smul
+-/
end OrderedCommSemiring
@@ -203,6 +283,12 @@ section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
+/- warning: affine_map.image_convex_hull -> AffineMap.image_convexHull is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u3} F] [_inst_4 : Module.{u1, u2} π E (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u1, u3} π F (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))), Eq.{succ u3} (Set.{u3} F) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) s)) (coeFn.{succ u3, succ u3} (ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (fun (_x : ClosureOperator.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) => (Set.{u3} F) -> (Set.{u3} F)) (ClosureOperator.hasCoeToFun.{u3} (Set.{u3} F) (PartialOrder.toPreorder.{u3} (Set.{u3} F) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} F) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} F) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} F) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} F) (Set.completeBooleanAlgebra.{u3} F)))))))) (convexHull.{u1, u3} π F (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u3} F _inst_3) _inst_5) (Set.image.{u2, u3} E F (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) (fun (_x : AffineMap.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) => E -> F) (AffineMap.hasCoeToFun.{u1, u2, u2, u3, u3} π E E F F (OrderedRing.toRing.{u1} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u3} F (AddCommGroup.toAddGroup.{u3} F _inst_3))) f) s))
+but is expected to have type
+ forall {π : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : OrderedRing.{u3} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_3 : AddCommGroup.{u1} F] [_inst_4 : Module.{u3, u2} π E (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] [_inst_5 : Module.{u3, u1} π F (OrderedSemiring.toSemiring.{u3} π (OrderedRing.toOrderedSemiring.{u3} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3)] (s : Set.{u2} E) (f : AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))), Eq.{succ u1} (Set.{u1} F) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1004 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u3, u2} π E (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s)) (OrderHom.toFun.{u1, u1} (Set.{u1} F) (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (ClosureOperator.toOrderHom.{u1} (Set.{u1} F) (PartialOrder.toPreorder.{u1} (Set.{u1} F) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} F) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} F) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} F) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} F) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} F) (Set.instCompleteBooleanAlgebraSet.{u1} F))))))) (convexHull.{u3, u1} π F (OrderedRing.toOrderedSemiring.{u3} π _inst_1) (AddCommGroup.toAddCommMonoid.{u1} F _inst_3) _inst_5)) (Set.image.{u2, u1} E F (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AffineMap.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) E (fun (_x : E) => (fun (a._@.Mathlib.LinearAlgebra.AffineSpace.AffineMap._hyg.1004 : E) => F) _x) (AffineMap.funLike.{u3, u2, u2, u1, u1} π E E F F (OrderedRing.toRing.{u3} π _inst_1) _inst_2 _inst_4 (addGroupIsAddTorsor.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)) _inst_3 _inst_5 (addGroupIsAddTorsor.{u1} F (AddCommGroup.toAddGroup.{u1} F _inst_3))) f) s))
+Case conversion may be inaccurate. Consider using '#align affine_map.image_convex_hull AffineMap.image_convexHullβ'. -/
theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
by
apply Set.Subset.antisymm
@@ -216,10 +302,13 @@ theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π
((convex_convexHull π s).affine_image f)
#align affine_map.image_convex_hull AffineMap.image_convexHull
+#print convexHull_subset_affineSpan /-
theorem convexHull_subset_affineSpan : convexHull π s β (affineSpan π s : Set E) :=
convexHull_min (subset_affineSpan π s) (affineSpan π s).Convex
#align convex_hull_subset_affine_span convexHull_subset_affineSpan
+-/
+#print affineSpan_convexHull /-
@[simp]
theorem affineSpan_convexHull : affineSpan π (convexHull π s) = affineSpan π s :=
by
@@ -227,7 +316,14 @@ theorem affineSpan_convexHull : affineSpan π (convexHull π s) = affineSpan
rw [affineSpan_le]
exact convexHull_subset_affineSpan s
#align affine_span_convex_hull affineSpan_convexHull
+-/
+/- warning: convex_hull_neg -> convexHull_neg is a dubious translation:
+lean 3 declaration is
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_4 : Module.{u1, u2} π E (Ring.toSemiring.{u1} π (OrderedRing.toRing.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] (s : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (SubNegMonoid.toHasNeg.{u2} E (AddGroup.toSubNegMonoid.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)))) s)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (SubNegMonoid.toHasNeg.{u2} E (AddGroup.toSubNegMonoid.{u2} E (AddCommGroup.toAddGroup.{u2} E _inst_2)))) (coeFn.{succ u2, succ u2} (ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (fun (_x : ClosureOperator.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) => (Set.{u2} E) -> (Set.{u2} E)) (ClosureOperator.hasCoeToFun.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.completeBooleanAlgebra.{u2} E)))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4) s))
+but is expected to have type
+ forall {π : Type.{u1}} {E : Type.{u2}} [_inst_1 : OrderedRing.{u1} π] [_inst_2 : AddCommGroup.{u2} E] [_inst_4 : Module.{u1, u2} π E (OrderedSemiring.toSemiring.{u1} π (OrderedRing.toOrderedSemiring.{u1} π _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2)] (s : Set.{u2} E), Eq.{succ u2} (Set.{u2} E) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) s)) (Neg.neg.{u2} (Set.{u2} E) (Set.neg.{u2} E (NegZeroClass.toNeg.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_2)))))) (OrderHom.toFun.{u2, u2} (Set.{u2} E) (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (ClosureOperator.toOrderHom.{u2} (Set.{u2} E) (PartialOrder.toPreorder.{u2} (Set.{u2} E) (OmegaCompletePartialOrder.toPartialOrder.{u2} (Set.{u2} E) (CompleteLattice.instOmegaCompletePartialOrder.{u2} (Set.{u2} E) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} E) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} E) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} E) (Set.instCompleteBooleanAlgebraSet.{u2} E))))))) (convexHull.{u1, u2} π E (OrderedRing.toOrderedSemiring.{u1} π _inst_1) (AddCommGroup.toAddCommMonoid.{u2} E _inst_2) _inst_4)) s))
+Case conversion may be inaccurate. Consider using '#align convex_hull_neg convexHull_negβ'. -/
theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s :=
by
simp_rw [β image_neg]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -102,7 +102,7 @@ theorem convexHull_empty_iff : convexHull π s = β
β s = β
:= by
@[simp]
theorem convexHull_nonempty_iff : (convexHull π s).Nonempty β s.Nonempty := by
- rw [nonempty_iff_ne_empty, nonempty_iff_ne_empty, Ne.def, Ne.def]
+ rw [nonempty_iff_ne_empty, nonempty_iff_ne_empty, Ne, Ne]
exact not_congr convexHull_empty_iff
#align convex_hull_nonempty_iff convexHull_nonempty_iff
LinearMap.convexHull_image
and rename to LinearMap.image_convexHull
(#11298)
flip LinearMap.convexHull_image
and rename to image_convexHull
while at it, also flip the direction of convexHull_smul
and convexHull_neg
to match this
fix argument order of AffineMap.convexHull_image
: have the AffineMap
argument come first; there's no good reason not to and this enables dot notation
inline variable (s : Set E)
to achieve this; this is slightly clearer anyway
@@ -158,20 +158,20 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
exact hx hyβ©
#align convex.convex_remove_iff_not_mem_convex_hull_remove Convex.convex_remove_iff_not_mem_convexHull_remove
-theorem IsLinearMap.convexHull_image {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
- convexHull π (f '' s) = f '' convexHull π s :=
+theorem IsLinearMap.image_convexHull {f : E β F} (hf : IsLinearMap π f) (s : Set E) :
+ f '' convexHull π s = convexHull π (f '' s) :=
Set.Subset.antisymm
- (convexHull_min (image_subset _ (subset_convexHull π s)) <|
- (convex_convexHull π s).is_linear_image hf)
(image_subset_iff.2 <|
convexHull_min (image_subset_iff.1 <| subset_convexHull π _)
((convex_convexHull π _).is_linear_preimage hf))
-#align is_linear_map.convex_hull_image IsLinearMap.convexHull_image
+ (convexHull_min (image_subset _ (subset_convexHull π s)) <|
+ (convex_convexHull π s).is_linear_image hf)
+#align is_linear_map.convex_hull_image IsLinearMap.image_convexHull
-theorem LinearMap.convexHull_image (f : E ββ[π] F) (s : Set E) :
- convexHull π (f '' s) = f '' convexHull π s :=
- f.isLinear.convexHull_image s
-#align linear_map.convex_hull_image LinearMap.convexHull_image
+theorem LinearMap.image_convexHull (f : E ββ[π] F) (s : Set E) :
+ f '' convexHull π s = convexHull π (f '' s) :=
+ f.isLinear.image_convexHull s
+#align linear_map.convex_hull_image LinearMap.image_convexHull
end AddCommMonoid
@@ -181,8 +181,8 @@ section OrderedCommSemiring
variable [OrderedCommSemiring π] [AddCommMonoid E] [Module π E]
-theorem convexHull_smul (a : π) (s : Set E) : convexHull π (a β’ s) = a β’ convexHull π s :=
- (LinearMap.lsmul _ _ a).convexHull_image _
+theorem convexHull_smul (a : π) (s : Set E) : a β’ convexHull π s = convexHull π (a β’ s) :=
+ (LinearMap.lsmul _ _ a).image_convexHull _
#align convex_hull_smul convexHull_smul
end OrderedCommSemiring
@@ -193,33 +193,33 @@ variable [OrderedRing π]
section AddCommGroup
-variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
+variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F]
-theorem AffineMap.image_convexHull (f : E βα΅[π] F) :
+theorem AffineMap.image_convexHull (f : E βα΅[π] F) (s : Set E) :
f '' convexHull π s = convexHull π (f '' s) := by
apply Set.Subset.antisymm
Β· rw [Set.image_subset_iff]
- refine' convexHull_min _ ((convex_convexHull π (f '' s)).affine_preimage f)
+ refine convexHull_min ?_ ((convex_convexHull π (f '' s)).affine_preimage f)
rw [β Set.image_subset_iff]
exact subset_convexHull π (f '' s)
Β· exact convexHull_min (Set.image_subset _ (subset_convexHull π s))
((convex_convexHull π s).affine_image f)
#align affine_map.image_convex_hull AffineMap.image_convexHull
-theorem convexHull_subset_affineSpan : convexHull π s β (affineSpan π s : Set E) :=
+theorem convexHull_subset_affineSpan (s : Set E) : convexHull π s β (affineSpan π s : Set E) :=
convexHull_min (subset_affineSpan π s) (affineSpan π s).convex
#align convex_hull_subset_affine_span convexHull_subset_affineSpan
@[simp]
-theorem affineSpan_convexHull : affineSpan π (convexHull π s) = affineSpan π s := by
+theorem affineSpan_convexHull (s : Set E) : affineSpan π (convexHull π s) = affineSpan π s := by
refine' le_antisymm _ (affineSpan_mono π (subset_convexHull π s))
rw [affineSpan_le]
exact convexHull_subset_affineSpan s
#align affine_span_convex_hull affineSpan_convexHull
-theorem convexHull_neg (s : Set E) : convexHull π (-s) = -convexHull π s := by
+theorem convexHull_neg (s : Set E) : -convexHull π s = convexHull π (-s) := by
simp_rw [β image_neg]
- exact (AffineMap.image_convexHull _ <| -1).symm
+ exact AffineMap.image_convexHull (-1) _
#align convex_hull_neg convexHull_neg
end AddCommGroup
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -148,8 +148,8 @@ theorem Convex.convex_remove_iff_not_mem_convexHull_remove {s : Set E} (hs : Con
rw [hsx.convexHull_eq] at hx
exact hx.2 (mem_singleton _)
rintro hx
- suffices h : s \ {x} = convexHull π (s \ {x})
- Β· rw [h]
+ suffices h : s \ {x} = convexHull π (s \ {x}) by
+ rw [h]
exact convex_convexHull π _
exact
Subset.antisymm (subset_convexHull π _) fun y hy =>
ClosureOperator
(#9153)
This PR is the result of two years and a half of pondering.
The only way we ever define closure operators is by having a pre-existing "closedness" predicate and defining the closure of an element x
as the infimum of all closed y β₯ x
(assuming we're in a complete lattice). In particular, the emphasis is not on the preorder of closed elements, but on the closedness predicate. Morally, this is because a closure operator is the same as a Galois connection to the preorder of closed elements, but without mentioning the preorder of closed elements. That means that if we cared about the preorder of closed elements, we would not have wanted a closure operator in the first place, but a Galois connection.
All this said, here's what this PR does
IsClosed
predicate to ClosureOperator
. This redundant field is here to fix definitional equalities.closeds
. This is mostly replaced by the predicate, except in the map toCloseds
, so we...abbrev Closeds
for the order of closed elementstoClosed
to toCloseds
to match.mkβ
to the more sexy ofPred
. This is virtually the only useful constructor. Maybe it should even be taken as the definition, but I haven't gone that far.ofPred
to ofCompletePred
. ofCompletePred
is a specialisation of ofPred
to the case where we are in a complete lattice.IsClosed
can be controlled.ClosureOperator
. The diff here, I think, truly demonstrates that this PR is a step forward.I am not extending the refactor to LowerAdjoint
because:
LowerAdjoint
to even existIt is however easy to do the same refactor if wanted.
@@ -40,12 +40,8 @@ variable (π)
variable [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
-def convexHull : ClosureOperator (Set E) :=
- ClosureOperator.mkβ (fun s => β (t : Set E) (_ : s β t) (_ : Convex π t), t) (Convex π)
- (fun _ =>
- Set.subset_iInter fun _ => Set.subset_iInter fun hst => Set.subset_iInter fun _ => hst)
- (fun _ => convex_iInter fun _ => convex_iInter fun _ => convex_iInter id) fun _ t hst ht =>
- Set.iInter_subset_of_subset t <| Set.iInter_subset_of_subset hst <| Set.iInter_subset _ ht
+@[simps! isClosed]
+def convexHull : ClosureOperator (Set E) := .ofCompletePred (Convex π) fun _ β¦ convex_sInter
#align convex_hull convexHull
variable (s : Set E)
@@ -54,13 +50,11 @@ theorem subset_convexHull : s β convexHull π s :=
(convexHull π).le_closure s
#align subset_convex_hull subset_convexHull
-theorem convex_convexHull : Convex π (convexHull π s) :=
- ClosureOperator.closure_mem_mkβ s
+theorem convex_convexHull : Convex π (convexHull π s) := (convexHull π).isClosed_closure s
#align convex_convex_hull convex_convexHull
-theorem convexHull_eq_iInter : convexHull π s =
- β (t : Set E) (_ : s β t) (_ : Convex π t), t :=
- rfl
+theorem convexHull_eq_iInter : convexHull π s = β (t : Set E) (_ : s β t) (_ : Convex π t), t := by
+ simp [convexHull, iInter_subtype, iInter_and]
#align convex_hull_eq_Inter convexHull_eq_iInter
variable {π s} {t : Set E} {x y : E}
@@ -69,12 +63,11 @@ theorem mem_convexHull_iff : x β convexHull π s β β t, s β t β Conv
simp_rw [convexHull_eq_iInter, mem_iInter]
#align mem_convex_hull_iff mem_convexHull_iff
-theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s β t :=
- ClosureOperator.closure_le_mkβ_iff (show s β€ t from hst) ht
+theorem convexHull_min : s β t β Convex π t β convexHull π s β t := (convexHull π).closure_min
#align convex_hull_min convexHull_min
theorem Convex.convexHull_subset_iff (ht : Convex π t) : convexHull π s β t β s β t :=
- β¨(subset_convexHull _ _).trans, fun h => convexHull_min h htβ©
+ (show (convexHull π).IsClosed t from ht).closure_le_iff
#align convex.convex_hull_subset_iff Convex.convexHull_subset_iff
@[mono]
@@ -82,7 +75,9 @@ theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π
(convexHull π).monotone hst
#align convex_hull_mono convexHull_mono
-theorem Convex.convexHull_eq : Convex π s β convexHull π s = s := ClosureOperator.mem_mkβ_closed.2
+lemma convexHull_eq_self : convexHull π s = s β Convex π s := (convexHull π).isClosed_iff.symm
+
+alias β¨_, Convex.convexHull_eqβ© := convexHull_eq_self
#align convex.convex_hull_eq Convex.convexHull_eq
@[simp]
This defines sets closed under supremum/infimum, shows that every set has a sup-closure/inf-closure and prove that if every sup-closed/inf-closed set in a sup-semilattice/inf-semilattice has a least upper bound/greatest lower, then the lattice is in fact complete.
As a bonus, we use our new predicate in Order.CompactlyGenerated
.
Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com>
@@ -82,8 +82,7 @@ theorem convexHull_mono (hst : s β t) : convexHull π s β convexHull π
(convexHull π).monotone hst
#align convex_hull_mono convexHull_mono
-theorem Convex.convexHull_eq (hs : Convex π s) : convexHull π s = s :=
- ClosureOperator.mem_mkβ_closed hs
+theorem Convex.convexHull_eq : Convex π s β convexHull π s = s := ClosureOperator.mem_mkβ_closed.2
#align convex.convex_hull_eq Convex.convexHull_eq
@[simp]
@@ -112,11 +112,7 @@ theorem convexHull_nonempty_iff : (convexHull π s).Nonempty β s.Nonempty :=
exact not_congr convexHull_empty_iff
#align convex_hull_nonempty_iff convexHull_nonempty_iff
--- Porting note: `alias` cannot be protected.
---alias convexHull_nonempty_iff β _ Set.Nonempty.convexHull
---attribute [protected] Set.Nonempty.convexHull
-protected theorem Set.Nonempty.convexHull (h : s.Nonempty) : (convexHull π s).Nonempty :=
-convexHull_nonempty_iff.2 h
+protected alias β¨_, Set.Nonempty.convexHullβ© := convexHull_nonempty_iff
#align set.nonempty.convex_hull Set.Nonempty.convexHull
theorem segment_subset_convexHull (hx : x β s) (hy : y β s) : segment π x y β convexHull π s :=
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -26,7 +26,7 @@ open Set
open Pointwise
-variable {π E F : Type _}
+variable {π E F : Type*}
section convexHull
@@ -2,15 +2,12 @@
Copyright (c) 2020 Yury Kudriashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
-
-! This file was ported from Lean 3 source module analysis.convex.hull
-! leanprover-community/mathlib commit 92bd7b1ffeb306a89f450bee126ddd8a284c259d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Convex.Basic
import Mathlib.Order.Closure
+#align_import analysis.convex.hull from "leanprover-community/mathlib"@"92bd7b1ffeb306a89f450bee126ddd8a284c259d"
+
/-!
# Convex hull
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudriashov, YaΓ«l Dillies
! This file was ported from Lean 3 source module analysis.convex.hull
-! leanprover-community/mathlib commit a50170a88a47570ed186b809ca754110590f9476
+! leanprover-community/mathlib commit 92bd7b1ffeb306a89f450bee126ddd8a284c259d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -131,6 +131,11 @@ theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
(convex_singleton x).convexHull_eq
#align convex_hull_singleton convexHull_singleton
+@[simp]
+theorem convexHull_zero : convexHull π (0 : Set E) = 0 :=
+ convexHull_singleton 0
+#align convex_hull_zero convexHull_zero
+
@[simp]
theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y := by
refine (convexHull_min ?_ <| convex_segment _ _).antisymm
Currently, (for both Set
and Finset
) insert_subset
is an iff
lemma stating that insert a s β t
if and only if a β t
and s β t
. For both types, this PR renames this lemma to insert_subset_iff
, and adds an insert_subset
lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a β t) (hs : s β t) : insert a s β t
.
This both aligns the naming with union_subset
and union_subset_iff
, and removes the need for the awkward insert_subset.mpr β¨_,_β©
idiom. It touches a lot of files (too many to list), but in a trivial way.
@@ -135,7 +135,7 @@ theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y := by
refine (convexHull_min ?_ <| convex_segment _ _).antisymm
(segment_subset_convexHull (mem_insert _ _) <| subset_insert _ _ <| mem_singleton _)
- rw [insert_subset, singleton_subset_iff]
+ rw [insert_subset_iff, singleton_subset_iff]
exact β¨left_mem_segment _ _ _, right_mem_segment _ _ _β©
#align convex_hull_pair convexHull_pair
@@ -44,7 +44,7 @@ variable [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
/-- The convex hull of a set `s` is the minimal convex set that includes `s`. -/
def convexHull : ClosureOperator (Set E) :=
- ClosureOperator.mkβ (fun s => β (t : Set E) (_hst : s β t) (_ht : Convex π t), t) (Convex π)
+ ClosureOperator.mkβ (fun s => β (t : Set E) (_ : s β t) (_ : Convex π t), t) (Convex π)
(fun _ =>
Set.subset_iInter fun _ => Set.subset_iInter fun hst => Set.subset_iInter fun _ => hst)
(fun _ => convex_iInter fun _ => convex_iInter fun _ => convex_iInter id) fun _ t hst ht =>
@@ -62,7 +62,7 @@ theorem convex_convexHull : Convex π (convexHull π s) :=
#align convex_convex_hull convex_convexHull
theorem convexHull_eq_iInter : convexHull π s =
- β (t : Set E) (_hst : s β t) (_ht : Convex π t), t :=
+ β (t : Set E) (_ : s β t) (_ : Convex π t), t :=
rfl
#align convex_hull_eq_Inter convexHull_eq_iInter
sSup
/iSup
(#3938)
As discussed on Zulip
supβ
β sSup
infβ
β sInf
supα΅’
β iSup
infα΅’
β iInf
bsupβ
β bsSup
binfβ
β bsInf
bsupα΅’
β biSup
binfα΅’
β biInf
csupβ
β csSup
cinfβ
β csInf
csupα΅’
β ciSup
cinfα΅’
β ciInf
unionβ
β sUnion
interβ
β sInter
unionα΅’
β iUnion
interα΅’
β iInter
bunionβ
β bsUnion
binterβ
β bsInter
bunionα΅’
β biUnion
binterα΅’
β biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -46,9 +46,9 @@ variable [AddCommMonoid E] [AddCommMonoid F] [Module π E] [Module π F]
def convexHull : ClosureOperator (Set E) :=
ClosureOperator.mkβ (fun s => β (t : Set E) (_hst : s β t) (_ht : Convex π t), t) (Convex π)
(fun _ =>
- Set.subset_interα΅’ fun _ => Set.subset_interα΅’ fun hst => Set.subset_interα΅’ fun _ => hst)
- (fun _ => convex_interα΅’ fun _ => convex_interα΅’ fun _ => convex_interα΅’ id) fun _ t hst ht =>
- Set.interα΅’_subset_of_subset t <| Set.interα΅’_subset_of_subset hst <| Set.interα΅’_subset _ ht
+ Set.subset_iInter fun _ => Set.subset_iInter fun hst => Set.subset_iInter fun _ => hst)
+ (fun _ => convex_iInter fun _ => convex_iInter fun _ => convex_iInter id) fun _ t hst ht =>
+ Set.iInter_subset_of_subset t <| Set.iInter_subset_of_subset hst <| Set.iInter_subset _ ht
#align convex_hull convexHull
variable (s : Set E)
@@ -61,15 +61,15 @@ theorem convex_convexHull : Convex π (convexHull π s) :=
ClosureOperator.closure_mem_mkβ s
#align convex_convex_hull convex_convexHull
-theorem convexHull_eq_interα΅’ : convexHull π s =
+theorem convexHull_eq_iInter : convexHull π s =
β (t : Set E) (_hst : s β t) (_ht : Convex π t), t :=
rfl
-#align convex_hull_eq_Inter convexHull_eq_interα΅’
+#align convex_hull_eq_Inter convexHull_eq_iInter
variable {π s} {t : Set E} {x y : E}
theorem mem_convexHull_iff : x β convexHull π s β β t, s β t β Convex π t β x β t := by
- simp_rw [convexHull_eq_interα΅’, mem_interα΅’]
+ simp_rw [convexHull_eq_iInter, mem_iInter]
#align mem_convex_hull_iff mem_convexHull_iff
theorem convexHull_min (hst : s β t) (ht : Convex π t) : convexHull π s β t :=
@@ -133,9 +133,8 @@ theorem convexHull_singleton (x : E) : convexHull π ({x} : Set E) = {x} :=
@[simp]
theorem convexHull_pair (x y : E) : convexHull π {x, y} = segment π x y := by
- refine'
- (convexHull_min _ <| convex_segment _ _).antisymm
- (segment_subset_convexHull (mem_insert _ _) <| mem_insert_of_mem _ <| mem_singleton _)
+ refine (convexHull_min ?_ <| convex_segment _ _).antisymm
+ (segment_subset_convexHull (mem_insert _ _) <| subset_insert _ _ <| mem_singleton _)
rw [insert_subset, singleton_subset_iff]
exact β¨left_mem_segment _ _ _, right_mem_segment _ _ _β©
#align convex_hull_pair convexHull_pair
@@ -204,17 +203,15 @@ section AddCommGroup
variable [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F] (s : Set E)
-theorem AffineMap.image_convexHull (f : E βα΅[π] F) : f '' convexHull π s = convexHull π (f '' s) :=
- by
+theorem AffineMap.image_convexHull (f : E βα΅[π] F) :
+ f '' convexHull π s = convexHull π (f '' s) := by
apply Set.Subset.antisymm
Β· rw [Set.image_subset_iff]
refine' convexHull_min _ ((convex_convexHull π (f '' s)).affine_preimage f)
rw [β Set.image_subset_iff]
exact subset_convexHull π (f '' s)
- Β·
- exact
- convexHull_min (Set.image_subset _ (subset_convexHull π s))
- ((convex_convexHull π s).affine_image f)
+ Β· exact convexHull_min (Set.image_subset _ (subset_convexHull π s))
+ ((convex_convexHull π s).affine_image f)
#align affine_map.image_convex_hull AffineMap.image_convexHull
theorem convexHull_subset_affineSpan : convexHull π s β (affineSpan π s : Set E) :=
The unported dependencies are