Local Open Scope logic.
Opaque Snuffle.Snuffle.

Lemma SnuffleS i l: Snuffle (S i) l = bind (Snuffle i l) (Snuffle 1). reflexivity. Qed.
Fixpoint WcontI (xs: list int) (j:nat) (l:list val):Prop :=
match j with O => Zlength l = 16
| (S n) => Zlength l = 16 /\
exists t0 t1 t2 t3,
Znth ((5 * (Z.of_nat n) + 4 * 0) mod 16) (map Vint xs) = Vint t0 /\
Znth ((5 * (Z.of_nat n) + 4 * 1) mod 16) (map Vint xs) = Vint t1 /\
Znth ((5 * (Z.of_nat n) + 4 * 2) mod 16) (map Vint xs) = Vint t2 /\
Znth ((5 * (Z.of_nat n) + 4 * 3) mod 16) (map Vint xs) = Vint t3 /\
exists wl, WcontI xs n wl /\
match Wcopyspec t0 t1 t2 t3 with
(s0,s1,s2,s3) => wlistJ' wl (Z.of_nat n) s0 s1 s2 s3 l
end
end.