(* Specifications: *)
Theorem BPCP_kvalid : BPCP R <-> kvalid (F R).
Lemma stack_discrete : discrete (stack bool).
Lemma stack_enum : enumerable__T (stack bool).
Lemma enum_PCP' : enum (fun '(C, (u, v)) => @derivable bool C u v) L_PCP.
Lemma enumerable_derivable : enumerable (fun '(C, (u, v)) => @derivable bool C u v).
Lemma enumerable_PCP : enumerable BPCP'.
Lemma enum_red LX : enum p (L LX).
Theorem sinc_decidable : (forall n, exists k, n <= k /\ P k) * (forall n, { P n } + { ~ P n }).
Theorem decidable_sinc : { f | (forall n, f n < f (S n)) /\ (forall n, P n <-> exists k, n = f k) }.
Lemma inductive_count (S:eqType) (Y:eqType) A (s:S) n (f: S -> Y): Injective f -> count A s = n -> count (map (fun a:S => f a) A) (f s) = n.
Lemma diff_constructors_count_zero (F X Y:eqType) (A: list F) (f: F -> X) (g: Y -> X) x: (forall a b, f a <> g b) -> count (map (fun (a:F) => f a) A) (g x) = 0.
Lemma notInZero (X: eqType) (x: X) A : not (x el A) <-> count A x = 0.
Lemma in_concat_iff A l (a:A) : a el concat l <-> exists l', a el l' /\ l' el l.
Lemma list_prefix_inv X (a : X) x u y v : ~ a el x -> ~ a el u -> x ++ a :: y = u ++ a :: v -> x = u /\ y = v.
Lemma split_inv X (u z x y : list X) (s : X) : u ++ z = x ++ s :: y -> ~ s el u -> exists x' : list X, x = u ++ x'.
Lemma in_concat_iff X (l : list (list X)) x : x el concat l <-> exists l', x el l' /\ l' el l.
Lemma concat_rev X (l : list (list X)) : concat (rev (map (@rev _) l)) = rev (concat l).
Lemma bitstring_false a : ~ false el to_bitstring a.
Lemma f_s_app x y : f_s (x ++ y) = f_s x ++ f_s y.
Lemma proc_closed p : proc p -> closed p.
Lemma proc_lam p : proc p -> lam p.
Lemma H_ok n : satis u n -> ok n.
Lemma H_n_Sn n : ok (S n) -> ok n.
Lemma H_0_n n : test u -> ok n -> ok 0.
Lemma re_exists p : enumerable p -> enumerable (fun t => exists s : term, p (s t)).
Lemma DA p : recognisable p -> recognisable (fun _ => exists t, p t).
Lemma H_proc s t : proc (H (tenc s) (tenc t)).
Lemma H_test s t : test (H (tenc s) (tenc t)).
Lemma H_inv n s t : satis ( H (tenc s) (tenc t) ) n <-> eval n s <> None \/ eval n t <> None.
Lemma O_complete s t : eva s \/ eva t -> eva (O (tenc s) (tenc t)).
Theorem Post p : (forall x, p x \/ ~ p x) -> recognisable p -> recognisable (complement p) -> decidable p.
Lemma recognisable_union p q : recognisable p -> recognisable q -> recognisable (union p q).
Lemma decidable_ext p q : (forall x, p x <-> q x) -> decidable p -> decidable q.