%%% BEGINNING OF THE TRANSLATION %%%


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-1]: (cake # 1 > cookie # 10) :- egg # 2, flour # 2, raisin # 4, (({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 }) pref_when diet), (({ vanilla # 1; lemon # 2 } > cinnamon # 1) only_if not allergy), { chocolate # 1, nuts # 1, coconut # 1 | less_caloric }.
%% R-Rule cleaned from CP-Lists:
%%		[1-1]: (cake # 1 > cookie # 10) :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, { chocolate # 1, nuts # 1, coconut # 1 | less_caloric }.


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: (cake # 1 > cookie # 10) :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, { chocolate # 1, nuts # 1, coconut # 1 | less_caloric }.


%% P-Sets in the R-Rule's body:
%% { chocolate # 1, nuts # 1, coconut # 1 | less_caloric }
%% P-Set : { chocolate # 1, nuts # 1, coconut # 1 | less_caloric }
rasp_dom(rasp_pset_1_1, chocolate).
rasp_dom(rasp_pset_1_1, nuts).
rasp_dom(rasp_pset_1_1, coconut).
rasp_num(rasp_pset_1_1, 1).
rasp_num(rasp_pset_1_1, 2).
rasp_num(rasp_pset_1_1, 3).
rasp_pset_name(rasp_pset_1_1) :- rasp_fired(rasp_1).
rasp_cl(rasp_pset_1_1, X, Y) :- less_caloric(X, Y), X != Y, rasp_fired(rasp_1).
rasp_ordered(rasp_pset_1_1, chocolate) :- rasp_order(rasp_pset_1_1, chocolate, N), rasp_num(rasp_pset_1_1, N).
rasp_ordered(rasp_pset_1_1, nuts) :- rasp_order(rasp_pset_1_1, nuts, N), rasp_num(rasp_pset_1_1, N).
rasp_ordered(rasp_pset_1_1, coconut) :- rasp_order(rasp_pset_1_1, coconut, N), rasp_num(rasp_pset_1_1, N).
:- not rasp_ordered(rasp_pset_1_1, chocolate), rasp_use_pl(rasp_1, chocolate, I, 1, rasp_pset_1_1), rasp_iter(I).
:- not rasp_ordered(rasp_pset_1_1, nuts), rasp_use_pl(rasp_1, nuts, I, 1, rasp_pset_1_1), rasp_iter(I).
:- not rasp_ordered(rasp_pset_1_1, coconut), rasp_use_pl(rasp_1, coconut, I, 1, rasp_pset_1_1), rasp_iter(I).
rasp_auxres(rasp_1, rasp_pset_1_1).
1 { rasp_use_pl(rasp_1, chocolate, I, 1, rasp_pset_1_1), rasp_use_pl(rasp_1, nuts, I, 1, rasp_pset_1_1), rasp_use_pl(rasp_1, coconut, I, 1, rasp_pset_1_1) } 1 :-
	rasp_use(rasp_1, 8, rasp_pset_1_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_1, NumFirings).
rasp_res_pl(rasp_1, rasp_pset_1_1, T, N) :- rasp_order(rasp_pset_1_1, T, N), rasp_fired(rasp_1).
%% R-Rule cleaned from P-Sets:
%%		[1-1]: (cake # 1 > cookie # 10) :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_pset_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: (cake # 1 > cookie # 10) :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_pset_1_1 # 1.


%% P-Lists in the R-Rule's head:
%% (cake # 1 > cookie # 10)
%% P-List : (cake # 1 > cookie # 10)
rasp_auxres(rasp_1, rasp_pl_1_1).
1 { rasp_use_pl(rasp_1, cake, I, 1, rasp_pl_1_1), rasp_use_pl(rasp_1, cookie, I, 10, rasp_pl_1_1) } 1 :-
	rasp_use(rasp_1, 0, rasp_pl_1_1, NumFirings),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_1, NumFirings).
rasp_res_pl(rasp_1, rasp_pl_1_1, cake, 1).
rasp_res_pl(rasp_1, rasp_pl_1_1, cookie, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_pl_1_1 # 1 :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_pset_1_1 # 1.


%%%%%% Translation of the rule rasp_1:
%%		[1-1]: rasp_pl_1_1 # 1 :- egg # 2, flour # 2, raisin # 4, rasp_z_when_1_1 # -1, rasp_aux_when_1_1 # 1, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_pset_1_1 # 1.
rasp_rrule(rasp_1).
rasp_firings(rasp_1, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 0, rasp_pl_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 1, egg, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 2, flour, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 3, raisin, -(4)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 4, rasp_z_when_1_1, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 5, rasp_aux_when_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 6, rasp_z_if_1_1, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 7, rasp_aux_if_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 8, rasp_pset_1_1, -(1)).
%% Policy
rasp_optional(rasp_1).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_1_1 # 1.


%%%%%% Translation of the rule (fact) rasp_2:
%%		rasp_pl_1_1 # 1.
rasp_rrule(rasp_2).
%% fact (6)(6'):
rasp_a_atom(rasp_2, 0, rasp_pl_1_1, 1).
%% fact (5)(5'):
rasp_fired(rasp_2).
rasp_firings(rasp_2, 1).


%%%%%% Amount-Atoms corresponding to P-Sets in the current R-Rule:


%% rasp_pset_1_1 # 1.


%%%%%% Translation of the rule (fact) rasp_3:
%%		rasp_pset_1_1 # 1.
rasp_rrule(rasp_3).
%% fact (6)(6'):
rasp_a_atom(rasp_3, 0, rasp_pset_1_1, 1).
%% fact (5)(5'):
rasp_fired(rasp_3).
rasp_firings(rasp_3, 1).


%% If-CP-Lists in the R-Rule's body:
%% (({ vanilla # 1; lemon # 2 } > cinnamon # 1) only_if not allergy)
rasp_p_if_1_1 :- not rasp_np_if_1_1.
rasp_np_if_1_1 :- not rasp_p_if_1_1.
:- rasp_np_if_1_1, not allergy.
:- rasp_p_if_1_1, allergy.


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ vanilla # 1; lemon # 2 } > cinnamon # 1), rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ vanilla # 1; lemon # 2 } > cinnamon # 1), rasp_z_if_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ vanilla # 1; lemon # 2 } > cinnamon # 1), rasp_z_if_1_1 # 1.


%% P-Lists in the R-Rule's body:
%% ({ vanilla # 1; lemon # 2 } > cinnamon # 1)
%%		Amount-Atom sets in the current P-List:
%%		{ vanilla # 1; lemon # 2 }
%%		{ cinnamon # 1 }


%% P-List : (rasp_aux_aa_set_4_1_1 # 1 > rasp_aux_aa_set_4_1_cinnamon # 1)
rasp_auxres(rasp_4, rasp_pl_4_1).
1 { rasp_use_pl(rasp_4, rasp_aux_aa_set_4_1_1, I, 1, rasp_pl_4_1), rasp_use_pl(rasp_4, rasp_aux_aa_set_4_1_cinnamon, I, 1, rasp_pl_4_1) } 1 :-
	rasp_use(rasp_4, 1, rasp_pl_4_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_4, NumFirings).
rasp_res_pl(rasp_4, rasp_pl_4_1, rasp_aux_aa_set_4_1_1, 1).
rasp_res_pl(rasp_4, rasp_pl_4_1, rasp_aux_aa_set_4_1_cinnamon, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, rasp_pl_4_1 # 1, rasp_z_if_1_1 # 1, rasp_z_aa_set_4_1 # -1.


%%%%%% Translation of the rule rasp_4:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, rasp_pl_4_1 # 1, rasp_z_if_1_1 # 1, rasp_z_aa_set_4_1 # -1.
rasp_rrule(rasp_4).
rasp_firings(rasp_4, 1..1).
:- not rasp_p_if_1_1, rasp_fired(rasp_4).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 0, rasp_aux_if_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 1, rasp_pl_4_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 2, rasp_z_if_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 3, rasp_z_aa_set_4_1, -(-1)).
%% Policy
rasp_optional(rasp_4).


%%%%%% R-Rules associated with Amount-Atom sets:


%% [1-1]: rasp_aux_aa_set_4_1_1 # 1 :- vanilla # 1, rasp_z_aa_set_4_1 # 1.


%%%%%% Translation of the rule rasp_5:
%%		[1-1]: rasp_aux_aa_set_4_1_1 # 1 :- vanilla # 1, rasp_z_aa_set_4_1 # 1.
rasp_rrule(rasp_5).
rasp_firings(rasp_5, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_5, 0, rasp_aux_aa_set_4_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_5, 1, vanilla, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_5, 2, rasp_z_aa_set_4_1, -(1)).
%% Policy
rasp_optional(rasp_5).


%% [1-1]: rasp_aux_aa_set_4_1_1 # 1 :- lemon # 2, rasp_z_aa_set_4_1 # 1.


%%%%%% Translation of the rule rasp_6:
%%		[1-1]: rasp_aux_aa_set_4_1_1 # 1 :- lemon # 2, rasp_z_aa_set_4_1 # 1.
rasp_rrule(rasp_6).
rasp_firings(rasp_6, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_6, 0, rasp_aux_aa_set_4_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_6, 1, lemon, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_6, 2, rasp_z_aa_set_4_1, -(1)).
%% Policy
rasp_optional(rasp_6).


%% [1-1]: rasp_aux_aa_set_4_1_cinnamon # 1 :- cinnamon # 1, rasp_z_aa_set_4_1 # 1.


%%%%%% Translation of the rule rasp_7:
%%		[1-1]: rasp_aux_aa_set_4_1_cinnamon # 1 :- cinnamon # 1, rasp_z_aa_set_4_1 # 1.
rasp_rrule(rasp_7).
rasp_firings(rasp_7, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 0, rasp_aux_aa_set_4_1_cinnamon, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 1, cinnamon, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 2, rasp_z_aa_set_4_1, -(1)).
%% Policy
rasp_optional(rasp_7).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_4_1 # 1.


%%%%%% Translation of the rule (fact) rasp_8:
%%		rasp_pl_4_1 # 1.
rasp_rrule(rasp_8).
%% fact (6)(6'):
rasp_a_atom(rasp_8, 0, rasp_pl_4_1, 1).
%% fact (5)(5'):
rasp_fired(rasp_8).
rasp_firings(rasp_8, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.


%%%%%% Translation of the rule rasp_9:
%%		[1-1]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
rasp_rrule(rasp_9).
rasp_firings(rasp_9, 1..1).
:- not rasp_np_if_1_1, rasp_fired(rasp_9).
%% rule (6)(6'):
rasp_a_atom(rasp_9, 0, rasp_aux_if_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_9, 1, rasp_z_if_1_1, -(1)).
%% Policy
rasp_optional(rasp_9).


%% When-CP-Lists in the R-Rule's body:
%% (({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 }) pref_when diet)
rasp_p_when_1_1 :- not rasp_np_when_1_1.
rasp_np_when_1_1 :- not rasp_p_when_1_1.
:- rasp_np_when_1_1, diet.
:- rasp_p_when_1_1, not diet.


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_p_when_1_1, ({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 }), rasp_z_when_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_p_when_1_1, ({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 }), rasp_z_when_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_p_when_1_1, ({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 }), rasp_z_when_1_1 # 1.


%% P-Lists in the R-Rule's body:
%% ({ aspartame # 1, skim_milk # 6 } > { sugar # 4, whole_milk # 6 })
%%		Amount-Atom sets in the current P-List:
%%		{ aspartame # 1, skim_milk # 6 }
%%		{ sugar # 4, whole_milk # 6 }


%% P-List : (rasp_aux_aa_set_10_1_1 # 1 > rasp_aux_aa_set_10_1_2 # 1)
rasp_auxres(rasp_10, rasp_pl_10_1).
1 { rasp_use_pl(rasp_10, rasp_aux_aa_set_10_1_1, I, 1, rasp_pl_10_1), rasp_use_pl(rasp_10, rasp_aux_aa_set_10_1_2, I, 1, rasp_pl_10_1) } 1 :-
	rasp_use(rasp_10, 1, rasp_pl_10_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_10, NumFirings).
rasp_res_pl(rasp_10, rasp_pl_10_1, rasp_aux_aa_set_10_1_1, 1).
rasp_res_pl(rasp_10, rasp_pl_10_1, rasp_aux_aa_set_10_1_2, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_p_when_1_1, rasp_pl_10_1 # 1, rasp_z_when_1_1 # 1, rasp_z_aa_set_10_1 # -1.


%%%%%% Translation of the rule rasp_10:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_p_when_1_1, rasp_pl_10_1 # 1, rasp_z_when_1_1 # 1, rasp_z_aa_set_10_1 # -1.
rasp_rrule(rasp_10).
rasp_firings(rasp_10, 1..1).
:- not rasp_p_when_1_1, rasp_fired(rasp_10).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 0, rasp_aux_when_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 1, rasp_pl_10_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 2, rasp_z_when_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 3, rasp_z_aa_set_10_1, -(-1)).
%% Policy
rasp_optional(rasp_10).


%%%%%% R-Rules associated with Amount-Atom sets:


%% [1-1]: rasp_aux_aa_set_10_1_1 # 1 :- aspartame # 1, skim_milk # 6, rasp_z_aa_set_10_1 # 1.


%%%%%% Translation of the rule rasp_11:
%%		[1-1]: rasp_aux_aa_set_10_1_1 # 1 :- aspartame # 1, skim_milk # 6, rasp_z_aa_set_10_1 # 1.
rasp_rrule(rasp_11).
rasp_firings(rasp_11, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 0, rasp_aux_aa_set_10_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 1, aspartame, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 2, skim_milk, -(6)).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 3, rasp_z_aa_set_10_1, -(1)).
%% Policy
rasp_optional(rasp_11).


%% [1-1]: rasp_aux_aa_set_10_1_2 # 1 :- sugar # 4, whole_milk # 6, rasp_z_aa_set_10_1 # 1.


%%%%%% Translation of the rule rasp_12:
%%		[1-1]: rasp_aux_aa_set_10_1_2 # 1 :- sugar # 4, whole_milk # 6, rasp_z_aa_set_10_1 # 1.
rasp_rrule(rasp_12).
rasp_firings(rasp_12, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 0, rasp_aux_aa_set_10_1_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 1, sugar, -(4)).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 2, whole_milk, -(6)).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 3, rasp_z_aa_set_10_1, -(1)).
%% Policy
rasp_optional(rasp_12).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_10_1 # 1.


%%%%%% Translation of the rule (fact) rasp_13:
%%		rasp_pl_10_1 # 1.
rasp_rrule(rasp_13).
%% fact (6)(6'):
rasp_a_atom(rasp_13, 0, rasp_pl_10_1, 1).
%% fact (5)(5'):
rasp_fired(rasp_13).
rasp_firings(rasp_13, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, aspartame # 1, skim_milk # 6, rasp_z_when_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, aspartame # 1, skim_milk # 6, rasp_z_when_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, aspartame # 1, skim_milk # 6, rasp_z_when_1_1 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, aspartame # 1, skim_milk # 6, rasp_z_when_1_1 # 1.


%%%%%% Translation of the rule rasp_14:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, aspartame # 1, skim_milk # 6, rasp_z_when_1_1 # 1.
rasp_rrule(rasp_14).
rasp_firings(rasp_14, 1..1).
:- not rasp_np_when_1_1, rasp_fired(rasp_14).
%% rule (6)(6'):
rasp_a_atom(rasp_14, 0, rasp_aux_when_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_14, 1, aspartame, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_14, 2, skim_milk, -(6)).
%% rule (6)(6'):
rasp_a_atom(rasp_14, 3, rasp_z_when_1_1, -(1)).
%% Policy
rasp_optional(rasp_14).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, sugar # 4, whole_milk # 6, rasp_z_when_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, sugar # 4, whole_milk # 6, rasp_z_when_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, sugar # 4, whole_milk # 6, rasp_z_when_1_1 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, sugar # 4, whole_milk # 6, rasp_z_when_1_1 # 1.


%%%%%% Translation of the rule rasp_15:
%%		[1-1]: rasp_aux_when_1_1 # 1 :- rasp_np_when_1_1, sugar # 4, whole_milk # 6, rasp_z_when_1_1 # 1.
rasp_rrule(rasp_15).
rasp_firings(rasp_15, 1..1).
:- not rasp_np_when_1_1, rasp_fired(rasp_15).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 0, rasp_aux_when_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 1, sugar, -(4)).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 2, whole_milk, -(6)).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 3, rasp_z_when_1_1, -(1)).
%% Policy
rasp_optional(rasp_15).


%%%%%% Proper GrinGo statement rewritten
less_caloric(chocolate, coconut).


%%%%%% Proper GrinGo statement rewritten
less_caloric(chocolate, nuts).


%%%%%% Translation of the rule (fact) rasp_16:
%%		egg # 3.
rasp_rrule(rasp_16).
%% fact (6)(6'):
rasp_a_atom(rasp_16, 0, egg, 3).
%% fact (5)(5'):
rasp_fired(rasp_16).
rasp_firings(rasp_16, 1).


%%%%%% Translation of the rule (fact) rasp_17:
%%		flour # 2.
rasp_rrule(rasp_17).
%% fact (6)(6'):
rasp_a_atom(rasp_17, 0, flour, 2).
%% fact (5)(5'):
rasp_fired(rasp_17).
rasp_firings(rasp_17, 1).


%%%%%% Translation of the rule (fact) rasp_18:
%%		raisin # 8.
rasp_rrule(rasp_18).
%% fact (6)(6'):
rasp_a_atom(rasp_18, 0, raisin, 8).
%% fact (5)(5'):
rasp_fired(rasp_18).
rasp_firings(rasp_18, 1).


%%%%%% Translation of the rule (fact) rasp_19:
%%		aspartame # 2.
rasp_rrule(rasp_19).
%% fact (6)(6'):
rasp_a_atom(rasp_19, 0, aspartame, 2).
%% fact (5)(5'):
rasp_fired(rasp_19).
rasp_firings(rasp_19, 1).


%%%%%% Translation of the rule (fact) rasp_20:
%%		skim_milk # 6.
rasp_rrule(rasp_20).
%% fact (6)(6'):
rasp_a_atom(rasp_20, 0, skim_milk, 6).
%% fact (5)(5'):
rasp_fired(rasp_20).
rasp_firings(rasp_20, 1).


%%%%%% Translation of the rule (fact) rasp_21:
%%		sugar # 4.
rasp_rrule(rasp_21).
%% fact (6)(6'):
rasp_a_atom(rasp_21, 0, sugar, 4).
%% fact (5)(5'):
rasp_fired(rasp_21).
rasp_firings(rasp_21, 1).


%%%%%% Translation of the rule (fact) rasp_22:
%%		whole_milk # 6.
rasp_rrule(rasp_22).
%% fact (6)(6'):
rasp_a_atom(rasp_22, 0, whole_milk, 6).
%% fact (5)(5'):
rasp_fired(rasp_22).
rasp_firings(rasp_22, 1).


%%%%%% Translation of the rule (fact) rasp_23:
%%		vanilla # 1.
rasp_rrule(rasp_23).
%% fact (6)(6'):
rasp_a_atom(rasp_23, 0, vanilla, 1).
%% fact (5)(5'):
rasp_fired(rasp_23).
rasp_firings(rasp_23, 1).


%%%%%% Translation of the rule (fact) rasp_24:
%%		lemon # 2.
rasp_rrule(rasp_24).
%% fact (6)(6'):
rasp_a_atom(rasp_24, 0, lemon, 2).
%% fact (5)(5'):
rasp_fired(rasp_24).
rasp_firings(rasp_24, 1).


%%%%%% Translation of the rule (fact) rasp_25:
%%		cinnamon # 1.
rasp_rrule(rasp_25).
%% fact (6)(6'):
rasp_a_atom(rasp_25, 0, cinnamon, 1).
%% fact (5)(5'):
rasp_fired(rasp_25).
rasp_firings(rasp_25, 1).


%%%%%% Translation of the rule (fact) rasp_26:
%%		chocolate # 1.
rasp_rrule(rasp_26).
%% fact (6)(6'):
rasp_a_atom(rasp_26, 0, chocolate, 1).
%% fact (5)(5'):
rasp_fired(rasp_26).
rasp_firings(rasp_26, 1).


%%%%%% Translation of the rule (fact) rasp_27:
%%		nuts # 1.
rasp_rrule(rasp_27).
%% fact (6)(6'):
rasp_a_atom(rasp_27, 0, nuts, 1).
%% fact (5)(5'):
rasp_fired(rasp_27).
rasp_firings(rasp_27, 1).


%%%%%% Translation of the rule (fact) rasp_28:
%%		coconut # 1.
rasp_rrule(rasp_28).
%% fact (6)(6'):
rasp_a_atom(rasp_28, 0, coconut, 1).
%% fact (5)(5'):
rasp_fired(rasp_28).
rasp_firings(rasp_28, 1).


%%%%%% Proper GrinGo statement rewritten
diet.


%%%%%% Domain predicates for P-Lists:
rasp_num(0..1).
rasp_iter(1..1).
rasp_grade(1..2).


%%%%%% Engine for P-Lists:
rasp_resource(Pl) :- rasp_auxres(G, Pl), rasp_rrule(G).
rasp_use(G, Idx, R, TEMP) :- TEMP = U * N, rasp_sum_use_pl(G, R, N, Pl), rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G), rasp_allval(N), rasp_a_atom(G, Idx, Pl, U), N != 0.

rasp_sum_use_pl(G, R, N, Pl) :- N = #sum [ rasp_use_pl(G, R, Iter, Q, Pl) : rasp_firings(G, Iter) : rasp_iter(Iter) : rasp_allval(Q) = Q ], rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G), rasp_allval(N), rasp_auxres(G, Pl).
1 { rasp_sum_use_pl(G, R, N, Pl) : rasp_allval(N) } 1 :- rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G).



%%%%%% Engine for P-Sets:
rasp_cl(PS, X, Y) :- rasp_dom(PS, X), rasp_dom(PS, Y), rasp_dom(PS, Z), rasp_cl(PS, X, Z), rasp_cl(PS, Z, Y), X != Y, rasp_pset_name(PS).
rasp_eq(PS, T1, T2) :- rasp_cl(PS, T1, T2), rasp_cl(PS, T2, T1), rasp_dom(PS, T1), rasp_dom(PS, T2), rasp_pset_name(PS).
1 { rasp_idx(PS, T, N) : rasp_num(PS, N) } 1 :- rasp_dom(PS, T), rasp_pset_name(PS).
rasp_used_idx(PS, N) :- rasp_dom(PS, T), rasp_idx(PS, T, N), rasp_num(PS, N), rasp_pset_name(PS).
:- rasp_dom(PS, T), rasp_idx(PS, T, N), rasp_num(PS, N), N > 1, N1 = N - 1, not rasp_used_idx(PS, N1), rasp_pset_name(PS).
:- rasp_dom(PS, T1), rasp_dom(PS, T2), rasp_idx(PS, T1, N1), rasp_idx(PS, T2, N2), rasp_num(PS, N1), rasp_num(PS, N2), rasp_cl(PS, T1, T2), not rasp_cl(PS, T2, T1), N2 <= N1, T1 != T2, rasp_pset_name(PS).
:- not rasp_eq(PS, T1, T2), rasp_dom(PS, T1), rasp_dom(PS, T2), rasp_idx(PS, T1, N), rasp_idx(PS, T2, N), rasp_num(PS, N), T1 != T2, rasp_pset_name(PS).
rasp_idx(PS, T2, N) :- rasp_eq(PS, T1, T2), rasp_dom(PS, T1), rasp_dom(PS, T2), rasp_idx(PS, T1, N), rasp_num(PS, N), rasp_pset_name(PS).
rasp_order(PS, T, N) :- rasp_idx(PS, T, N), not rasp_other(PS, T, N), rasp_dom(PS, T), rasp_num(PS, N), rasp_pset_name(PS).
rasp_other(PS, T, N) :- rasp_order(PS, T2, N), T != T2, rasp_dom(PS, T), rasp_dom(PS, T2), rasp_num(PS, N), rasp_pset_name(PS).
rasp_grade(N) :- rasp_other(PS, T, N), rasp_dom(PS, T), rasp_num(PS, N), rasp_pset_name(PS).


%%%%%% Domain predicates:
rasp_val(0..30).
rasp_allval(-30..30).
rasp_idx(0..8).


%%%%%% Resources:
rasp_resource(aspartame).
rasp_resource(cake).
rasp_resource(chocolate).
rasp_resource(cinnamon).
rasp_resource(coconut).
rasp_resource(cookie).
rasp_resource(egg).
rasp_resource(flour).
rasp_resource(lemon).
rasp_resource(nuts).
rasp_resource(raisin).
rasp_resource(rasp_aux_aa_set_10_1_1).
rasp_resource(rasp_aux_aa_set_10_1_2).
rasp_resource(rasp_aux_aa_set_4_1_1).
rasp_resource(rasp_aux_aa_set_4_1_cinnamon).
rasp_resource(rasp_aux_if_1_1).
rasp_resource(rasp_aux_when_1_1).
rasp_resource(rasp_pl_10_1).
rasp_resource(rasp_pl_1_1).
rasp_resource(rasp_pl_4_1).
rasp_resource(rasp_pset_1_1).
rasp_resource(rasp_z_aa_set_10_1).
rasp_resource(rasp_z_aa_set_4_1).
rasp_resource(rasp_z_if_1_1).
rasp_resource(rasp_z_when_1_1).
rasp_resource(skim_milk).
rasp_resource(sugar).
rasp_resource(vanilla).
rasp_resource(whole_milk).


%%%%%% Main engine (PAPER):
rasp_res_rrule(Res, Rule) :- rasp_a_atom(Rule, I, Res, Q).
rasp_fired(Rule) :- not rasp_notfired(Rule), rasp_rrule(Rule).
rasp_notfired(Rule) :- not rasp_fired(Rule), rasp_rrule(Rule).
rasp_use(Rule, I, Res, TEMP) :- TEMP = C * Q, rasp_fired(Rule), rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).
rasp_fired(Rule) :- rasp_use(Rule, I, Res, TEMP), TEMP = C * Q, rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).
rasp_notfired(Rule) :- not rasp_use(Rule, I, Res, TEMP), TEMP = C * Q, rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).

rasp_notcounter(G, C) :- rasp_counter(G, D), rasp_firings(G, C), C != D, rasp_rrule(G), rasp_firings(G, D).
rasp_counter(G, C) :- rasp_firings(G, C), rasp_fired(G), not rasp_notcounter(G, C).
:- not rasp_fired(G), rasp_counter(G, C), rasp_rrule(G), rasp_firings(G, C).

rasp_balance(Res, N) :- N = #sum [ rasp_use(Rule, Idx, Res, Q) : rasp_rrule(Rule) : rasp_idx(Idx) : rasp_allval(Q) = Q ], rasp_resource(Res).
:- rasp_balance(Res, N), N < 0, rasp_resource(Res), rasp_allval(N).




%%%%%% Mr.Hyde:
#hide rasp_auxatom.
#hide rasp_cons(X,Y,Z,W).
#hide rasp_consumes(X,Y,Z).
#hide rasp_enabled(X).
#hide rasp_enbld(X,Y).
#hide rasp_firings(X,Y).
#hide rasp_idx(X).
#hide rasp_num(X).
#hide rasp_prod(X,Y,Z,W).
#hide rasp_produces(X,Y,Z).
#hide rasp_resource(X).
#hide rasp_RID.
#hide rasp_rrule(X).
#hide rasp_use_n(X,Y,Z,W).
#hide rasp_use_p(X,Y,Z,W).
#hide rasp_val(X).
#hide rasp_optional(X).
#hide rasp_thrifty(X).
#hide rasp_prodigal(X).
#hide rasp_use(X,Y,Z,W).
#hide rasp_extraneeded(X,Y,Z).
#hide rasp_notcounter(X,Y).
#hide rasp_allval(X).
#hide rasp_res_rrule(X,Y).
#hide rasp_auxres(X,Y).
#hide rasp_use_pl(X,Y,Z,W).
#hide rasp_res_pl(X,Y,Z,W).
#hide rasp_sum_use_pl(X,Y,Z,W).
#hide rasp_num_n_choice(X,Y).
#hide rasp_grade(X).
#hide rasp_iter(X).
#hide rasp_cl(X,Y,Z).
#hide rasp_eq(X,Y,Z).
#hide rasp_idx(X,Y,Z).
#hide rasp_num(X,Y).
#hide rasp_dom(X,Y).
#hide rasp_used_idx(X,Y).
#hide rasp_pset_name(X).
#hide rasp_order(X,Y,Z).
#hide rasp_other(X,Y,Z).
#hide rasp_ordered(X,Y,Z,W,U,V).
#hide rasp_auxpred(X,Y).


%%% END OF THE TRANSLATION %%%

