Logique pour l`informatique

Transcription

Logique pour l`informatique
Université Rabelais de Tours
UFR Sciences et Technologiques
L2 ST mention informatique
Année 2011-2012
Logique pour l'informatique
Projet PROLOG
1. Introduction : structures de listes
Ce projet fait appel à l’utilisation d’une structure de données récursive non étudiée en cours. Il s’agit des listes qui se retrouvent
aussi bien en Prolog que dans bien d’autres langages que vous avez déjà rencontrés dans votre scolarité. Une des tâches qui
vont vous incomber dans ce projet va déjà être de comprendre comment fonctionnent les listes Prolog, en consultant les
supports de ce cours mais aussi d’autres ressources disponibles à la bibliothèque universitaire ou sur Internet … ainsi que
certaines bandes dessinées (voir plus loin). Dans l’immédiat, je vais introduire rapidement la syntaxe des listes Prolog.
Liste Prolog - Comme dans tout autre langage les implémentant, les listes Prolog permettent de représenter des ensembles
d’éléments homogènes en nombre a priori variable. Pour arriver à modéliser de tels ensembles par un objet unique, on utilise
une représentation récursive, la liste, qui distingue le premier élément de l’ensemble (appelé la tête de liste) de ses autres
éléments (la queue de liste). Cette queue est elle-même une nouvelle liste, d’où le terme de structure de donnée récursive : une
liste comporte elle-même une sous-liste. On comprend dès lors que la programmation avec des listes induit dans la plupart des
cas une définition récursive des prédicats.
Exemple : on veut représenter l’ensemble de valeurs {1,2,3} à l’aide d’une liste L. Cette liste aura pour tête l’élément 1, tandis
que la queue de L est une sous-liste LQUEUE qui représente l’ensemble {2,3}. La nouvelle liste LQUEUE a pour tête
l’élément 2 tandis que sa queue est une nouvelle sous-liste LQUEUEQUE représentant l’ensemble {3} … et non pas l’élément
3 !!! On décompose en effet cette nouvelle queue LQUEUEQUEUE en une tête 3 et une queue, qui est la liste vide, élément
prédéfini du langage Prolog.
D’un point de vue syntaxique, les listes Prolog se représentent entre crochet :
- liste vide
[]
- liste quelconque
[T | Q ] sachant que T est un élément correspondant au type de la liste (par exemple, si
nous avons affaire à une liste de nombre, T sera un nombre) et Q est une nouvelle liste.
C’est cette écriture récursive générale qui sera le plus souvent utilisée dans vos programmes. Toutefois, il arrive que l’on
connaisse exactement le nombre d’éléments d’une liste. Dans ce cas, on peut utiliser une écriture énumératique
- liste à un seul élément
[2] liste à un élément numérique, correspondant à l’ensemble {2}
- liste à plusieurs éléments
[riri,fifi,loulou] liste à trois constantes correspondant à l’ensemble {riri, fifi,loulou }
Je vous invite à consulter les supports de cours, ou toute autre ressource équivalente, pour comprendre les principes de la
programmation avec des listes avant d’aborder le problème ci-dessous, qui constitue le sujet du projet.
2. Projet : un problème schtroumpfement schtroumpf
Outre la célèbre série des Schtroumpfs, le dessinateur Peyo est l’auteur de nombreuses autres bandes dessinées, dont celles de
Johan et Pirlouit, qui content les aventures d’un jeune chevalier plein de bravoure et d’un ménestrel gaffeur et mauvais
chanteur en plein Moyen-âge. Dans certains albums (telle la Flute à six Schtroumpfs), les personnages de Johan et Pirlouit et
des Schtroumpfs sont réunis. Les pouvoirs magiques du Grand Schtroumpf leur sont bien utiles, le seul souci de nos deux
aventuriers médiévaux étant de se faire comprendre de ces petits nains au langage très troublant. Et si Pirlouit, Champolion des
temps reculés, semble avoir compris certains rudiments de ce langage, son apprentissage ne va pas sans heurt. Quel dommage
que le langage Prolog ne fut pas inventé à cette époque… Nous allons en effet faire appel à vos talents de programmeur pour
réaliser un petit traducteur automatique français/schtroumpf.
Quelques éléments de langage schtroumpf à l’usage des étudiants qui ne préparent pas le TOSAFL (Test Of
Schtroumpf As a Foreign Language) niveau Schtroumpf 2 – Comme vous le savez sans doute (si non, relisez des albums
de Schtroumpf !), les mots sont traduits différemment en Schtroumpf suivant leur catégorie grammaticale. Ce langage ne
possède en effet que le verbe schtroumpfer pour représenter la langue française. Ce verbe suit les mêmes principes de
conjugaison que les verbes du premier groupe en français. Ce qui simplifie grandement la tâche des enseignants de Schtroupmf
Langue Etrangère… Notez toutefois que l’on écrit schtroumpfons et non pas schtroumpfeons lorsque l’on veut traduire
mangeons mais je suis persuadé que nous ne tomberez pas dans ce piège assez commun de la langue schtroumpf.
De même, il n’existe d’un adverbe en schtroumpf qui est schtroumpfement, qui représente tous les adverbes existant en
français. Notez qu’il est toujours d’usage d’accentuer la prononciation du p en schtroumpf, sauf lorsque le p se trouve entre un
m et un f.
Enfin, en première approximation, tous les autres mots du français sont traduits sans modification en langage schtroumpf.
Ainsi, on ne dira pas : Les schtroumpfes schtroumpfes des schtroumpfes de la schtroumpfe schtroumpfent ma schtroumpfe
d’une schtroumpfe schtroumpfe mais bien sûr Les sanglots longs des violons de l’automne schtroumpfent ma vie d’une
langueur monotone d’où ressort mieux la beauté de la versification schtroumpfe (et encore, je ne vous marque pas l’accent
tonique !).
De même, on ne dira pas bien sûr Tu la schtroumpfe ma schtroumpfe dans ta schtroumpfe schtroumpfe ? mais bien
évidemment Tu la schtroumpfe ma main dans ta gueule connard ? où l’on ressent bien plus aisément toute la truculence de la
langue schtroumpfe !
Ce petit introductif linguistique étant donné, nous allons pouvoir nous intéresser à la réalisation de notre projet.
Représentation des connaissances — On cherche à réaliser un programme Prolog qui traduise une phrase écrite en français
en une phrase schtroumpf. Pour cela, on représentera tout énoncé par une liste de mots. Par exemple :
Vive le peuple schtroumpf
[vive, le, peuple, schtroumpf]
On remarquera qu’il n’est pas besoin ici de faire appel à une notation sous forme de chaînes de caractères. Tout simplement,
chaque phrase sera représentée sous la forme d’une liste de constante, ayant le bon goût de se dénommer … comme le mot
qu’elles représentent. Cette représentation a ses limites, mais elle conviendra amplement pour les besoins du projet.
Représentation du lexique — Le programme que nous allons réaliser devra être capable de traduire toute phrase française
comportant les mots suivants :
-
les verbes manger et préparer, conjugués à toutes les formes du présent, de l’imparfait et du futur simple.
-
les adverbes rapidement et goulument.
-
les noms communs soupe , salsepareille et pomme de terre au singulier et au pluriel. Ce dernier mot est un terme
composé. Il se représentera simplement comme une suite de mots. Par exemple : [pomme, de, terre].
-
Les noms propres Johan, Pirlouit, Grand_Schtroumpf, Schtroumpf_Gourmand. Ici, les noms propres composés seront
au contraire représentés sous la forme d’une constante comportement un tiret (underscore).
-
Les pronoms je, tu, il, nous, vous, ils.
-
Les mots outils : le, la, les, des, de.
1 — En utilisant des prédicats adéquats, représentez l’ensemble du lexique ci-dessus. Par exemple, le prédicat d’arité 1
Adv_F/1 pourra introduire les adverbes français qui devront être connus du programme.
Représentez également si vous le souhaitez le lexique du langage schtroumpfe. Cette contrainte n’est toutefois pas nécessaire,
tout dépendra des choix de représentation que vous opérerez dans votre programme.
Traduction simple — Comme vous l’avez compris, en première approche, la traduction français schtroumpfe s’apparente à
une traduction mot à mot. Ce qui, par bien des aspects, va nous faciliter la tâche.
2 — Ecrire un prédicat d'arité 2 trad_mot(FR,S) qui réussit si S correspond à la traduction en schtroumpf du mot français
FR.
3 — Ecrire alors un prédicat d'arité 2 trad(L_FR,L_S) qui réussit si la liste L_S représente un énoncé qui correspond à la
traduction en schtroumpf d'un énoncé français représenté par la liste L_FR. Ce programme devra bien entendu être à même
d’assurer l’accord en genre et en nombre entre les mots des phrases. Normalement, ce respect des accords aura été géré
implicitement par la traduction mot à mot…
Correction grammaticale — Alors que la langue schtroumpfe a gardé toute sa pureté depuis des temps immémoriaux, la
correction grammaticale des productions orales et écrites des français laisse de plus en plus à désirer. En particulier chez les
étudiants de licence en informatique… Cette situation peut rendre très difficile la compréhension de vos phrases traduites pour
un schtroumpf habitué à ne faire aucune erreur à une dictée.
Ainsi, une faute d’accord telle que ils mange la soupe va être traduite par ils schtroumpfe la soupe et non pas ils schtroumpfent
la soupe
Ce type d’erreur n’est pas acceptable et le logiciel de traduction doit refuser une phrase française présentant de telles fautes de
grammaire.
4 — Modifiez votre programme en conséquence pour qu’il réponse NO si l’énoncé entré est erroné.
Dialectologie Schtroumpfe — Bien que notre constitution affirme dans son premier article que le France est une seule nation
et que le français est la langue de la république, ce langage présente des spécificité dialectales. Ainsi, alors que le tourangeau
parlera d’une poignée de porte, le bisontin empoignera la clanche. De même, alors que le parisien ira à la fête foraine, le
lyonnais s’amusera à la vogue. Et si le lillois ramasse des pommes de pin dans la forêt, l’ardéchois aura son panier rempli de
babets. Le langage schtroumpfe a également des subtilités dialectales qui sont bien plus fines et ne concernent que les mots
composés de la forme N de N : alors que le Schtroumpf du sud, traduira une pomme de terre par une schtroumpfe de terre, le
Schtroumpf du nord fera remarquer qu’il s’agit bien entendu d’une pomme de schtroumpfe. Ces subtilités sont à la base d’une
querelle linguistique mémorable (relire l’indispensable Schtroumpf vert et vert Schtroumpfe) dont la gravité dépassa de loin
celle qui empoisonne la vie quotidienne de nos voisins d’Outre-Quiévrain au point de menacer leur royauté.
C’est pourquoi, dans sa grande sagesse, l’académie Schtroumpfe a décider d’adopter une langue normalisée pour tous les écrits
officiels du pays. C’est donc trois langues qui co-existent désormais sans heurts dans ce petit pays :
- schtroumpf septentrional (nord)
pomme de schtroumpfe (prononcer pomme de CHHtroumpf)
- schtroumpf normalisé (standard)
pomme de terre
- schtroumpf méridional (sud)
schtroumpfe de terre (prononcer schtroumpfeuh de terreuh)
Afin de pas raviver le schtroumpf de la discorde, non la pomme de la schtroumpf, enfin bref, la pomme de la discorde, il vous
est demandé d’adapter votre programme afin qu’il soit à même de proposer une traduction dans les trois dialectes.
5 — Définir donc un prédicat d'arité 3 trad(L_FR,L_S,D) qui réussit si la liste L_S représente un énoncé qui correspond à
la traduction dans le dialecte schtroumpf D d'un énoncé français représenté par la liste L_FR. Par exemple :
?- trad([Johan,mange,la,pomme,de,terre],L_S,nord)
YES L_S = [Johan, schtroumpfe, la, pomme, de, schtroumpfe]
?- trad([Johan,mange,la,pomme,de,terre],L_S,standard)
YES L_S = [Johan, schtroumpfe, la, pomme, de, terre]
?- trad([Johan, mange,la,pomme,de,terre],L_S,sud)
YES L_S = [Johan, schtroumpfe, la, schtroumpfe, de, terre]
3. Travail demandé
Il est demandé de rendre le programme Prolog ainsi réalisé (réalisé en solo ou, au maximum, en binôme) à [email protected] avant le mercredi 30 novembre à 12 :00, délai de rigueur. L’envoi sera constitué d’un fichier
ASCII avec extension .pl comportant le nom de famille du ou des étudiants concernés.
La notation consistera à faire tourner le système sur un jeu de 20 exemples (1 point par exemple) correspondant aux différents
points abordés dans le projet. Un projet abordant sans faute les trois premières questions aura 12 points garantis sur 20.
4. Bibliographie
Langage schtroumpf, Désencyclopédie, http://desencyclopedie.wikia.com/wiki/Langage_schtroumpf
Peyo (2008) Le Schtroumpf sans effort par la méthode linguaschtroumpf. In. Les schtroumpfeurs de flute.
Le Lombard. ISBN : 978-2-8036-2472-

Documents pareils