Question : Tu as bien dit qu'il fallais énumérer tous les triplets de DNFpositives (indépendantes) (sur les variables correspondantes) ? (en fait, même plus que des triplet, ça doit être des quintuplets...) Et bien, j'ai fait ça, et je suis convaincu que mon énumération des DNFpositive n'a qu'un représentant par fonction... (disons que pour chaque DNF positive indépendante, j'ai évité les permutation des clauses et à l'intérieur des clauses). Mais malgré ça, j'ai l'impression qu'il y a plusieur millions d'item à énumérer, et mon ordinateur (1.0 GHz) met 1h30 à énumérer ne serait-ce que les triplets (3 vars, 4 vars, 5vars)... Réponse : Il y a effectivement une construction qui vous sera utile pour le projet, et que j'ai oublié de vous presenter en cours. Il s'agit de la construction "findall" qui vous permet de construire une liste de toutes les solutions d'une requête. Concrêtement, si - R est une requête Prolog, - L est une liste des variables apparaissant dans la requête R - X est une variable Prolog alors la requête findall(L,R,X) unifie X avec la liste de toutes les solutions de la requête R restreinte aux variables de la liste L. Par exemple, pour la définition du prédicat "myselect" suivant myselect(X,Y,[X|Y]). myselect(X,[Y|Z],[Y|V]) :- myselect(X,Z,V). la requête findall((X,Y), myselect(X,Y,[a,b,c,d]), Z). donne la réponse Z = [(a,[b,c,d]),(b,[a,c,d]),(c,[a,b,d]),(d,[a,b,c])] tandis que la requête findall((Y), myselect(X,Y,[a,b,c,d]), Z). donne la réponse Z = [[b,c,d],[a,c,d],[a,b,d],[a,b,c]] D'ailleurs, il n'y a pas autant de DNF à énumérer. En fait, j'ai trouvé les nombres suivants de DNF: - en trois variables : 20 DNF différents. Si on construit cette liste à la main en évitant les symétries et quelques cas pariticuliers qui ne servent à rien on obtient une liste de 7 DNF différents en trois variables. - en quatre variables : 168 DNF différents - en cinq variables : 7581 DNF différents. (En fait il se trouve qu'on peut exclure de cette liste encore beaucoup de formules qui ne peuvent pas donner de solution).