(* Specifications: *)
Lemma andTp p : True /\ p <-> p.
Lemma andpT p : p /\ True <-> p.
Lemma andFp p : False /\ p <-> False.
Lemma andpF p : p /\ False <-> False.
Lemma orTp p : True \/ p <-> True.
Lemma orpT p : p \/ True <-> True.
Lemma orFp p : False \/ p <-> p.
Lemma orpF p : p \/ False <-> p.
Lemma perm_refl (s : seq A) : perm s s.
Lemma perm_sym s1 s2 : perm s1 s2 <-> perm s2 s1.
Lemma perm_trans s2 s1 s3 : perm s1 s2 -> perm s2 s3 -> perm s1 s3.
Lemma perm_cat2lL s s1 s2 : perm s1 s2 -> perm (s ++ s1) (s ++ s2).
Lemma perm_cat2rL s s1 s2 : perm s1 s2 -> perm (s1 ++ s) (s2 ++ s).
Lemma perm_catL s1 t1 s2 t2 : perm s1 s2 -> perm t1 t2 -> perm (s1 ++ t1) (s2 ++ t2).
Lemma perm_cat_consL s1 t1 s2 t2 x : perm s1 s2 -> perm t1 t2 -> perm (s1 ++ x :: t1) (s2 ++ x :: t2).
Lemma perm_catC s1 s2 : perm (s1 ++ s2) (s2 ++ s1).
Lemma perm_cons_catCA s1 s2 x : perm (x :: s1 ++ s2) (s1 ++ x :: s2).
Lemma perm_cons_catAC s1 s2 x : perm (s1 ++ x :: s2) (x :: s1 ++ s2).
Lemma perm_cons_cat_consL s1 s2 s x : perm s (s1 ++ s2) -> perm (x :: s) (s1 ++ x :: s2).
Lemma perm_cat_consR s1 t1 s2 t2 x : perm (s1 ++ x :: t1) (s2 ++ x :: t2) -> perm (s1 ++ t1) (s2 ++ t2).
Lemma perm_cons x s1 s2 : perm (x :: s1) (x :: s2) <-> perm s1 s2.
Lemma perm_cons_cat_cons x s1 s2 s : perm (x :: s) (s1 ++ x :: s2) <-> perm s (s1 ++ s2).
Lemma perm_cat_cons x s1 s2 t1 t2 : perm (s1 ++ x :: t1) (s2 ++ x :: t2) <-> perm (s1 ++ t1) (s2 ++ t2).
Lemma perm_cat2l s1 s2 s3: perm (s1 ++ s2) (s1 ++ s3) <-> perm s2 s3.
Lemma perm_cat2r s1 s2 s3 : perm (s2 ++ s1) (s3 ++ s1) <-> perm s2 s3.
Lemma perm_catAC s1 s2 s3 : perm ((s1 ++ s2) ++ s3) ((s1 ++ s3) ++ s2).
Lemma perm_catCA s1 s2 s3 : perm (s1 ++ s2 ++ s3) (s2 ++ s1 ++ s3).
Lemma bnd_is_try (A B : Type) (s1 : spec A) (s2 : A -> spec B) i r : verify (try_s s1 s2 (fun y => fr (throw_s B y))) i r -> verify (bind_s s1 s2) i r.