Vous êtes un classificateur de trains qui observe des trains se déplaçant soit vers l'est soit vers l'ouest.
Chaque train est composé d'un ou plusieurs wagons, et chaque wagon est caractérisé par un ensemble de propriétés, représentées comme des atomes de base sur un ensemble fixe de prédicats.
La direction (vers l'est ou vers l'ouest) d'un train doit être déterminée à partir de sa composition.

Pour décrire les trains, nous définissons un ensemble de prédicats et de domaines de base :

- 'a_wagon(Train, Wagon)' : Indique que 'Wagon' fait partie du train 'Train'.
- 'numero_wagon(Wagon, Numero)' : Indique la position du wagon dans son train. 'Numero' est un entier positif.
- 'couleur_wagon(Wagon, Couleur)' : Indique la couleur du wagon. 'Couleur' peut être 'rouge', 'bleu', 'vert', 'jaune' ou 'blanc'.
- 'longueur_wagon(Wagon, Longueur)' : Indique la longueur du wagon. 'Longueur' peut être 'court' ou 'long'.
- 'a_paroi(Wagon, TypeParoi)' : Indique le type de paroi d'un wagon. 'TypeParoi' peut être 'complet' ou 'rampe'.
- 'a_toit(Wagon, TypeToit)' : Indique le type de toit du wagon. 'TypeToit' peut être 'fondation_toit', 'toit_solide', 'toit_renforce', 'toit_pointu' ou 'aucun'.

Vous disposez d'exemples positifs et négatifs sous la forme est(t) ou ouest(t) pour chaque train t, ainsi que de faits de base décrivant sa composition sur les prédicats ci-dessus.

est(train0).
a_wagon(train0, wagon0_1).
numero_wagon(wagon0_1, 1).
couleur_wagon(wagon0_1, vert).
longueur_wagon(wagon0_1, long).
a_paroi(wagon0_1, complet).
a_toit(wagon0_1, toit_pointu).
a_wagon(train0, wagon0_2).
numero_wagon(wagon0_2, 2).
couleur_wagon(wagon0_2, bleu).
longueur_wagon(wagon0_2, long).
a_paroi(wagon0_2, complet).
a_toit(wagon0_2, fondation_toit).

est(train1).
a_wagon(train1, wagon1_1).
numero_wagon(wagon1_1, 1).
couleur_wagon(wagon1_1, blanc).
longueur_wagon(wagon1_1, court).
a_paroi(wagon1_1, rampe).
a_toit(wagon1_1, toit_solide).
a_wagon(train1, wagon1_2).
numero_wagon(wagon1_2, 2).
couleur_wagon(wagon1_2, rouge).
longueur_wagon(wagon1_2, long).
a_paroi(wagon1_2, complet).
a_toit(wagon1_2, toit_pointu).

est(train2).
a_wagon(train2, wagon2_1).
numero_wagon(wagon2_1, 1).
couleur_wagon(wagon2_1, blanc).
longueur_wagon(wagon2_1, court).
a_paroi(wagon2_1, rampe).
a_toit(wagon2_1, aucun).
a_wagon(train2, wagon2_2).
numero_wagon(wagon2_2, 2).
couleur_wagon(wagon2_2, blanc).
longueur_wagon(wagon2_2, court).
a_paroi(wagon2_2, rampe).
a_toit(wagon2_2, toit_solide).

est(train3).
a_wagon(train3, wagon3_1).
numero_wagon(wagon3_1, 1).
couleur_wagon(wagon3_1, jaune).
longueur_wagon(wagon3_1, court).
a_paroi(wagon3_1, complet).
a_toit(wagon3_1, toit_solide).
a_wagon(train3, wagon3_2).
numero_wagon(wagon3_2, 2).
couleur_wagon(wagon3_2, vert).
longueur_wagon(wagon3_2, long).
a_paroi(wagon3_2, rampe).
a_toit(wagon3_2, toit_solide).

