Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Generalizable Variables A B C R S f g z. (* If a function between strict partial orders is order preserving (back), we can derive that it is strictly order preserving (back) *) Section strictly_order_preserving. Context `{FullPartialOrder A} `{FullPartialOrder B}.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f

StrictlyOrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f

StrictlyOrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E: x < y

f x < f y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E: ((x ≤ y) * (x ≶ y))%type

f x < f y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E: ((x ≤ y) * (x ≶ y))%type

((f x ≤ f y) * (f x ≶ f y))%type
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E1: x ≤ y
E2: x ≶ y

((f x ≤ f y) * (f x ≶ f y))%type
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E1: x ≤ y
E2: x ≶ y

f x ≤ f y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E1: x ≤ y
E2: x ≶ y
f x ≶ f y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E1: x ≤ y
E2: x ≶ y

f x ≤ f y
apply (order_preserving f);trivial.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsStrongInjective0: IsStrongInjective f
x, y: A
E1: x ≤ y
E2: x ≶ y

f x ≶ f y
apply (strong_injective f);trivial. Qed.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f

StrictlyOrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f

StrictlyOrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E: f x < f y

x < y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E: ((f x ≤ f y) * (f x ≶ f y))%type

x < y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E: ((f x ≤ f y) * (f x ≶ f y))%type

((x ≤ y) * (x ≶ y))%type
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E1: f x ≤ f y
E2: f x ≶ f y

((x ≤ y) * (x ≶ y))%type
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E1: f x ≤ f y
E2: f x ≶ f y

x ≤ y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E1: f x ≤ f y
E2: f x ≶ f y
x ≶ y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E1: f x ≤ f y
E2: f x ≶ f y

x ≤ y
apply (order_reflecting f);trivial.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
StrongExtensionality0: StrongExtensionality f
x, y: A
E1: f x ≤ f y
E2: f x ≶ f y

x ≶ y
apply (strong_extensionality f);trivial. Qed. End strictly_order_preserving. (* For structures with a trivial apartness relation we have a stronger result of the above *) Section strictly_order_preserving_dec. Context `{FullPartialOrder A} `{!TrivialApart A} `{FullPartialOrder B} `{!TrivialApart B}. Local Existing Instance strict_po_apart.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsInjective0: IsInjective f

StrictlyOrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsInjective0: IsInjective f

StrictlyOrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderPreserving0: OrderPreserving (f : A -> B)
IsInjective0: IsInjective f
X: IsStrongInjective f

StrictlyOrderPreserving f
apply _. Qed.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)

StrictlyOrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)

StrictlyOrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPartialOrder Ale Alt
TrivialApart0: TrivialApart A
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPartialOrder Ale0 Alt0
TrivialApart1: TrivialApart B
f: A -> B
OrderReflecting0: OrderReflecting (f : A -> B)
X: StrongExtensionality f

StrictlyOrderReflecting f
apply _. Qed. End strictly_order_preserving_dec. Section pseudo_injective. Context `{PseudoOrder A} `{PseudoOrder B}. Local Existing Instance pseudo_order_apart.
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)

StrongExtensionality f
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)

StrongExtensionality f
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)
x, y: A
E: f x ≶ f y

x ≶ y
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)
x, y: A
E: ((f x < f y) + (f y < f x))%type

((x < y) + (y < x))%type
destruct E; [left | right]; apply (strictly_order_reflecting f);trivial. Qed.
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)

IsStrongInjective f
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)

IsStrongInjective f
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)

forall x y : A, x ≶ y -> f x ≶ f y
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)
x, y: A
E: x ≶ y

f x ≶ f y
A: Type
Aap: Apart A
Alt: Lt A
H: PseudoOrder Alt
B: Type
Aap0: Apart B
Alt0: Lt B
H0: PseudoOrder Alt0
f: A -> B
StrictOrderEmbedding0: StrictOrderEmbedding (f : A -> B)
x, y: A
E: ((x < y) + (y < x))%type

