Require Export Relation_Definitions.
Record DirectedSet := {
DS_set : Type;
DS_ord : relation DS_set;
DS_ord_cond : preorder DS_ord;
DS_join_cond : forall i j:DS_set, exists k:DS_set,
DS_ord i k /\ DS_ord j k
}.
Arguments DS_ord {d}.
Arguments DS_ord_cond {d}.
Arguments DS_join_cond {d}.
Section for_large.
Variable I : DirectedSet.
Definition eventually (P : DS_set I -> Prop) : Prop :=
exists i:DS_set I, forall j:DS_set I,
DS_ord i j -> P j.

(* Specifications: *)
Lemma eventually_and: forall (P Q: DS_set I -> Prop),
eventually P -> eventually Q ->
eventually (fun i:DS_set I => P i /\ Q i).
Lemma eventually_impl_base: forall (P Q: DS_set I -> Prop),
(forall i:DS_set I, P i -> Q i) ->
eventually P -> eventually Q.
Lemma eventually_impl: forall (P Q: DS_set I -> Prop),
eventually P -> eventually (fun i:DS_set I => P i -> Q i) ->
eventually Q.