@@ -676,27 +676,44 @@ protected noncomputable def strict_mono_on.order_iso {α β} [linear_order α] [
676
676
{ to_equiv := hf.inj_on.bij_on_image.equiv _,
677
677
map_rel_iff' := λ x y, hf.le_iff_le x.2 y.2 }
678
678
679
+ namespace strict_mono
680
+
681
+ variables {α β} [linear_order α] [preorder β]
682
+ variables (f : α → β) (h_mono : strict_mono f) (h_surj : function.surjective f)
683
+
679
684
/-- A strictly monotone function from a linear order is an order isomorphism between its domain and
680
685
its range. -/
681
- protected noncomputable def strict_mono.order_iso {α β} [linear_order α] [preorder β] (f : α → β)
682
- (h_mono : strict_mono f) : α ≃o set.range f :=
686
+ @[simps apply] protected noncomputable def order_iso : α ≃o set.range f :=
683
687
{ to_equiv := equiv.of_injective f h_mono.injective,
684
688
map_rel_iff' := λ a b, h_mono.le_iff_le }
685
689
686
690
/-- A strictly monotone surjective function from a linear order is an order isomorphism. -/
687
- noncomputable def strict_mono.order_iso_of_surjective {α β} [linear_order α] [preorder β]
688
- (f : α → β) (h_mono : strict_mono f) (h_surj : function.surjective f) : α ≃o β :=
691
+ noncomputable def order_iso_of_surjective : α ≃o β :=
689
692
(h_mono.order_iso f).trans $ (order_iso.set_congr _ _ h_surj.range_eq).trans order_iso.set.univ
690
693
694
+ @[simp] lemma coe_order_iso_of_surjective :
695
+ (order_iso_of_surjective f h_mono h_surj : α → β) = f :=
696
+ rfl
697
+
698
+ @[simp] lemma order_iso_of_surjective_symm_apply_self (a : α) :
699
+ (order_iso_of_surjective f h_mono h_surj).symm (f a) = a :=
700
+ (order_iso_of_surjective f h_mono h_surj).symm_apply_apply _
701
+
702
+ lemma order_iso_of_surjective_self_symm_apply (b : β) :
703
+ f ((order_iso_of_surjective f h_mono h_surj).symm b) = b :=
704
+ (order_iso_of_surjective f h_mono h_surj).apply_symm_apply _
705
+
691
706
/-- A strictly monotone function with a right inverse is an order isomorphism. -/
692
- def strict_mono.order_iso_of_right_inverse {α β} [linear_order α] [preorder β]
693
- (f : α → β) (h_mono : strict_mono f) ( g : β → α) (hg : function.right_inverse g f) : α ≃o β :=
707
+ @[simps {fully_applied := false}] def order_iso_of_right_inverse
708
+ (g : β → α) (hg : function.right_inverse g f) : α ≃o β :=
694
709
{ to_fun := f,
695
710
inv_fun := g,
696
711
left_inv := λ x, h_mono.injective $ hg _,
697
712
right_inv := hg,
698
713
.. order_embedding.of_strict_mono f h_mono }
699
714
715
+ end strict_mono
716
+
700
717
/-- An order isomorphism is also an order isomorphism between dual orders. -/
701
718
protected def order_iso.dual [has_le α] [has_le β] (f : α ≃o β) :
702
719
order_dual α ≃o order_dual β := ⟨f.to_equiv, λ _ _, f.map_rel_iff⟩
0 commit comments