(* Inductive seq (T : Type) : Type := Nil | Cons of T & seq T. *)
Notation seq := list.Notation Cons T := (@cons T) (only parsing).Notation Nil T := (@nil T) (only parsing).Notation "[ 'seq' E | i : T <- s , j : U <- t ]" :=
  (allpairs (fun (i : T) (j : U) => E) s t)
  (at level 0, E at level 99, i ident, j ident, only parsing) : seq_scope.Implicit Types x y z : T.Implicit Types (m : bitseq) (s : seq T).Implicit Types (s : seq S) (t : seq T).

(* Specifications: *)
Lemma size0nil s : size s = 0 -> s = [::].
Lemma nilP s : reflect (s = [::]) (nilp s).