Program Instance elementsUnsized {A} {def : A} (l : list A) :
Unsized (elements def l).
Next Obligation.
rewrite ! semElementsSize. by case: l.
Qed.
(* A rather long frequency proof, probably we can do better *)

(* Probably needs something about l' and l. *)
(* ZP : added a few things *)
Lemma pickDrop_exists :
forall {A} (l: list (nat * G (option A))) n,
n <  sum_fst l <->
exists k g l',
List.In (k,g) l /\ pickDrop l n = (k,g,l') /\ k <> 0 /\
l <--> [set (k, g)] :|: l' /\
length l' + 1 = length l /\
sum_fst l' + k = sum_fst l.