Zulip Chat Archive
Stream: general
Topic: strict monotone maps
Johan Commelin (Feb 28 2019 at 08:19):
I know very little about the hierarchy of order structures in mathlib. For the perfectoid project we do need a little bit of it. Yesterday I wrote the following helper file:
import order.basic open function variables {α : Type*} {β : Type*} def strict_mono [preorder α] [preorder β] (f : α → β) := ∀ a b, a < b → f a < f b namespace strict_mono variables [linear_order α] [preorder β] {f : α → β} lemma lt_iff_lt (H : strict_mono f) {a b} : f a < f b ↔ a < b := ⟨λ h, ((lt_trichotomy b a) .resolve_left $ λ h', lt_asymm h $ H _ _ h') .resolve_left $ λ e, ne_of_gt h $ congr_arg _ e, H _ _⟩ lemma le_iff_le (H : strict_mono f) {a b} : f a ≤ f b ↔ a ≤ b := ⟨λ h, le_of_not_gt $ λ h', not_le_of_lt (H b a h') h, λ h, (lt_or_eq_of_le h).elim (λ h', le_of_lt (H _ _ h')) (λ h', h' ▸ le_refl _)⟩ lemma injective (H : strict_mono f) : function.injective f | a b e := ((lt_trichotomy a b) .resolve_left $ λ h, ne_of_lt (H _ _ h) e) .resolve_right $ λ h, ne_of_gt (H _ _ h) e lemma monotone (H : strict_mono f) : monotone f := λ a b, iff.mpr $ H.le_iff_le end strict_mono section variables [partial_order α] [partial_order β] {f : α → β} lemma strict_mono_of_monotone_of_injective (h₁ : monotone f) (h₂ : injective f) : strict_mono f := λ a b h, begin rw lt_iff_le_and_ne at ⊢ h, exact ⟨h₁ h.1, λ e, h.2 (h₂ e)⟩ end end
Johan Commelin (Feb 28 2019 at 08:20):
Am I duplicating stuff that is already in mathlib, or does this have a place.
The word strict_mono
appears in mathlib, but the definition
is not there.
Johan Commelin (Feb 28 2019 at 08:21):
There is also order_embedding
, and in particular of_monotone
, but
def of_monotone [is_trichotomous α r] [is_asymm β s] (f : α → β) (H : ∀ a b, r a b → s (f a) (f b)) : r ≼o s := _
doesn't actually mention monotone
or classes in the order hierarchy. Is this nevertheless the way we ought to go?
Last updated: Dec 20 2023 at 11:08 UTC