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

Commit afd8a52

Browse files
committed
feat(order/hom/basic): add simp lemmas for strict_mono.order_iso and friends (#13606)
Formalized as part of the Sphere Eversion project.
1 parent 8c262da commit afd8a52

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/order/hom/basic.lean

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -676,27 +676,44 @@ protected noncomputable def strict_mono_on.order_iso {α β} [linear_order α] [
676676
{ to_equiv := hf.inj_on.bij_on_image.equiv _,
677677
map_rel_iff' := λ x y, hf.le_iff_le x.2 y.2 }
678678

679+
namespace strict_mono
680+
681+
variables {α β} [linear_order α] [preorder β]
682+
variables (f : α → β) (h_mono : strict_mono f) (h_surj : function.surjective f)
683+
679684
/-- A strictly monotone function from a linear order is an order isomorphism between its domain and
680685
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 :=
683687
{ to_equiv := equiv.of_injective f h_mono.injective,
684688
map_rel_iff' := λ a b, h_mono.le_iff_le }
685689

686690
/-- 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 β :=
689692
(h_mono.order_iso f).trans $ (order_iso.set_congr _ _ h_surj.range_eq).trans order_iso.set.univ
690693

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+
691706
/-- 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 β :=
694709
{ to_fun := f,
695710
inv_fun := g,
696711
left_inv := λ x, h_mono.injective $ hg _,
697712
right_inv := hg,
698713
.. order_embedding.of_strict_mono f h_mono }
699714

715+
end strict_mono
716+
700717
/-- An order isomorphism is also an order isomorphism between dual orders. -/
701718
protected def order_iso.dual [has_le α] [has_le β] (f : α ≃o β) :
702719
order_dual α ≃o order_dual β := ⟨f.to_equiv, λ _ _, f.map_rel_iff⟩

0 commit comments

Comments
 (0)