
/*

		CONNAISSANCES RELATIVES AUX QUADRILATERES

*/

/* (1)  Formulation explicite des proprietes evoquees */

/* Le vocabulaire et sa signification : on rappelle que le discours se refere a un quadrilatere hypothetique dont il s'agit de determiner la nature et les proprietes */

trad(carre, 'Le quadrilatere est un carre').
trad(losange,  'Le quadrilatere est un losange').
trad(rectangle,  'Le quadrilatere est un rectangle').
trad(parallelogramme,  'Le quadrilatere est un parallelogramme').
trad(trapeze,  'Le quadrilatere est un trapeze').
trad(trapeze_isocele,  'Le quadrilatere est un trapeze isocele').
trad(trapeze_rectangle,  'Le quadrilatere est un trapeze rectangle').

trad(inscriptible,  'Le quadrilatere est inscriptible (dans un cercle)').

trad(diag_egales,  'Les diagonales sont egales').
trad(diag_ortho,  'Les diagonales sont orthogonales').
trad(diag_milieu,  'Les diagonales se coupent en leur milieu').

trad(ang_op_suppl, 'Les angles opposes sont supplementaires').
trad(ang_op_egaux, 'Les angles opposes sont egaux').
trad(deux_ang_op_droits, 'Il y a deux angles droits opposes ').
trad(quatre_ang_droits, 'Les quatre angles sont droits').
trad(un_ang_droit, 'Il y a un angle droit').

trad(quatre_cotes_egaux, 'Les quatre cotes sont egaux').
trad(cotes_op_egaux, 'Les cotes opposes sont egaux').
trad(cotes_op_paralleli, 'Les cotes opposes sont paralleles').

trad(deux_cotes_op_egaux, 'Il y a deux cotes opposes egaux').
trad(deux_cotes_op_par, 'Il y a deux cotes opposes paralleles').
trad(deux_cotes_adj_egaux, 'Il y a deux cotes adjacents egaux').

/* Application a l'explicitation des regles, dont le format est celui de clauses de Horn propositionnelles [Concusion | Premisses].
Exemple : pour la regle "[carre, rectangle, losange]" on developpera :
SI Le quadrilatere est un rectangle
ET SI Le quadrilatere est un losange
ALORS Le quadrilatere est un carre     */

tradregle([Concl, Prem1|SPrem]) :- write('SI '), 
		trad(Prem1, T), write(T), nl, tradprem(SPrem), 
		write('ALORS '), tradconcl(Concl).
tradprem([]).
tradprem([P|S]) :- write('ET SI '), trad(P, T), write(T), nl,
				tradprem(S).
tradconcl(C) :- trad(C, T), write(T), nl.



/* (2) LISTE DES REGLES, par centres d'interet */

/* Carres et losanges */

regle([carre, rectangle, losange]).
regle([rectangle, carre]).
regle([losange, carre]).

regle([carre, inscriptible, diag_ortho]).

regle([parallelogramme, losange]).
regle([losange, parallelogramme, diag_ortho]).
regle([losange, parallelogramme, deux_cotes_adj_egaux]).

regle([losange, quatre_cotes_egaux]).
regle([quatre_cotes_egaux, losange]).


/* Rectangles */

regle([rectangle, quatre_ang_droits]).
regle([quatre_ang_droits, rectangle]).

regle([parallelogramme, rectangle]).
regle([rectangle, parallelogramme, un_ang_droit]).
regle([un_ang_droit, rectangle]).
regle([rectangle, parallelogramme, inscriptible]).
regle([inscriptible, rectangle]).
regle([rectangle, parallelogramme, diag_egales]).
regle([diag_egales, rectangle]).


/* Parallelogrammes */

regle([parallelogramme, cotes_op_egaux]).
regle([cotes_op_egaux, parallelogramme]).

regle([parallelogramme, cotes_op_par]).
regle([cotes_op_par, parallelogramme]).

regle([parallelogramme, diag_milieu]).
regle([diag_milieu, parallelogramme]).

regle([parallelogramme, ang_op_egaux]).
regle([ang_op_egaux, parallelogramme]).


/* Trapezes */

regle([trapeze, deux_cotes_par]).
regle([deux_cotes_par, trapeze]).

regle([trapeze_rectangle, trapeze, un_ang_droit]).
regle([trapeze, trapeze_rectangle]).
regle([un_ang_droit, trapeze_rectangle]).

regle([trapeze, trapeze_isocele]). /* deux cotes op egaux mais pas un parallelogramme */
regle([trapeze_isocele, trapeze, diag_egales]).
regle([diag_egales, trapeze_isocele]).
regle([trapeze_isocele, trapeze, inscriptible]).
regle([inscriptible, trapeze_isocele]).
regle([deux_cotes_op_egaux, trapeze_isocele]).


/* Regles "generales" */

regle([un_ang_droit, quatre_ang_droits]).
regle([deux_ang_op_droits, quatre_ang_droits]).
regle([deux_ang_op_droits, un_ang_droit, ang_op_suppl]).
regle([deux_ang_op_droits, un_ang_droit, ang_op_egaux]).
regle([quatre_ang_droits, ang_op_suppl, ang_op_egaux]).

regle([deux_ang_op_egaux, ang_op_egaux]).
regle([deux_ang_op_egaux, deux_ang_op_droits]).

regle([inscriptible, ang_op_suppl]).
regle([ang_op_suppl, inscriptible]).

regle([deux_cotes_par, cotes_op_par]).
regle([cotes_op_par, deux_cotes_par, deux_ang_op_egaux]).

regle([cotes_op_egaux, quatre_cotes_egaux]).
regle([deux_cotes_adj_egaux, quatre_cotes_egaux]).
regle([deux_cotes_op_egaux, quatre_cotes_egaux]).
regle([quatre_cotes_egaux, cotes_op_egaux, deux_cotes_adj_egaux]).