((f x < f y) + (f y < f x))%type
destruct E; [left | right]; apply (strictly_order_preserving f);trivial. Qed. End pseudo_injective. (* If a function between pseudo partial orders is strictly order preserving (back), we can derive that it is order preserving (back) *) Section full_pseudo_strictly_preserving. Context `{FullPseudoOrder A} `{FullPseudoOrder B}. Local Existing Instance pseudo_order_apart.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)

OrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)

OrderPreserving f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)
x, y: A
E1: x ≤ y

f x ≤ f y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)
x, y: A
E1: ~ (y < x)

~ (f y < f x)
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)
x, y: A
E1: ~ (y < x)
E2: f y < f x

Empty
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)
x, y: A
E1: ~ (y < x)
E2: f y < f x

y < x
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderReflecting0: StrictlyOrderReflecting (f : A -> B)
x, y: A
E1: ~ (y < x)
E2: f y < f x

f y < f x
trivial. Qed.
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)

OrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)

OrderReflecting f
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)
x, y: A
E1: f x ≤ f y

x ≤ y
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)
x, y: A
E1: ~ (f y < f x)

~ (y < x)
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)
x, y: A
E1: ~ (f y < f x)
E2: y < x

Empty
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)
x, y: A
E1: ~ (f y < f x)
E2: y < x

f y < f x
A: Type
Aap: Apart A
Ale: Le A
Alt: Lt A
H: FullPseudoOrder Ale Alt
B: Type
Aap0: Apart B
Ale0: Le B
Alt0: Lt B
H0: FullPseudoOrder Ale0 Alt0
f: A -> B
StrictlyOrderPreserving0: StrictlyOrderPreserving (f : A -> B)
x, y: A
E1: ~ (f y < f x)
E2: y < x

y < x
trivial. Qed. End full_pseudo_strictly_preserving. (* Some helper lemmas to easily transform order preserving instances. *) Section order_preserving_ops. Context `{Le R}.
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderPreserving0: OrderPreserving (op z)

OrderPreserving (fun y : R => op y z)
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderPreserving0: OrderPreserving (op z)

OrderPreserving (fun y : R => op y z)
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderPreserving0: OrderPreserving (op z)
x, y: R
E: x ≤ y

op x z ≤ op y z
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderPreserving0: OrderPreserving (op z)
x, y: R
E: x ≤ y

op z x ≤ op z y
apply order_preserving;trivial. Qed.
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderReflecting0: OrderReflecting (op z)

OrderReflecting (fun y : R => op y z)
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderReflecting0: OrderReflecting (op z)

OrderReflecting (fun y : R => op y z)
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderReflecting0: OrderReflecting (op z)
x, y: R
E: op x z ≤ op y z

x ≤ y
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderReflecting0: OrderReflecting (op z)
x, y: R
E: op x z ≤ op y z

op z x ≤ op z y
R: Type
H: Le R
op: R -> R -> R
Commutative0: Commutative op
z: R
OrderReflecting0: OrderReflecting (op z)
x, y: R
E: op x z ≤ op y z

op x z ≤ op y z
trivial. Qed.
R: Type
H: Le R
op: R -> R -> R
Zero0: Zero R
H0: forall z : R, PropHolds (0 ≤ z) -> OrderPreserving (op z)
z: R

0 ≤ z -> forall x y : R, x ≤ y -> op z x ≤ op z y
R: Type
H: Le R
op: R -> R -> R
Zero0: Zero R
H0: forall z : R, PropHolds (0 ≤ z) -> OrderPreserving (op z)
z: R

0 ≤ z -> forall x y : R, x ≤ y -> op z x ≤ op z y
auto. Qed.
R: Type
H: Le R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 ≤ z) -> OrderPreserving (fun y : R => op y z)
z: R

0 ≤ z -> forall x y : R, x ≤ y -> op x z ≤ op y z
R: Type
H: Le R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 ≤ z) -> OrderPreserving (fun y : R => op y z)
z: R

0 ≤ z -> forall x y : R, x ≤ y -> op x z ≤ op y z
apply E. Qed. Context `{Lt R}.
R: Type
H: Le R
H0: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> OrderReflecting (op z)
z: R

