fact: Fixpoint genFooSized (size : nat) := match size with | O => returnGen Foo1 | S size' => freq [ (1, returnGen Foo1) ; (S size', f <- genFooSized size';; ret (Foo2 f)) ; (S size', n <- arbitrary ;; f <- genFooSized size' ;; ret (Foo3 n f)) ] end.
imports: QuickChick(QuickChick Tactics) String mathcomp(ssreflect ssrfun ssrbool ssrnat eqtype seq) List ExtLib.Structures.Monads