%%%[(1,[(b,0),(a,0)])]
%%% 'ASP_to_CHR'([c,(bot:-c,not(a)),(b:-not(a),not(d)),(a:-not(b),not(d))],'test_12',all_answer_sets,'no_data')
:- use_module(library(chr)).
:- chr_constraint success/0, failure/0, supported_1/0, exclusion_1/0, supported_2/0, exclusion_2/0, supported_3/0, exclusion_3/0, launcher/0, next_it/1, cfc/1, clean_result/0, b/0, out_b/0, d/0, out_d/0, a/0, out_a/0, c/0.
success <=> true.
failure <=> fail.
b # passive \ b <=> true.
a # passive \ a <=> true.

b,out_b <=> fail.
d,out_d <=> fail.
a,out_a <=> fail.


%% bot:-c,not(a)
supported_1 @ c==>
   true | 
   supported_1.
apply_constraint_1 @ supported_1,out_a<=>
   failure.
blocked_1 @ a \ supported_1<=>
   success.
necessity_1 @ supported_1<=>
   exclusion_1.
exclusion_1 @ out_a,exclusion_1<=>
   failure.
clean_exclusion_1 @ a \ exclusion_1<=>
   success.

%% a:-not(b),not(d)
unuseful_2 @ a \ supported_2<=>
   success.
propagate_2 @ out_d,out_b \ supported_2<=>
   a.
blocked_2 @ b \ supported_2<=>
   success.
blocked_2 @ d \ supported_2<=>
   success.
exclusion_2 @ out_d,out_b,exclusion_2<=>
   failure.
clean_exclusion_2 @ b \ exclusion_2<=>
   success.
clean_exclusion_2 @ d \ exclusion_2<=>
   success.

%% b:-not(a),not(d)
unuseful_3 @ b \ supported_3<=>
   success.
propagate_3 @ out_d,out_a \ supported_3<=>
   b.
blocked_3 @ a \ supported_3<=>
   success.
blocked_3 @ d \ supported_3<=>
   success.
exclusion_3 @ out_d,out_a,exclusion_3<=>
   failure.
clean_exclusion_3 @ a \ exclusion_3<=>
   success.
clean_exclusion_3 @ d \ exclusion_3<=>
   success.
choice_2 @ next_it(X_0),supported_2 # passive <=>
   X_1 is X_0*2, out_b,out_d,a,next_it(X_1) ; X_1 is X_0*2+1, exclusion_2,next_it(X_1).
choice_3 @ next_it(X_0),supported_3 # passive <=>
   X_1 is X_0*2, out_a,out_d,b,next_it(X_1) ; X_1 is X_0*2+1, exclusion_3,next_it(X_1).




next_it(_Profondeur), exclusion_1# passive <=> fail.
next_it(_Profondeur), exclusion_2# passive <=> fail.
next_it(_Profondeur), exclusion_3# passive <=> fail.

success @ next_it(_Profondeur) <=> clean_result, chr_show_store(user),  write("--"), nl, fail.

launcher <=> c, 
   supported_2,supported_3,
   next_it(0).

clean_result, out_b # passive <=> clean_result.
clean_result, out_d # passive <=> clean_result.
clean_result, out_a # passive <=> clean_result.
clean_result <=> true.




