Require Coq.Wellfounded.Wellfounded. (* Can't Import this, because that brings the identifier B into
scope, which breaks things like `{ageable B}  in this file.
Stupid feature of Coq, that the B in `{ageable B} is not unambiguously a
binding occurrence of B.  *)
Delimit Scope pred with pred.
Local Open Scope pred.
Definition pred (A:Type) := A -> Prop.
Bind Scope pred with pred.
Definition derives (A:Type) (P Q:pred A) := forall a:A, P a -> Q a.
Arguments derives [A] _ _.

(* Specifications: *)
Lemma pred_ext : forall A (P Q:pred A),
derives P Q -> derives Q P -> P = Q.
Lemma derives_cut {A}  : forall Q P R : pred A,
derives P Q ->
derives Q R ->
derives P R.