generate(prob_ast_integer(Options),Value) :-
member(expr,Options) , ! ,
delete(Options,expr,DOptions) ,
% if no definedness is given set to well-defined
(member(_-defined,DOptions) ->
NOptions = DOptions
; NOptions = [well-defined|DOptions]) ,
generate(prob_ast_int_expr(NOptions),Value).
generate(prob_ast_integer(Options),Value) :-
\+member(random,Options) , ! ,
generate(integer(Options),Gen) ,
Value = b(integer(Gen),integer,[]).
generate(prob_ast_integer(Options),Value) :-
% delete random from options to terminate
delete(Options,random,NOptions) ,
% higher chance to generate expression
random(0,10,R) ,
(R > 2 ->
RandomOption = [expr|NOptions]
; RandomOption = NOptions) ,
generate(prob_ast_integer(RandomOption),Value).