#[local] Infix "\in" := E.In.
#[local] Infix "\subseteq" := E.isSubsetOf.
#[local] Obligation Tactic := i.
Create HintDb poset_hints.
#[program]
Definition mkProsetFrom_ltProp {A : Type} (ltProp : A -> A -> Prop) (ltProp_StrictOrder : StrictOrder ltProp) : isProset A :=
{| leProp x y := ltProp x y \/ x = y; Proset_isSetoid := mkSetoid_from_eq; |}.
Next Obligation.
split; ii; firstorder try congruence.
Qed.
Next Obligation.
intros x y. cbn. unfold flip. split; firstorder try congruence. contradiction (StrictOrder_Irreflexive x). firstorder.
Qed.
Class isPoset (A : Type) : Type :=
{ Poset_isProset :: isProset A
; Poset_eqProp_spec (x : A) (y : A)
: x == y <-> x = y
}.
Infix "≦" := (leProp (isProset := Poset_isProset)) : type_scope.

Lemma eqPropCompatible_dom_isPoset {A : Type} {B : Type} `{A_isPoset : isPoset A} `{B_isSetoid : isSetoid B}
: forall f : A -> B, eqPropCompatible1 f.