Il s'agit de transformer des expressions booléennes quelconques pour obtenir des expressions booléennes équivalentes mises sous forme normale disjonctive : sans constante, avec des noeuds 'non' appliqués à des feuilles seulement, et ne possédant pas de 'ou' dans les sous-arbres de racine 'et'. Exemple : non(et(ou(a,faux),b)) se transforme en ou(non(a),non(b)).

Voila ce que j'ai fai mais ca marche pa et je sai pa c ou le probleme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
normaliser(a,p):-distribuerT(a,r),peigner(r,p);
 
distribuerT(ou(a,b),ou(m,n)):-distribuerT(a,m),distribuerT(b,n);
distribuerT(et(a,b),r):-distribuerT(a,m),distribuerT(b,n),distribuer1(et(m,n),r);
distribuerT(non(a),r):-distribuerT(a,m),distribuerNon(non(m),r);
distribuerT(a,a):-terminal(a);
 
distribuer1(et(ou(a,b),c),ou(mn)):-distribuer1(et(a,c),m),distribuer1(et(b,c),n);
distribuer1(et(a,ou(b,c)),ou(m,n)):-distribuer1(et(a,b),m),distribuer1(et(a,c),n);
distribuer1(et(a,b),et(a,b)):-acheveEt(a),acheveEt(b);
 
distribuerNon(non(ou(a,b)),r):-distribuerNon(non(a),m),distribuerNon(non(a),m),distribuerNon(non(b),n),distribuerT(et(m,n),r);
distribuerNon(non(et(a,b),r):-distribuerNon(non(a),m),distribuerNon(non(a),m),distribuerNon(non(b),n),distribuerT(ou(m,n),r);
distribuerNon(non(non(non(a)),r):-distribuerT(a,r);
distribuerNon(non(a),non(a)):-terminal(a);
 
peigner(ou(ou(a,b),c),r):-peigner(ou(a,ou(b,c)),r);
peigner(ou(a,b),ou(m,n)):-feuille(a,o),peigner(a,m),peigner(b,n);
peigner(non(a),non(a));
peigner(a,a):-terminal(a);
 
peigner(et(et(a,b),c),r):-peigner(et(a,et(b,c)),r);
peigner(et(a,b),et(m,n)):-feuille(a,o),peigner(a,m),peigner(b,n);
peigner(non(a),non(a));
peigner(a,a):-terminal(a);
 
acheveEt(et(a,b)):-acheveEt(a),acheveEt(b);
acheveEt(non(a)):-terminal(a);
acheveEt(a):-terminal(a);
 
feuille(et(a,b),ou);
feuille(non(a),ou);
feuille(a,ou):-terminal(a);
 
feuille(non(a),et):-terminal(a);
feuille(a,et):-terminal(a);
terminal(a):-ident(a);


je suis debutant , alors merci d'avance pour votre aide.