Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 77fa4dc

Browse files
committed
feat(data/set/intervals/ord_connected): lemmas about order_dual etc (#16534)
* add `dual_interval`; * add `ord_connected_preimage` for an `order_hom_class`, use it to golf `ord_connected_image`; * add `dual_ord_connected_iff` and `dual_ord_connected`; * one implication from `ord_connected_iff_interval_subset_left` doesn't need `(hx : x ∈ s)`.
1 parent 7cfeb2f commit 77fa4dc

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

src/data/set/intervals/ord_connected.lean

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ that all standard intervals are `ord_connected`.
1919
-/
2020

2121
open_locale interval
22+
open order_dual (to_dual of_dual)
2223

2324
namespace set
2425
section preorder
@@ -144,19 +145,29 @@ instance [densely_ordered α] {s : set α} [hs : ord_connected s] :
144145
⟨λ a b (h : (a : α) < b), let ⟨x, H⟩ := exists_between h in
145146
⟨⟨x, (hs.out a.2 b.2) (Ioo_subset_Icc_self H)⟩, H⟩ ⟩
146147

148+
@[instance] lemma ord_connected_preimage {F : Type*} [order_hom_class F α β] (f : F) {s : set β}
149+
[hs : ord_connected s] : ord_connected (f ⁻¹' s) :=
150+
⟨λ x hx y hy z hz, hs.out hx hy ⟨order_hom_class.mono _ hz.1, order_hom_class.mono _ hz.2⟩⟩
151+
147152
@[instance] lemma ord_connected_image {E : Type*} [order_iso_class E α β] (e : E) {s : set α}
148153
[hs : ord_connected s] : ord_connected (e '' s) :=
149-
begin
150-
constructor,
151-
rintro _ ⟨x, hx, rfl⟩ _ ⟨y, hy, rfl⟩ z ⟨hxz, hzy⟩,
152-
exact ⟨equiv_like.inv e z, hs.out hx hy ⟨(le_map_inv_iff e).mpr hxz, (map_inv_le_iff e).mpr hzy⟩,
153-
equiv_like.right_inv e z⟩
154-
end
154+
by { erw [(e : α ≃o β).image_eq_preimage], apply ord_connected_preimage }
155155

156156
@[instance] lemma ord_connected_range {E : Type*} [order_iso_class E α β] (e : E) :
157157
ord_connected (range e) :=
158158
by simp_rw [← image_univ, ord_connected_image e]
159159

160+
@[simp] lemma dual_ord_connected_iff {s : set α} :
161+
ord_connected (of_dual ⁻¹' s) ↔ ord_connected s :=
162+
begin
163+
simp_rw [ord_connected_def, to_dual.surjective.forall, dual_Icc, subtype.forall'],
164+
exact forall_swap
165+
end
166+
167+
@[instance] lemma dual_ord_connected {s : set α} [ord_connected s] :
168+
ord_connected (of_dual ⁻¹' s) :=
169+
dual_ord_connected_iff.2 ‹_›
170+
160171
end preorder
161172

162173
section linear_order
@@ -177,15 +188,16 @@ lemma ord_connected_iff_interval_subset :
177188
ord_connected s ↔ ∀ ⦃x⦄ (hx : x ∈ s) ⦃y⦄ (hy : y ∈ s), [x, y] ⊆ s :=
178189
⟨λ h, h.interval_subset, λ H, ⟨λ x hx y hy, Icc_subset_interval.trans $ H hx hy⟩⟩
179190

191+
lemma ord_connected_of_interval_subset_left (h : ∀ y ∈ s, [x, y] ⊆ s) :
192+
ord_connected s :=
193+
ord_connected_iff_interval_subset.2 $ λ y hy z hz,
194+
calc [y, z] ⊆ [y, x] ∪ [x, z] : interval_subset_interval_union_interval
195+
... = [x, y] ∪ [x, z] : by rw [interval_swap]
196+
... ⊆ s : union_subset (h y hy) (h z hz)
197+
180198
lemma ord_connected_iff_interval_subset_left (hx : x ∈ s) :
181199
ord_connected s ↔ ∀ ⦃y⦄, y ∈ s → [x, y] ⊆ s :=
182-
begin
183-
refine ⟨λ hs, hs.interval_subset hx, λ hs, ord_connected_iff_interval_subset.2 $ λ y hy z hz, _⟩,
184-
suffices h : [y, x] ∪ [x, z] ⊆ s,
185-
{ exact interval_subset_interval_union_interval.trans h },
186-
rw [interval_swap, union_subset_iff],
187-
exact ⟨hs hy, hs hz⟩,
188-
end
200+
⟨λ hs, hs.interval_subset hx, ord_connected_of_interval_subset_left⟩
189201

190202
lemma ord_connected_iff_interval_subset_right (hx : x ∈ s) :
191203
ord_connected s ↔ ∀ ⦃y⦄, y ∈ s → [y, x] ⊆ s :=

src/data/set/intervals/unordered_interval.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ make the notation available.
2727

2828
universe u
2929
open_locale pointwise
30+
open order_dual (to_dual of_dual)
3031

3132
namespace set
3233

@@ -39,6 +40,8 @@ def interval (a b : α) := Icc (min a b) (max a b)
3940

4041
localized "notation (name := set.interval) `[`a `, ` b `]` := set.interval a b" in interval
4142

43+
@[simp] lemma dual_interval (a b : α) : [to_dual a, to_dual b] = of_dual ⁻¹' [a, b] := dual_Icc
44+
4245
@[simp] lemma interval_of_le (h : a ≤ b) : [a, b] = Icc a b :=
4346
by rw [interval, min_eq_left h, max_eq_right h]
4447

0 commit comments

Comments
 (0)