Fixpoint filter s :=
  if s is x :: s' then if a x then x :: filter s' else filter s' else [::].Fixpoint count s := if s is x :: s' then a x + count s' else 0.Fixpoint has s := if s is x :: s' then a x || has s' else false.Fixpoint all s := if s is x :: s' then a x && all s' else true.

Lemma take_cat s1 s2 : take n0 (s1 ++ s2) = if n0 < size s1 then take n0 s1 else s1 ++ take (n0 - size s1) s2.