(* predicate a is closed under "edge" relation e *)
Definition closed {T: finType} (e: rel T) (a: pred T) :=
  forall x y : T, e x y -> a x -> a y.

(* Specifications: *)
Lemma closed_connect (T: finType) (e: rel T) (a: pred T) : closed e a -> forall x y, connect e x y -> a x -> a y.
Lemma removed_not_added (c: clause) (s s'': clauseset) (step: trans s s'') : removed c step -> ~~added c step.
Lemma removed_never_added (c: clause) (s1 s2 s3 s4: clauseset) (step1: trans s1 s2) (trace: deriv s2 s3) (step2: trans s3 s4) : removed c step1 -> ~~added c step2.
Lemma trans_neq (s: clauseset) : ~trans s s.
Lemma deriv_plus_eq_removed (c: clause) (s1 s2: clauseset) (step1: trans s1 s2) (trace: deriv s2 s1) : removed c step1 -> adds c trace.
Lemma deriv_plus_eq_added (c: clause) (s1 s2: clauseset) (step1: trans s1 s2) (trace: deriv s2 s1) : added c step1 -> removes c trace.
Lemma deriv_unique : forall (s: clauseset), unique s.
Lemma path_take {T: finType} (e: rel T) (x y: T) (p: seq T) (n: nat) : path e x p -> path e x (take n p).
Lemma deriv_unique2 : forall (s: clauseset) (p: seq clauseset), path trans s p -> uniq (s :: p).
Lemma af_rank_clauseset : almost_full (@eq_op clauseset).
Lemma clos_trans_1n_deriv_plus (s1 s2: clauseset) : Relation_Operators.clos_trans_1n clauseset (fun s s' : clauseset => trans s s') s1 s2 -> deriv_plus s1 s2.
Lemma wf_trans : well_founded trans.