@@ -19,6 +19,7 @@ that all standard intervals are `ord_connected`.
19
19
-/
20
20
21
21
open_locale interval
22
+ open order_dual (to_dual of_dual)
22
23
23
24
namespace set
24
25
section preorder
@@ -144,19 +145,29 @@ instance [densely_ordered α] {s : set α} [hs : ord_connected s] :
144
145
⟨λ a b (h : (a : α) < b), let ⟨x, H⟩ := exists_between h in
145
146
⟨⟨x, (hs.out a.2 b.2 ) (Ioo_subset_Icc_self H)⟩, H⟩ ⟩
146
147
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
+
147
152
@[instance] lemma ord_connected_image {E : Type *} [order_iso_class E α β] (e : E) {s : set α}
148
153
[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 }
155
155
156
156
@[instance] lemma ord_connected_range {E : Type *} [order_iso_class E α β] (e : E) :
157
157
ord_connected (range e) :=
158
158
by simp_rw [← image_univ, ord_connected_image e]
159
159
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
+
160
171
end preorder
161
172
162
173
section linear_order
@@ -177,15 +188,16 @@ lemma ord_connected_iff_interval_subset :
177
188
ord_connected s ↔ ∀ ⦃x⦄ (hx : x ∈ s) ⦃y⦄ (hy : y ∈ s), [x, y] ⊆ s :=
178
189
⟨λ h, h.interval_subset, λ H, ⟨λ x hx y hy, Icc_subset_interval.trans $ H hx hy⟩⟩
179
190
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
+
180
198
lemma ord_connected_iff_interval_subset_left (hx : x ∈ s) :
181
199
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⟩
189
201
190
202
lemma ord_connected_iff_interval_subset_right (hx : x ∈ s) :
191
203
ord_connected s ↔ ∀ ⦃y⦄, y ∈ s → [y, x] ⊆ s :=
0 commit comments