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.
(**)
(*(forall s, I s <-> r 0 s) ->*)

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