est(train4).
a_wagon(train4, wagon4_1).
numero_wagon(wagon4_1, 1).
couleur_wagon(wagon4_1, bleu).
longueur_wagon(wagon4_1, court).
a_paroi(wagon4_1, rampe).
a_toit(wagon4_1, fondation_toit).
a_wagon(train4, wagon4_2).
numero_wagon(wagon4_2, 2).
couleur_wagon(wagon4_2, blanc).
longueur_wagon(wagon4_2, court).
a_paroi(wagon4_2, rampe).
a_toit(wagon4_2, aucun).
a_wagon(train4, wagon4_3).
numero_wagon(wagon4_3, 3).
couleur_wagon(wagon4_3, rouge).
longueur_wagon(wagon4_3, long).
a_paroi(wagon4_3, complet).
a_toit(wagon4_3, toit_renforce).

ouest(train5).
a_wagon(train5, wagon5_1).
numero_wagon(wagon5_1, 1).
couleur_wagon(wagon5_1, jaune).
longueur_wagon(wagon5_1, long).
a_paroi(wagon5_1, rampe).
a_toit(wagon5_1, toit_pointu).
a_wagon(train5, wagon5_2).
numero_wagon(wagon5_2, 2).
couleur_wagon(wagon5_2, rouge).
longueur_wagon(wagon5_2, long).
a_paroi(wagon5_2, rampe).
a_toit(wagon5_2, aucun).

ouest(train6).
a_wagon(train6, wagon6_1).
numero_wagon(wagon6_1, 1).
couleur_wagon(wagon6_1, jaune).
longueur_wagon(wagon6_1, long).
a_paroi(wagon6_1, rampe).
a_toit(wagon6_1, toit_pointu).
a_wagon(train6, wagon6_2).
numero_wagon(wagon6_2, 2).
couleur_wagon(wagon6_2, vert).
longueur_wagon(wagon6_2, court).
a_paroi(wagon6_2, rampe).
a_toit(wagon6_2, toit_pointu).
a_wagon(train6, wagon6_3).
numero_wagon(wagon6_3, 3).
couleur_wagon(wagon6_3, blanc).
longueur_wagon(wagon6_3, court).
a_paroi(wagon6_3, rampe).
a_toit(wagon6_3, fondation_toit).

ouest(train7).
a_wagon(train7, wagon7_1).
numero_wagon(wagon7_1, 1).
couleur_wagon(wagon7_1, bleu).
longueur_wagon(wagon7_1, long).
a_paroi(wagon7_1, rampe).
a_toit(wagon7_1, toit_renforce).
a_wagon(train7, wagon7_2).
numero_wagon(wagon7_2, 2).
couleur_wagon(wagon7_2, blanc).
longueur_wagon(wagon7_2, long).
a_paroi(wagon7_2, complet).
a_toit(wagon7_2, toit_solide).
a_wagon(train7, wagon7_3).
numero_wagon(wagon7_3, 3).
couleur_wagon(wagon7_3, jaune).
longueur_wagon(wagon7_3, long).
a_paroi(wagon7_3, complet).
a_toit(wagon7_3, toit_renforce).

ouest(train8).
a_wagon(train8, wagon8_1).
numero_wagon(wagon8_1, 1).
couleur_wagon(wagon8_1, bleu).
longueur_wagon(wagon8_1, long).
a_paroi(wagon8_1, complet).
a_toit(wagon8_1, toit_solide).
a_wagon(train8, wagon8_2).
numero_wagon(wagon8_2, 2).
couleur_wagon(wagon8_2, jaune).
longueur_wagon(wagon8_2, long).
a_paroi(wagon8_2, rampe).
a_toit(wagon8_2, toit_solide).

ouest(train9).
a_wagon(train9, wagon9_1).
numero_wagon(wagon9_1, 1).
couleur_wagon(wagon9_1, jaune).
longueur_wagon(wagon9_1, court).
a_paroi(wagon9_1, complet).
a_toit(wagon9_1, toit_renforce).
a_wagon(train9, wagon9_2).
numero_wagon(wagon9_2, 2).
couleur_wagon(wagon9_2, jaune).
longueur_wagon(wagon9_2, long).
a_paroi(wagon9_2, complet).
a_toit(wagon9_2, toit_solide).


