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
}.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
}.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
}.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
}.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
}.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.