0 < z -> forall x y : R, op z x ≤ op z y -> x ≤ y
R: Type
H: Le R
H0: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> OrderReflecting (op z)
z: R

0 < z -> forall x y : R, op z x ≤ op z y -> x ≤ y
apply E. Qed.
R: Type
H: Le R
H0: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> OrderReflecting (fun y : R => op y z)
z: R

0 < z -> forall x y : R, op x z ≤ op y z -> x ≤ y
R: Type
H: Le R
H0: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> OrderReflecting (fun y : R => op y z)
z: R

0 < z -> forall x y : R, op x z ≤ op y z -> x ≤ y
apply E. Qed. End order_preserving_ops. Section strict_order_preserving_ops. Context `{Lt R}.
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderPreserving0: StrictlyOrderPreserving (op z)

StrictlyOrderPreserving (fun y : R => op y z)
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderPreserving0: StrictlyOrderPreserving (op z)

StrictlyOrderPreserving (fun y : R => op y z)
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderPreserving0: StrictlyOrderPreserving (op z)
x, y: R
E: x < y

op x z < op y z
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderPreserving0: StrictlyOrderPreserving (op z)
x, y: R
E: x < y

op z x < op z y
apply strictly_order_preserving;trivial. Qed.
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderReflecting0: StrictlyOrderReflecting (op z)

StrictlyOrderReflecting (fun y : R => op y z)
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderReflecting0: StrictlyOrderReflecting (op z)

StrictlyOrderReflecting (fun y : R => op y z)
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderReflecting0: StrictlyOrderReflecting (op z)
x, y: R
E: op x z < op y z

x < y
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderReflecting0: StrictlyOrderReflecting (op z)
x, y: R
E: op x z < op y z

op z x < op z y
R: Type
H: Lt R
op: R -> R -> R
Commutative0: Commutative op
z: R
StrictlyOrderReflecting0: StrictlyOrderReflecting (op z)
x, y: R
E: op x z < op y z

op x z < op y z
trivial. Qed.
R: Type
H: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> StrictlyOrderPreserving (op z)
z: R

0 < z -> forall x y : R, x < y -> op z x < op z y
R: Type
H: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> StrictlyOrderPreserving (op z)
z: R

0 < z -> forall x y : R, x < y -> op z x < op z y
apply E. Qed.
R: Type
H: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> StrictlyOrderPreserving (fun y : R => op y z)
z: R

0 < z -> forall x y : R, x < y -> op x z < op y z
R: Type
H: Lt R
op: R -> R -> R
Zero0: Zero R
E: forall z : R, PropHolds (0 < z) -> StrictlyOrderPreserving (fun y : R => op y z)
z: R

0 < z -> forall x y : R, x < y -> op x z < op y z
apply E. Qed. End strict_order_preserving_ops.
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble

(forall x y : A, x ≤ y <-> f x ≤ f y) -> PartialOrder Ale
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble

(forall x y : A, x ≤ y <-> f x ≤ f y) -> PartialOrder Ale
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

PartialOrder Ale
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

IsHSet A
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
is_mere_relation A Ale
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
Reflexive le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
Transitive le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
AntiSymmetric le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

IsHSet A
apply _.
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

is_mere_relation A Ale
apply _.
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

Reflexive le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x: A

x ≤ x
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x: A

f x ≤ f x
apply reflexivity.
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

Transitive le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x, y, z: A
E1: x ≤ y
E2: y ≤ z

x ≤ z
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x, y, z: A
E1: x ≤ y
E2: y ≤ z

f x ≤ f z
transitivity (f y); apply P;trivial.
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y

AntiSymmetric le
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x, y: A
E1: x ≤ y
E2: y ≤ x

x = y
A: Type
IsHSet0: IsHSet A
Ale: Le A
is_mere_relation0: is_mere_relation A Ale
B: Type
Ble: Le B
f: A -> B
IsInjective0: IsInjective f
PartialOrder0: PartialOrder Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x, y: A
E1: x ≤ y
E2: y ≤ x

f x = f y
apply (antisymmetry (≤)); apply P;trivial. Qed.
A: Type
Ale: Le A
B: Type
Ble: Le B
f: A -> B
TotalRelation0: TotalRelation Ble

(forall x y : A, x ≤ y <-> f x ≤ f y) -> TotalRelation Ale
A: Type
Ale: Le A
B: Type
Ble: Le B
f: A -> B
TotalRelation0: TotalRelation Ble

(forall x y : A, x ≤ y <-> f x ≤ f y) -> TotalRelation Ale
A: Type
Ale: Le A
B: Type
Ble: Le B
f: A -> B
TotalRelation0: TotalRelation Ble
P: forall x y : A, x ≤ y <-> f x ≤ f y
x, y: A

(Ale x y + Ale y x)%type
destruct (total (≤) (f x) (f y)); [left | right]; apply P;trivial. Qed.
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt

(forall x y : A, x < y <-> f x < f y) -> StrictOrder Alt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt

(forall x y : A, x < y <-> f x < f y) -> StrictOrder Alt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y

StrictOrder Alt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y

is_mere_relation A lt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
Irreflexive lt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
Transitive lt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y

is_mere_relation A lt
apply _.
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y

Irreflexive lt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
x: A
E: x < x

Empty
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
x: A
E: x < x

f x < f x
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
x: A
E: x < x

x < x
trivial.
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y

Transitive lt
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
x, y, z: A
E1: x < y
E2: y < z

x < z
A: Type
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
Blt: Lt B
f: A -> B
StrictOrder0: StrictOrder Blt
P: forall x y : A, x < y <-> f x < f y
x, y, z: A
E1: x < y
E2: y < z

f x < f z
transitivity (f y); apply P;trivial. Qed.
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt

(forall x y : A, x < y <-> f x < f y) -> PseudoOrder Alt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt

(forall x y : A, x < y <-> f x < f y) -> PseudoOrder Alt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f

(forall x y : A, x < y <-> f x < f y) -> PseudoOrder Alt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y

PseudoOrder Alt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y

forall x y : A, ~ (x < y < x)
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
CoTransitive lt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
forall x y : A, x ≶ y <-> (x < y) + (y < x)
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y

forall x y : A, ~ (x < y < x)
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: x < y < x

Empty
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: x < y < x

f x < f y < f x
split; apply P,E.
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y

CoTransitive lt
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: x < y
z: A

hor (x < z) (z < y)
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: f x < f y
z: A

hor (x < z) (z < y)
apply (merely_destruct (cotransitive E (f z))); intros [?|?];apply tr; [left | right]; apply P;trivial.
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y

forall x y : A, x ≶ y <-> (x < y) + (y < x)
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: x ≶ y

((x < y) + (y < x))%type
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: ((x < y) + (y < x))%type
x ≶ y
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: x ≶ y

((x < y) + (y < x))%type
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: f x ≶ f y

((x < y) + (y < x))%type
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: ((f x < f y) + (f y < f x))%type

((x < y) + (y < x))%type
destruct E; [left | right]; apply P;trivial.
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: ((x < y) + (y < x))%type

x ≶ y
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: ((x < y) + (y < x))%type

f x ≶ f y
A: Type
Aap: Apart A
H: IsApart A
Alt: Lt A
is_mere_relation0: is_mere_relation A lt
B: Type
H0: Apart B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
PseudoOrder0: PseudoOrder Blt
X: StrongExtensionality f
P: forall x y : A, x < y <-> f x < f y
x, y: A
E: ((x < y) + (y < x))%type

((f x < f y) + (f y < f x))%type
destruct E; [left | right]; apply P;trivial. Qed.
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt

(forall x y : A, x ≤ y <-> f x ≤ f y) -> (forall x y : A, x < y <-> f x < f y) -> FullPseudoOrder Ale Alt
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt

(forall x y : A, x ≤ y <-> f x ≤ f y) -> (forall x y : A, x < y <-> f x < f y) -> FullPseudoOrder Ale Alt
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y

FullPseudoOrder Ale Alt
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y

is_mere_relation A Ale
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
PseudoOrder Alt
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
forall x y : A, x ≤ y <-> ~ (y < x)
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y

is_mere_relation A Ale
apply _.
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y

PseudoOrder Alt
apply (projected_pseudo_order f);assumption.
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y

forall x y : A, x ≤ y <-> ~ (y < x)
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: x ≤ y

~ (y < x)
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)
x ≤ y
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: x ≤ y

~ (y < x)
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: x ≤ y
F: y < x

Empty
destruct (le_not_lt_flip (f y) (f x));[apply P1|apply P2];trivial.
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)

x ≤ y
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)

f x ≤ f y
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)

~ (f y < f x)
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)
F: f y < f x

Empty
A: Type
Aap: Apart A
H: IsApart A
Ale: Le A
Alt: Lt A
is_mere_relation0: is_mere_relation A le
is_mere_relation1: is_mere_relation A lt
B: Type
H0: Apart B
Ble: Le B
Blt: Lt B
f: A -> B
IsStrongInjective0: IsStrongInjective f
FullPseudoOrder0: FullPseudoOrder Ble Blt
P1: forall x y : A, x ≤ y <-> f x ≤ f y
P2: forall x y : A, x < y <-> f x < f y
x, y: A
E: ~ (y < x)
F: f y < f x

f y < f x
trivial. Qed.
A: Type
Ale: Le A
H: PartialOrder Ale

OrderPreserving id
A: Type
Ale: Le A
H: PartialOrder Ale

OrderPreserving id
red;trivial. Qed.
A: Type
Ale: Le A
H: PartialOrder Ale

OrderReflecting id
A: Type
Ale: Le A
H: PartialOrder Ale

OrderReflecting id
red;trivial. Qed. Section composition. Context {A B C} `{Le A} `{Le B} `{Le C} (f : A -> B) (g : B -> C).
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C

