fact: Fixpoint gen_term_no_app (tau : type) (e : env) : G term := match vars_with_type e tau with | [] => match tau with | N => liftGen Const arbitrary | Arrow tau1 tau2 => liftGen Abs (gen_term_no_app tau2 (tau1 :: e)) end | def :: vars => oneOf_ (returnGen def) [ match tau with | N => liftGen Const arbitrary | Arrow tau1 tau2 => liftGen Abs (gen_term_no_app tau2 (tau1 :: e)) end; elems_ def (def :: vars)] end.
imports: mathcomp(ssreflect ssrbool eqtype) Arith List String Lia Program Relations Wellfounded Lexicographic_Product QuickChick(QuickChick) QuickChick.stlc(monad)