Notation "[ 'seq' E | i : T <- s  & j : U <- t ]" :=
  (allsigs (fun (i : T) (j : U) => E) s (fun i : T => t))
  (at level 0, E at level 99, i ident, j ident, only parsing) : seq_scope.Implicit Types (R : eqType) (s : seq S) (t : forall x, seq (T x)).

Lemma allsigs_catr R (f : forall x, T x -> R) s t1 t2 : allsigs f s (fun x => t1 x ++ t2 x) =i allsigs f s t1 ++ allsigs f s t2.