Votre tâche consiste à formuler une hypothèse sous la forme d'une règle Prolog „est(T) :- Corps.“ qui distingue correctement les trains se dirigeant vers l'est de ceux se dirigeant vers l'ouest.
L'hypothèse doit être vraie pour tous les exemples positifs (c'est-à-dire les trains étiquetés est(t)) et fausse pour tous les exemples négatifs (c'est-à-dire les trains ouest(t)).
L'objectif est de trouver la règle correcte la plus courte, c'est-à-dire celle qui utilise le nombre minimal de littéraux dans le corps sans perdre de conditions nécessaires.
Votre règle ne peut utiliser que les prédicats définis dans l'ouverture ci-dessus et doit parfaitement séparer les trains vers l'est des trains vers l'ouest.
est(Train) :-
    forall(
        (a_wagon(Train, Wagon), couleur_wagon(Wagon, jaune)),
        longueur_wagon(Wagon, court)
    ).
est(train0).
a_wagon(train0, wagon0_1).
numero_wagon(wagon0_1, 1).
couleur_wagon(wagon0_1, vert).
longueur_wagon(wagon0_1, long).
a_paroi(wagon0_1, complet).
a_toit(wagon0_1, toit_pointu).
a_wagon(train0, wagon0_2).
numero_wagon(wagon0_2, 2).
couleur_wagon(wagon0_2, bleu).
longueur_wagon(wagon0_2, long).
a_paroi(wagon0_2, complet).
a_toit(wagon0_2, fondation_toit).

est(train1).
a_wagon(train1, wagon1_1).
numero_wagon(wagon1_1, 1).
couleur_wagon(wagon1_1, blanc).
longueur_wagon(wagon1_1, court).
a_paroi(wagon1_1, rampe).
a_toit(wagon1_1, toit_solide).
a_wagon(train1, wagon1_2).
numero_wagon(wagon1_2, 2).
couleur_wagon(wagon1_2, rouge).
longueur_wagon(wagon1_2, long).
a_paroi(wagon1_2, complet).
a_toit(wagon1_2, toit_pointu).

est(train2).
a_wagon(train2, wagon2_1).
numero_wagon(wagon2_1, 1).
couleur_wagon(wagon2_1, blanc).
longueur_wagon(wagon2_1, court).
a_paroi(wagon2_1, rampe).
a_toit(wagon2_1, aucun).
a_wagon(train2, wagon2_2).
numero_wagon(wagon2_2, 2).
couleur_wagon(wagon2_2, blanc).
longueur_wagon(wagon2_2, court).
a_paroi(wagon2_2, rampe).
a_toit(wagon2_2, toit_solide).

est(train3).
a_wagon(train3, wagon3_1).
numero_wagon(wagon3_1, 1).
couleur_wagon(wagon3_1, jaune).
longueur_wagon(wagon3_1, court).
a_paroi(wagon3_1, complet).
a_toit(wagon3_1, toit_solide).
a_wagon(train3, wagon3_2).
numero_wagon(wagon3_2, 2).
couleur_wagon(wagon3_2, vert).
longueur_wagon(wagon3_2, long).
a_paroi(wagon3_2, rampe).
a_toit(wagon3_2, toit_solide).

est(train4).
a_wagon(train4, wagon4_1).
numero_wagon(wagon4_1, 1).
couleur_wagon(wagon4_1, bleu).
longueur_wagon(wagon4_1, court).
a_paroi(wagon4_1, rampe).
a_toit(wagon4_1, fondation_toit).
a_wagon(train4, wagon4_2).
numero_wagon(wagon4_2, 2).
couleur_wagon(wagon4_2, blanc).
longueur_wagon(wagon4_2, court).
a_paroi(wagon4_2, rampe).
a_toit(wagon4_2, aucun).
a_wagon(train4, wagon4_3).
numero_wagon(wagon4_3, 3).
couleur_wagon(wagon4_3, rouge).
longueur_wagon(wagon4_3, long).
a_paroi(wagon4_3, complet).
a_toit(wagon4_3, toit_renforce).

ouest(train5).
a_wagon(train5, wagon5_1).
numero_wagon(wagon5_1, 1).
couleur_wagon(wagon5_1, jaune).
longueur_wagon(wagon5_1, long).
a_paroi(wagon5_1, rampe).
a_toit(wagon5_1, toit_pointu).
a_wagon(train5, wagon5_2).
numero_wagon(wagon5_2, 2).
couleur_wagon(wagon5_2, rouge).
longueur_wagon(wagon5_2, long).
a_paroi(wagon5_2, rampe).
a_toit(wagon5_2, aucun).

ouest(train6).
a_wagon(train6, wagon6_1).
numero_wagon(wagon6_1, 1).
couleur_wagon(wagon6_1, jaune).
longueur_wagon(wagon6_1, long).
a_paroi(wagon6_1, rampe).
a_toit(wagon6_1, toit_pointu).
a_wagon(train6, wagon6_2).
numero_wagon(wagon6_2, 2).
couleur_wagon(wagon6_2, vert).
longueur_wagon(wagon6_2, court).
a_paroi(wagon6_2, rampe).
a_toit(wagon6_2, toit_pointu).
a_wagon(train6, wagon6_3).
numero_wagon(wagon6_3, 3).
couleur_wagon(wagon6_3, blanc).
longueur_wagon(wagon6_3, court).
a_paroi(wagon6_3, rampe).
a_toit(wagon6_3, fondation_toit).

ouest(train7).
a_wagon(train7, wagon7_1).
numero_wagon(wagon7_1, 1).
couleur_wagon(wagon7_1, bleu).
longueur_wagon(wagon7_1, long).
a_paroi(wagon7_1, rampe).
a_toit(wagon7_1, toit_renforce).
a_wagon(train7, wagon7_2).
numero_wagon(wagon7_2, 2).
couleur_wagon(wagon7_2, blanc).
longueur_wagon(wagon7_2, long).
a_paroi(wagon7_2, complet).
a_toit(wagon7_2, toit_solide).
a_wagon(train7, wagon7_3).
numero_wagon(wagon7_3, 3).
couleur_wagon(wagon7_3, jaune).
longueur_wagon(wagon7_3, long).
a_paroi(wagon7_3, complet).
a_toit(wagon7_3, toit_renforce).

ouest(train8).
a_wagon(train8, wagon8_1).
numero_wagon(wagon8_1, 1).
couleur_wagon(wagon8_1, bleu).
longueur_wagon(wagon8_1, long).
a_paroi(wagon8_1, complet).
a_toit(wagon8_1, toit_solide).
a_wagon(train8, wagon8_2).
numero_wagon(wagon8_2, 2).
couleur_wagon(wagon8_2, jaune).
longueur_wagon(wagon8_2, long).
a_paroi(wagon8_2, rampe).
a_toit(wagon8_2, toit_solide).

ouest(train9).
a_wagon(train9, wagon9_1).
numero_wagon(wagon9_1, 1).
couleur_wagon(wagon9_1, jaune).
longueur_wagon(wagon9_1, court).
a_paroi(wagon9_1, complet).
a_toit(wagon9_1, toit_renforce).
a_wagon(train9, wagon9_2).
numero_wagon(wagon9_2, 2).
couleur_wagon(wagon9_2, jaune).
longueur_wagon(wagon9_2, long).
a_paroi(wagon9_2, complet).
a_toit(wagon9_2, toit_solide).


est 52 1 vert long complet toit_pointu 2 bleu long complet fondation_toit
est -41 1 blanc court rampe toit_solide 2 rouge long complet toit_pointu
est 228 1 blanc court rampe aucun 2 blanc court rampe toit_solide
est 141 1 jaune court complet toit_solide 2 vert long rampe toit_solide
est 52 1 bleu court rampe fondation_toit 2 blanc court rampe aucun 3 rouge long complet toit_renforce
ouest -3 1 jaune long rampe toit_pointu 2 rouge long rampe aucun
ouest 56 1 jaune long rampe toit_pointu 2 vert court rampe toit_pointu 3 blanc court rampe fondation_toit
ouest 217 1 bleu long rampe toit_renforce 2 blanc long complet toit_solide 3 jaune long complet toit_renforce
ouest 16 1 bleu long complet toit_solide 2 jaune long rampe toit_solide
ouest 8 1 jaune court complet toit_renforce 2 jaune long complet toit_solide