Require Export Bmc.Core.
Open Scope nat_scope.
Definition spseq : Type := nat -> prop.
Definition pdr_post_t (I:prop) (T:trans) (P:prop) (r:spseq) (k:nat) : Prop :=
(forall i s, I s -> r i s) /\
(forall i s, r i s -> P s) /\
(forall i s, r i s -> r (S i) s) /\
(forall i s s', i <= k -> r i s /\ T s s' -> r (S i) s') /\
(forall s, r k s <-> r (S k) s).
(**)
Fixpoint spseq_sseq (I:prop) (T:trans) (r:spseq) (ss:sseq) (i:nat) :=
match i with
| O => I ss.[0]
| S j => spseq_sseq I T r ss j /\ r j ss.[j] /\ T ss.[j] ss.[i]
end.
(**)

Lemma spseq_sseq_path' :
forall (I:prop) (T:trans),
forall r:spseq,
forall ss: sseq,
forall k, spseq_sseq I T r ss k ->
I ss.[0] /\ forall i, i < k -> path T ss 0 (S i) /\ r i ss.[i].