OrderPreserving f -> OrderPreserving g -> OrderPreserving (g ∘ f)
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C

OrderPreserving f -> OrderPreserving g -> OrderPreserving (g ∘ f)
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderPreserving f
X0: OrderPreserving g
x, y: A
X1: x ≤ y

(g ∘ f) x ≤ (g ∘ f) y
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderPreserving f
X0: OrderPreserving g
x, y: A
X1: x ≤ y

g (f x) ≤ g (f y)
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderPreserving f
X0: OrderPreserving g
x, y: A
X1: x ≤ y

x ≤ y
trivial. Qed.
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C

OrderReflecting f -> OrderReflecting g -> OrderReflecting (g ∘ f)
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C

OrderReflecting f -> OrderReflecting g -> OrderReflecting (g ∘ f)
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderReflecting f
X0: OrderReflecting g
x, y: A
E: (g ∘ f) x ≤ (g ∘ f) y

x ≤ y
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderReflecting f
X0: OrderReflecting g
x, y: A
E: g (f x) ≤ g (f y)

x ≤ y
A, B, C: Type
H: Le A
H0: Le B
H1: Le C
f: A -> B
g: B -> C
X: OrderReflecting f
X0: OrderReflecting g
x, y: A
E: x ≤ y

x ≤ y
trivial. Qed. Instance compose_order_embedding: OrderEmbedding f -> OrderEmbedding g -> OrderEmbedding (g ∘ f) := {}. End composition. #[export] Hint Extern 4 (OrderPreserving (_ ∘ _)) => class_apply @compose_order_preserving : typeclass_instances. #[export] Hint Extern 4 (OrderReflecting (_ ∘ _)) => class_apply @compose_order_reflecting : typeclass_instances. #[export] Hint Extern 4 (OrderEmbedding (_ ∘ _)) => class_apply @compose_order_embedding : typeclass_instances.