%question 1 fini(N):- disponible(X, V, N), cible(V). %disponible2(N) :- disponible(X1, V1, N), disponible(X2, V2, N), X1 != X2. % question 2 choisi1(X, N) :- disponible(X, V, N), not fini(N), not autrechoisi1(X, N). autrechoisi1(X, N) :- disponible(X, V, N), choisi1(Y, N), X != Y. % question 3 choisi2(X, N) :- disponible(X, V, N), choisi1(Y, N), not X = Y, not autrechoisi2(X, N). autrechoisi2(X, N) :- disponible(X, V, N), choisi2(Y, N), X != Y. % question 4 operation(addition). operation(multiplication). operation(soustraction). operation(division). opchoisie(O, N) :- operation(O), choisi1(X1, N), choisi2(X2, N), not autreoperation(O, N). autreoperation(O1, N) :- operation(O1), opchoisie(O2, N), O1 != O2. :- opchoisie(division, N), choisi1(X, N), choisi2(Y, N), disponible(X, V1, N), disponible(Y, V2, N), V1 \ V2 != 0. % question 5 %disponible(X, V, N + 1) :- disponible(X, V, N), not fini(N), not choisi1(X, N), not choisi2(X, N), nbdisponible(Q, 0), N + 1 < Q. %nbdisponible(M-1, N + 1) :- nbdisponible(M, N), not fini(N), N > 0, nbdisponible(Q, 0), N + 1 < Q. % question 6 % Si on ne borne pas N dans la première règle de la question 5, ASPERIX s'arretera mais CLINGO va partir à l'infini. % règles évoquées dans l'énoncé, nécessaires mais pas demandées. disponible(X, V1 + V2, N+1) :- opchoisie(addition, N), choisi1(X, N), choisi2(Y, N), disponible(X, V1, N), disponible(Y, V2, N), etapes(N+1). disponible(X, V1 - V2, N+1) :- opchoisie(soustraction, N), choisi1(X, N), choisi2(Y, N), disponible(X, V1, N), disponible(Y, V2, N), etapes(N+1). disponible(X, V1 * V2, N+1) :- opchoisie(multiplication, N), choisi1(X, N), choisi2(Y, N), disponible(X, V1, N), disponible(Y, V2, N), etapes(N+1). disponible(X, Z, N+1) :- opchoisie(division, N), choisi1(X, N), choisi2(Y, N), disponible(X, V1, N), disponible(Y, V2, N), Z == V1 / V2. etapes(0..1). disponible(n1, 25, 0). disponible(n2, 50, 0). disponible(n3, 7, 0). disponible(n4, 6, 0). disponible(n5, 10, 0). disponible(n6, 100, 0). cible(263).