Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2018       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)
(****************************************************************************)
(*                                                                          *)
(*                         Naive Set Theory in Coq                          *)
(*                                                                          *)
(*                     INRIA                        INRIA                   *)
(*              Rocquencourt                        Sophia-Antipolis        *)
(*                                                                          *)
(*                                 Coq V6.1                                 *)
(*									    *)
(*			         Gilles Kahn 				    *)
(*				 Gerard Huet				    *)
(*									    *)
(*									    *)
(*                                                                          *)
(* Acknowledgments: This work was started in July 1993 by F. Prost. Thanks  *)
(* to the Newton Institute for providing an exceptional work environment    *)
(* in Summer 1995. Several developments by E. Ledinot were an inspiration.  *)
(****************************************************************************)

Require Export Ensembles.
Require Export Relations_1.

Section Partial_orders.
  Variable U : Type.

  Definition Carrier := Ensemble U.

  Definition Rel := Relation U.

  Record PO : Type := Definition_of_PO
    { Carrier_of : Ensemble U;
      Rel_of : Relation U;
      PO_cond1 : Inhabited U Carrier_of;
      PO_cond2 : Order U Rel_of }.
  Variable p : PO.

  Definition Strict_Rel_of : Rel := fun x y:U => Rel_of p x y /\ x <> y.

  Inductive covers (y x:U) : Prop :=
    Definition_of_covers :
    Strict_Rel_of x y ->
    ~ (exists z : _, Strict_Rel_of x z /\ Strict_Rel_of z y) ->
    covers y x.

End Partial_orders.

Hint Unfold Carrier_of Rel_of Strict_Rel_of: sets.
Hint Resolve Definition_of_covers: sets.


Section Partial_order_facts.
  Variable U : Type.
  Variable D : PO U.

  
U:Type
D:PO U

forall x y z : U, Strict_Rel_of U D x y -> Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Strict_Rel_of U D x y -> Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Rel_of U D x y /\ x <> y -> Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Rel_of U D x y /\ x <> y -> Rel_of U D y z -> Rel_of U D x z /\ x <> z
U:Type
D:PO U

forall (Carrier_of0 : Ensemble U) (Rel_of0 : Relation U), Inhabited U Carrier_of0 -> Order U Rel_of0 -> forall x y z : U, Rel_of0 x y /\ x <> y -> Rel_of0 y z -> Rel_of0 x z /\ x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R

Reflexive U R -> Transitive U R -> Antisymmetric U R -> forall x y z : U, R x y /\ x <> y -> R y z -> R x z /\ x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y /\ x <> y
H'5:R y z

R x z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y /\ x <> y
H'5:R y z
x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y /\ x <> y
H'5:R y z

R x z
apply H'2 with (y := y); tauto.
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y /\ x <> y
H'5:R y z

x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y /\ x <> y
H'5:R y z
H'6:x = z

False
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'5:R y z
H'6:x = z
H'7:R x y
H'8:x <> y

x = y
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'5:R y z
H'6:x = z
H'7:R x y
H'8:x <> y

R y x
rewrite H'6; tauto. Qed.
U:Type
D:PO U

forall x y z : U, Rel_of U D x y -> Strict_Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Rel_of U D x y -> Strict_Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Rel_of U D x y -> Rel_of U D y z /\ y <> z -> Strict_Rel_of U D x z
U:Type
D:PO U

forall x y z : U, Rel_of U D x y -> Rel_of U D y z /\ y <> z -> Rel_of U D x z /\ x <> z
U:Type
D:PO U

forall (Carrier_of0 : Ensemble U) (Rel_of0 : Relation U), Inhabited U Carrier_of0 -> Order U Rel_of0 -> forall x y z : U, Rel_of0 x y -> Rel_of0 y z /\ y <> z -> Rel_of0 x z /\ x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R

Reflexive U R -> Transitive U R -> Antisymmetric U R -> forall x y z : U, R x y -> R y z /\ y <> z -> R x z /\ x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'5:R y z /\ y <> z

R x z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'5:R y z /\ y <> z
x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'5:R y z /\ y <> z

R x z
apply H'2 with (y := y); tauto.
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'5:R y z /\ y <> z

x <> z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'5:R y z /\ y <> z
H'6:x = z

False
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'6:x = z
H'7:R y z
H'8:y <> z

y = z
U:Type
D:PO U
C:Ensemble U
R:Relation U
H':Inhabited U C
H'0:Order U R
H'1:Reflexive U R
H'2:Transitive U R
H'3:Antisymmetric U R
x, y, z:U
H'4:R x y
H'6:x = z
H'7:R y z
H'8:y <> z

R z y
rewrite <- H'6; auto. Qed.
U:Type
D:PO U

Transitive U (Strict_Rel_of U D)
U:Type
D:PO U

forall x y z : U, Strict_Rel_of U D x y -> Strict_Rel_of U D y z -> Strict_Rel_of U D x z
U:Type
D:PO U
x, y, z:U
H':Strict_Rel_of U D x y
H'0:Strict_Rel_of U D y z

Strict_Rel_of U D x z
apply Strict_Rel_Transitive_with_Rel with (y := y); [ intuition | unfold Strict_Rel_of in H', H'0; intuition ]. Qed. End Partial_order_facts.