fact: Fixpoint enumerateFuel {A : Type} (fuel : nat) (tot : nat) (gs : list (E (option A))) : E (option A) := match fuel with | O => ret None | S fuel' => bind (choose (0, tot-1)) (fun n => let '(g, gs') := pickDrop gs n in bind g (fun ma => match ma with | Some a => ret (Some a) | None => enumerateFuel fuel' (tot - 1) gs' end )) end.
imports: ZArith List mathcomp.ssreflect.ssreflect mathcomp(ssrfun ssrbool ssrnat) Numbers.BinNums Classes.RelationClasses ExtLib.Structures(Functor Applicative) QuickChick(Sets Tactics Producer LazyList RandomQC)