Require Export Bmc.Logic.
Definition lasso_fwd_conj (I : prop) (T : trans) (k : nat) : Prop :=
forall ss : sseq,
~(I ss.[0] /\ loop_free T ss 0 k).
Definition lasso_bwd_conj (T : trans) (P : prop) (k: nat) : Prop :=
forall ss : sseq,
~(loop_free T ss 0 k /\ ~P ss.[k]).
Definition prop_nth_init_conj (I : prop) (T : trans) (P : prop) (k : nat) : Prop :=
forall ss : sseq,
~(I ss.[0] /\ path T ss 0 k /\ ~P ss.[k]).
Fixpoint safety_nth_conj (I : prop) (T : trans) (P : prop) (k : nat) : Prop :=
match k with
| O => prop_nth_init_conj I T P k
| S k' => safety_nth_conj I T P k' /\ prop_nth_init_conj I T P k
end.

Lemma safety_nth_conj_eq :
forall (I:prop) (T:trans) (P:prop) (k:nat),
safety_nth I T P k <-> safety_nth_conj I T P k.