Program Instance elementsUnsized {A} {def : A} (l : list A) : 
  Unsized (elements def l).

(* Specifications: *)
Lemma not_lt : forall n m, (false = (n < m)) -> (m <= n).
Lemma sum_fstE A x (a : A) l: sum_fst ((x, a) :: l) = x + sum_fst l.
Lemma pick_def : forall {A} (l: list (nat * G A)) n def, sum_fst l <= n -> pick def l n = (0, def).
Lemma pick_exists : forall {A} (l: list (nat * G A)) n def, n < sum_fst l <-> exists x, List.In x l /\ pick def l n = x /\ fst x <> 0.
Lemma pick_In : forall {A} (l: list (nat * G A)) x def, List.In x l /\ fst x <> 0 -> exists n, pick def l n = x.
Lemma pickDrop_def : forall {A} (l: list (nat * G (option A))) n, sum_fst l <= n -> pickDrop l n = (0, returnGen None, l).
Lemma pickDrop_In : forall {A} (l: list (nat * G (option A))) k x, List.In (k,x) l /\ k <> 0 -> exists n l', pickDrop l n = (k,x,l').
Lemma pickDrop_In_strong : forall {A} (l: list (nat * G (option A))) k x, List.In (k,x) l /\ k <> 0 -> exists n l', pickDrop l n = (k,x,l') /\ n < sum_fst l /\ length l = length l' + 1.
Qed. Lemma frequencySizeMonotonic {A} (g0 : G A) lg : SizeMonotonic g0 ->
Qed.
Qed. Lemma pickDrop_leq_top {A} (l : seq (nat * G (option A))) (n : nat) k g l' size s : pickDrop l n =
Qed. Lemma length_sum