1 :- multifile generate/2.
2 :- multifile shrink/3.
3
4 % any couple
5 generate(prob_ast_couple,Couple) :-
6 generate(prob_ast_couple([]), Couple).
7
8 generate(prob_ast_couple(Options),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :-
9 generate(prob_ast_any(Options),V1) ,
10 generate(prob_ast_any(Options),V2) ,
11 V1 = b(_,ValTypeA,_) ,
12 V2 = b(_,ValTypeB,_).
13
14 % same type
15 generate(prob_ast_couple(Type),b(couple(V1,V2),couple(ValType,ValType),[])) :-
16 \+ is_list(Type),
17 gen_type(Type,ast,NType) ,
18 generate(NType,V1) ,
19 generate(NType,V2) ,
20 V1 = b(_,ValType,_).
21 % possibly two different types
22 generate(prob_ast_couple(TypeA,TypeB),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :-
23 gen_type(TypeA,ast,NTypeA) ,
24 gen_type(TypeB,ast,NTypeB) ,
25 generate(NTypeA,V1) ,
26 generate(NTypeB,V2) ,
27 V1 = b(_,ValTypeA,_) ,
28 V2 = b(_,ValTypeB,_).
29
30 % one ground value instead of type
31 generate(prob_ast_couple(V1,TypeB),b(couple(V1,V2),couple(ValType,ValTypeB),[])) :-
32 V1 = b(_,ValType,_) ,
33 gen_type(TypeB,ast,NTypeB) ,
34 generate(NTypeB,V2) ,
35 V2 = b(_,ValTypeB,_).
36 generate(prob_ast_couple(TypeA,V2),b(couple(V1,V2),couple(ValTypeA,ValType),[])) :-
37 V2 = b(_,ValType,_) ,
38 gen_type(TypeA,ast,NTypeA) ,
39 generate(NTypeA,V1) ,
40 V1 = b(_,ValTypeA,_).
41
42 % both values are ground
43 generate(prob_ast_couple(V1,V2),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :-
44 V1 = b(_,ValTypeA,_) ,
45 V2 = b(_,ValTypeB,_).