fact: Definition genGoodNarrow (n : nat) : nat -> G (option (Foo)) := let fix aux_arb init_size size (n : nat) : G (option (Foo)) := match size with | O => backtrack [(1, ret (Some Foo1)); (1, ret None)] | S size' => backtrack [ (1, ret (Some Foo1)) ; (1, bindOpt (aux_arb init_size size' 0) (fun foo => match @decOpt (goodFooNarrow 1 foo) _ init_size with | Some true => ret (Some foo) | _ => ret None end ))] end in fun sz => aux_arb sz sz n.
imports: QuickChick(QuickChick Tactics) String mathcomp(ssreflect ssrfun ssrbool ssrnat eqtype seq) List ExtLib.Structures.Monads