Contacts

Introduction au langage de programmation logique Prologue. Langage de programmation logique Prolog Utilisation de Prolog dans l'environnement C

La conférence est consacrée à la résolution de problèmes à l'aide d'un graphe d'espace d'états. L'espace d'état est décrit sous la forme d'un ensemble d'états - sommets du graphe, d'un ensemble de transitions d'état à l'état - arcs du graphe, d'un ensemble d'états initiaux et d'un ensemble d'états finaux. La solution au problème est représentée par un chemin sur le graphe de l’espace d’état reliant l’état initial à l’état final. Si l’espace d’état du problème est petit, alors toutes les solutions optimales seront trouvées en utilisant une recherche en profondeur d’abord. Dans les problèmes avec un grand espace d’états, une seule solution optimale sera calculée via une recherche en largeur d’abord. Les solveurs universels sont appliqués aux problèmes. Les États dans différentes tâches peuvent appartenir à différents domaines. Pour mémoriser les meilleures solutions trouvées, un varM « variable variable » est utilisé. Le compilateur trouve lui-même les types nécessaires. Visual Prolog version 7.5, non encore publié. Sa publication est prévue pour 2014, mais la date exacte n'est pas encore connue. Visual Prolog 7.4 est désormais accessible à tous.

Depuis des millénaires, l’humanité accumule, traite et transmet des connaissances. À ces fins, de nouveaux moyens sont constamment inventés et les anciens sont améliorés : parole, écriture, courrier, télégraphe, téléphone, etc. L'avènement des ordinateurs a joué un rôle majeur dans la technologie du traitement des connaissances.

En octobre 1981, le ministère japonais du Commerce international et de l'Industrie a annoncé la création d'un organisme de recherche - l'Institut pour le centre de recherche sur les technologies informatiques de nouvelle génération. L'objectif de ce projet était de créer des systèmes de traitement de l'information basés sur la connaissance. Il était supposé que ces systèmes faciliteraient la gestion grâce à la possibilité de communiquer avec les utilisateurs en langage naturel. Ces systèmes étaient censés s'auto-apprendre, utiliser les connaissances accumulées en mémoire pour résoudre divers types de problèmes, fournir aux utilisateurs des conseils d'experts, et l'utilisateur n'était pas tenu d'être un spécialiste en informatique. On supposait qu’une personne serait capable d’utiliser un ordinateur de cinquième génération aussi facilement que n’importe quel appareil électroménager tel qu’un téléviseur, un magnétophone et un aspirateur. Peu après celui du Japon, des projets américains et européens démarrent.

L’émergence de tels systèmes pourrait faire évoluer la technologie grâce à l’utilisation de bases de connaissances et de systèmes experts. L'essence principale de la transition qualitative vers la cinquième génération d'ordinateurs a été le passage du traitement des données au traitement des connaissances. Les Japonais espéraient pouvoir non pas adapter la pensée humaine aux principes de fonctionnement d'un ordinateur, mais rapprocher le fonctionnement d'un ordinateur de la façon dont une personne pense, tout en s'éloignant de l'architecture informatique de von Neumann. En 1991, il était prévu de créer le premier prototype d'ordinateurs de cinquième génération.

Il est désormais clair que les objectifs fixés n'ont jamais été pleinement atteints, mais ce projet a donné une impulsion au développement d'un nouveau cycle de recherche dans le domaine de l'intelligence artificielle et a provoqué une explosion d'intérêt pour la programmation logique. L'architecture traditionnelle de von Neumann n'étant pas adaptée à une mise en œuvre efficace, des ordinateurs de programmation logique spécialisés PSI et PIM ont été créés.

La méthodologie suivante a été choisie comme méthodologie principale de développement de logiciels pour le projet informatique de cinquième génération : programmation logique, dont un représentant éminent est le langage Prolog. Il semble qu'à l'heure actuelle, Prolog reste le langage d'intelligence artificielle le plus populaire au Japon et en Europe (aux États-Unis, traditionnellement, un autre langage d'intelligence artificielle est plus répandu - le langage de programmation fonctionnel Lisp).

Le nom du langage "Prolog" vient des mots PROGRAMMATION LOGIQUE(PROgrammation en LOGique en français et PROgramming in LOGic en anglais).

Prolog est basé sur une branche de la logique mathématique telle que calcul des prédicats. Plus précisément, sa base est la procédure de preuve des théorèmes méthode de résolution Pour Clauses de corne. La prochaine conférence sera consacrée à ce sujet.

Dans l'histoire de l'émergence et du développement du langage Prolog, on peut distinguer les étapes suivantes.

En 1965, dans l'article « Une logique orientée machine basée sur le principe de résolution », publié dans le 12e numéro du Journal of the ACM, J. Robinson a présenté une méthode pour trouver automatiquement des preuves de théorèmes dans le calcul des prédicats du premier ordre, appelée " principe de résolution". Cet ouvrage peut être lu en traduction : Robinson J. Logique orientée machine basée sur principe de la résolution// Collection cybernétique. - Vol. 7 (1970). En fait, l'idée de cette méthode a été proposée par Herbrand en 1931, alors qu'il n'existait pas encore d'ordinateurs (Herbrand, "Une méthode de démonstration", Celles, Paris, 1931). Robinson a modifié cette méthode pour qu'elle devienne adaptée à une utilisation automatique sur ordinateur et, en outre, a développé un algorithme d'unification efficace qui constitue la base de sa méthode.

En 1973, le « groupe d'intelligence artificielle » dirigé par Alain Colmeroe crée à l'Université de Marseille un programme destiné à prouver des théorèmes. Ce programme a été utilisé pour créer des systèmes de traitement de texte en langage naturel. Le programme de démonstration du théorème s'appelait Prolog (de Programmation en Logique). Il a servi de prototype pour Prologue. La légende raconte que l'auteur de ce nom était l'épouse d'Alan Colmeroe. Le programme a été écrit en Fortran et s'est déroulé plutôt lentement.

Les travaux de Robert Kowalski furent d'une grande importance pour le développement de la programmation logique. Prédis la logique Comment langage de programmation" (Kowalski R. Predicate Logic as Programming Language. Congrès IFIP, 1974), dans lequel il a montré que pour atteindre l'efficacité, il faut se limiter à l'utilisation d'un ensemble Clauses de corne. À propos, on sait que Kowalski et Colmeroe ont travaillé ensemble pendant un été.

En 1976, Kowalski, avec son collègue Maarten van Emden, a proposé deux approches pour lire les textes des programmes logiques : procédurale et déclarative. Ces approches seront discutées dans le troisième cours.

En 1977 à Édimbourg, Warren et Pereira ont créé un compilateur Prolog très efficace pour l'ordinateur DEC-10, qui a servi de prototype à de nombreuses implémentations ultérieures de Prolog. De façon intéressante,

Fonctionnel;

De procédure;

Orienté objet ;

Déclaratif (relationnel).

Programme écrit en Langage fonctionnel, exprime un algorithme pour résoudre un problème en termes de valeurs renvoyées par les fonctions. Ainsi, un programme représente un ensemble de fonctions dont chacune ne renvoie qu’une seule valeur d’un certain type. Le travail du programme (l'algorithme pour résoudre le problème) est un appel séquentiel de fonctions. Les langages fonctionnels incluent C.

Programme écrit en langage procédural, exprime un algorithme pour résoudre un problème en termes d'actions (procédures) qui doivent être effectuées. La différence entre une procédure et une fonction est qu'une procédure peut renvoyer n'importe quel nombre de valeurs, y compris aucune. Ainsi, le fonctionnement du programme est un appel séquentiel de procédures. Les langages procéduraux incluent Pascal, Basic, etc. Il convient de noter que dans n'importe quel langage procédural, il est possible de définir et d'utiliser des fonctions, et dans un langage fonctionnel - des procédures (fonctions qui ne renvoient pas de valeurs - généralement définies avec le modificateur void).

Programme écrit en langage orienté objet, est un ensemble d'objets qui interagissent les uns avec les autres en envoyant des messages. Chaque objet est caractérisé par une composante informationnelle (un ensemble d'attributs) et une composante comportementale (un ensemble d'événements et de méthodes). Le travail du programme est un échange séquentiel de messages (méthodes d'appel) entre objets. Les langages orientés objet incluent Object Pascal, Visual Basic, C++, Java, etc. Il convient de noter que tout langage orienté objet a la possibilité d'une programmation procédurale.

Ce qui est commun à toutes les catégories de langues répertoriées, c'est que le programme décrit ce qui doit être fait et comment résoudre le problème, c'est-à-dire la séquence de résolution du problème est décrite.

Programme écrit en langage déclaratif, est une description du domaine à travers un ensemble de relations (relation anglaise) entre des objets (entités) et la formulation de l'objectif (tâche) qui doit être résolu. Contrairement aux langages listés ci-dessus, un tel programme ne décrit pas explicitement la séquence d'actions nécessaires pour résoudre un problème. En règle générale, la procédure de recherche d'une solution est effectuée automatiquement à l'aide de l'appareil mathématique ou logique approprié sous-jacent au langage et implémenté dans son interpréteur spécifique 1 (compilateur 2). Les langages déclaratifs incluent Prolog, SQL, etc. Ainsi, l’avantage incontestable des langages déclaratifs est la concentration de l’attention du développeur sur ce qui doit être fait, et non sur comment.

Une autre classification des langages de programmation est basée sur style de programmation :

- impératif– un programme est une séquence d'instructions (commandes exécutées par un ordinateur), à l'aide desquelles le programmeur doit expliquer à l'ordinateur comment résoudre un problème(langages de programmation fonctionnels, procéduraux et orientés objet) ;

- déclaratif– un programme est un ensemble d'énoncés décrivant un domaine ou une situation actuelle, à l'aide desquels le programmeur doit décrire, ce qui doit être résolu (trouver)– le système de programmation impératif cherchera une solution.

Il existe une classification bien connue des langages de programmation selon leur proximité avec le langage machine ou humain naturel. Ceux qui sont plus proches de l'ordinateur sont appelés langages de bas niveau (Assembleur), et ceux qui sont plus proches de l'humain sont appelés langages de haut niveau (Basic, Pascal, Java, etc.). En ce sens, les langages déclaratifs peuvent être appelés langages de très haut niveau ou de plus haut niveau, car ils sont très proches du langage humain et de la pensée humaine.

En 1965, dans « Une logique orientée machine basée sur le principe de résolution » 3 publié dans le 12e numéro du Journal of the ACM, J. Robinson présente une méthode de recherche automatique de preuves de théorèmes dans le calcul des prédicats du premier ordre, appelée "principe de résolution". En fait, l'idée de cette méthode a été proposée par Herbrand en 1931, alors qu'il n'existait pas encore d'ordinateurs (Herbrand, « Une méthode de démonstration », Celles, Paris, 1931). Robinson a modifié cette méthode pour qu'elle devienne adaptée à une utilisation automatique (informatique) et a développé un algorithme d'unification efficace qui constitue la base de sa méthode.

L'idée d'utiliser la logique comme langage de programmation est née au début des années 1970. Les premiers chercheurs à développer cette idée furent Robert Kowalski d'Édimbourg (base théorique, articles 1971 et 1974), Maarten van Emden d'Édimbourg (système de démonstration expérimentale) et Alain Colmeroe Colmerauer) de Marseille (réalisation, 1973). En 1973, un « groupe d'intelligence artificielle » dirigé par Alain Colmeroe crée à l'Université de Marseille un programme destiné à prouver des théorèmes. Ce programme a été utilisé pour créer des systèmes de traitement de texte en langage naturel. Le programme de démonstration du théorème s'appelait Prolog (Français PROgrammation en LOGique) et a servi de prototype de Prolog. Il existe des légendes selon lesquelles l'auteur de ce nom était l'épouse d'Alain Colmeroe. Le programme a été écrit en Fortran et s'est déroulé plutôt lentement.

La vulgarisation de Prolog a été grandement facilitée par :

Une implémentation efficace (interprète/compilateur) de ce langage pour l'ordinateur DEC-10 par David D.H. Warren d'Édimbourg en 1977 a servi de prototype à de nombreuses implémentations ultérieures de Prolog. Fait intéressant, le compilateur a été écrit dans Prolog lui-même. Cette implémentation de Prolog, connue sous le nom de « version d'Édimbourg », est effectivement devenue le premier et le seul standard du langage ;

Développement d'une version pour ordinateurs personnels par Clark et McCabe (Grande-Bretagne) en 1980 ;

Projet japonais pour créer des ordinateurs de génération V. Fin 1978, le ministère du Commerce extérieur et de l'Industrie (MFTI) du Japon confie le développement d'un projet d'ordinateur intelligent à l'Institut de technologie informatique de Tokyo (ICOT) 4, spécialement créé à cet effet. Le cœur de ces ordinateurs n'était pas censé être un processeur arithmétique, mais un processeur spécialement optimisé pour travailler avec des programmes de type Prologue.

En 1995, la norme officielle ISO 5 /IEC 6 du langage Prolog a été publiée (ISO/IEC 13211-1 « Technologies de l'information - Langages de programmation - Prolog - Partie 1 : Noyau général » - « Technologies de l'information. Langages de programmation. Prolog . Partie 1. Noyau général").

Il existe aujourd'hui de nombreuses implémentations de Prolog. Les plus connus d'entre eux sont les suivants : BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, MProlog, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic iis Workbench, Strawberry Prolog, SWI-Prolog, Turbo Prolog (PDC Prolog, Visual Prolog), UNSW Prolog, etc. Dans notre pays, des versions de Prolog telles que Prolog-D (S. Grigoriev), Actor Prolog (A. Morozov) et Flang (A. Mantsivoda, V. Petukhin) ont été développées .

5. Définir les concepts : "", "", "".

9. Qu'entend-on par « » et « » de la liste ?

L’apparition de Prologue est due au développement de la logique, des mathématiques et de la programmation. Ce dernier a joué le rôle le plus important. Les spécialistes de la logique et des mathématiques ont tenté de mettre la programmation sur la « bonne voie », mais le développement des technologies de l'information a donné un résultat complètement différent.

La programmation pragmatique impérative s’est révélée plus prometteuse. « Prolog » a réussi en tant que langage de programmation, mais n'est pas devenu la base de l'intelligence artificielle.

Programmation classique vs logique

Une personne prend des décisions difficiles de manière logique et raisonnable. Presque sans réfléchir, une personne agit avec sagesse. Si nous ne prenons pas en compte les décisions qui nécessitent la collecte d'informations, leur analyse et des calculs complexes, alors tout résultat est rapide, précis et raisonnable.

Ce fait a toujours donné une raison illusoire de considérer la création d’un outil d’aide à la décision comme une affaire simple. Avec l’avènement de Prologue, il semblait que la question de l’intelligence artificielle était une question de technologie, et Homo sapiens a proposé trois lois de la robotique. Cependant, l'intelligence artificielle est restée un fantôme et les trois lois de la robotique se sont avérées provenir d'un conte de fées - "fais ça, je ne sais pas quoi".

La programmation au sens classique du terme (les termes « procédural », « impératif » ou « fonctionnel » sont souvent utilisés) s'est développée et a surmonté avec succès les « temps troubles » des années 80-90, où il existait d'innombrables langages de programmation.

La lutte de démonstration entre « Pascal » et « Si » a duré longtemps et a été brutale, mais elle s'est terminée de manière neutre et tranquille. Ce qui reste, c'est l'idée d'un bon langage de programmation et plusieurs implémentations réussies de celui-ci.

Cela ne veut pas dire que Prolog en tant que langage de programmation n’a pas évolué. Mais il n’a pas atteint ses objectifs déclarés. Aujourd’hui on peut non seulement dire, mais aussi justifier : « Prologue » est un langage académique pour :

  • Objectifs d'apprentissage;
  • prédis la logique;
  • mathématiques;
  • application étroite.

Il est douteux que cette affirmation puisse être réfutée. L’intelligence artificielle est non seulement largement utilisée, mais aussi un événement très grave qui change radicalement la structure sociale et l’image du monde.

La programmation dans le langage Prolog pour l'intelligence artificielle n'a pas eu lieu : depuis plus de quarante ans d'histoire du langage, il n'y a pas eu un seul événement radicalement nouveau qui soit pertinent pour la conscience publique, indiquant le contraire.

La réalité objective est la suivante : ce n’est pas tant le plus fort qui survit, mais plutôt ce qui est demandé et pertinent.

"Prolog" est un langage de programmation déclaratif

Avoir un outil pour décrire des faits et des règles, c’est bien, mais à quoi ça sert ? Les faits et les règles s'intègrent parfaitement dans une base de données classique. Un programmeur classique qualifié propose un dialogue interactif à l'utilisateur et ce dernier résout ses problèmes.

Si nécessaire, le programmeur affine le dialogue, et l'utilisateur complète la base de données de faits et de règles. Une option absolument efficace et testée depuis des décennies pour mettre en œuvre une masse de problèmes déjà résolus et résolubles.

Une présentation déclarative de faits et de règles dans toute implémentation du langage de programmation Prolog est une convention, une tentative de formaliser la réalité dans son état intellectuel. La programmation conventionnelle ne touche pas l’intellect. La programmation classique se contente du poste : description et traitement des données. Il y a beaucoup de problèmes ici, mais il existe de nombreuses solutions brillantes qui fonctionnent.

"Prolog" en tant que langage de programmation, ce sont les faits :

  • mère (Maria, Natasha); - Maria - la mère de Natasha ;
  • papa (Evgeny, Marina); - Evgeniy est le père de Marina.

Ici, un fait saute aux yeux : « Maria » et « Marina » sont des noms différents. Rien ne vous empêche d'ajouter le fait :

  • papa (Eugène, Maria); - Evgeniy est le père de Maria.

Ces descriptions donnent vie aux règles :

  • parent(x,y)<- папа (x, y);
  • parent(x,y)<- мама (x, y);

Mais ils ne nous permettent pas de conclure que papa est le père de Marina et que Marina est la mère de Maria. Ce problème peut être résolu : vous pouvez ajouter une règle supplémentaire, ajouter un fait supplémentaire. Mais combien de ces actions devraient être entreprises dans une situation réelle ?

En fait, « Prolog » en tant que langage de programmation est un exemple de déclaration de faits et de règles, mais pas de la logique à laquelle est habituée la conscience d'un programmeur classique. "Prolog" se positionne comme un langage de logique de prédicat, mais vous ne pouvez y apprendre la programmation qu'à travers des exemples et des exemples de descriptions des développeurs d'une implémentation spécifique du langage.

La famille Prologue

La France est considérée comme le berceau de Prologue, et 1973 est l'année de naissance. L'intérêt pour la langue se renouvelle périodiquement, mais s'apaise avec une stabilité enviable. La devise du langage : « La logique des prédicats est élémentaire ! C'est une façon d'expliquer comment fonctionne la pensée » - et c'est resté la devise.

Toute implémentation du langage de programmation Prolog suivait strictement la logique des prédicats, mais incluait toujours les idées classiques de programmation procédurale. Il est plus correct de dire « impératif », puisque ce terme est utilisé avec plus de formalité que procédural, fonctionnel, orienté objet ou autre.

Toute programmation concerne les données et leur traitement. Les constructions de langage doivent décrire le problème à résoudre aussi précisément que possible, c'est pourquoi toutes les implémentations connues de Prolog : Turbo Prolog, Win Prolog, SWI Prolog, GNU Prolog, Visual Prolog et autres contiennent, en plus des constructions déclaratives, des expressions impératives ordinaires.

On pense que la famille Prologue est développée dans des organisations universitaires et de recherche et ne peut donc être considérée que comme un langage commun dans un sens conceptuel. Néanmoins, on peut considérer le fait même que le concept de « Prolog » est vivant et en développement : ce langage a une portée, et il est demandé dans un certain nombre de tâches.

La base de l'intelligence artificielle

L'intérêt pour l'intelligence artificielle n'a jamais faibli, on commence à en parler dès que l'occasion se présente, mais Prolog n'a jamais été associé à l'intelligence artificielle plus qu'à un langage de programmation classique ordinaire.

À la fin des années 80, il y avait un projet intellectuel réel, pertinent et populaire « The Inventing Machine ». Il y a eu une réelle tentative d'utiliser Prolog pour formaliser une énorme base de connaissances pratiques (données) sur les inventions, les lois physiques, chimiques et autres.

Le résultat n'a pas été atteint : trop de faits et de règles ont dû être écrits dans Prolog comme langage de programmation, qui étaient de nature impérative banale. Entre-temps, de nombreux produits logiciels à succès ont été implémentés en parallèle dans des langages ordinaires.

Au début des années 90, un projet d'un véritable système intellectuel a été mis en œuvre avec succès, simulant le comportement d'un enfant de moins de 3 ans sur un ordinateur de l'UE ! L'option d'utiliser Prolog n'a même pas été envisagée.

Ce système intellectuel a non seulement « compris » ce qu'étaient maman et papa et en quoi Maria différait de Marina, mais aussi, sans trop d'effort, est passé indépendamment des connaissances acquises sur ces questions aux balles et à leurs différences par rapport aux cubes, aux couleurs de des objets et... (!) aux mathématiques élémentaires : des opérations arithmétiques simples se sont révélées être à sa portée sur la base des connaissances acquises en résolvant des problèmes complètement différents.

On ne peut pas dire que la programmation classique soit en avance sur Prolog en termes de maîtrise du territoire de l'intelligence artificielle, mais elle donne de vrais résultats.

Quant à l'intelligence en tant que tâche, apparemment la question ne réside pas ici dans le langage, mais dans l'idée de mise en œuvre. Si l’assembleur de 1991 pouvait « devenir la base » d’un système intelligent d’intelligence situationnelle, alors le problème ne réside clairement pas dans le langage de mise en œuvre, mais dans l’idée.

En Prolog, nous obtenons une solution à un problème par dérivation logique à partir de principes préalablement connus. En règle générale, un programme Prolog n'est pas une séquence d'actions - c'est un ensemble de faits avec des règles qui fournissent des conclusions basées sur ces faits. Par conséquent, Prolog est connu sous le nom de langage déclaratif.

Prolog inclut un mécanisme d'inférence basé sur la correspondance de modèles. En sélectionnant les réponses aux requêtes, il récupère les informations stockées (connues). Prolog tente de tester la véracité d'une hypothèse (en d'autres termes, de répondre à une question) en demandant des informations dont on sait déjà qu'elles sont vraies. Les connaissances Prolog sur le monde sont un ensemble limité de faits (et de règles) spécifiés dans le programme.

Une des caractéristiques les plus importantes de Prolog est qu'en plus de trouver logiquement des réponses aux questions que vous posez, il peut traiter des alternatives et trouver toutes les solutions possibles. Au lieu de simplement travailler du début à la fin d'un programme, Prolog peut revenir en arrière et examiner plus d'un « chemin » pour résoudre toutes les parties d'un problème.

La logique des prédicats a été développée pour traduire les principes de la pensée logique sous forme écrite aussi facilement que possible. Prolog profite de la syntaxe logique pour développer un langage de programmation. Dans la logique des prédicats, vous éliminez d’abord tous les mots non essentiels de vos phrases. Ensuite vous transformez ces phrases en mettant la relation en premier, suivie des objets regroupés. Par la suite, les objets deviennent des arguments entre lesquels s’établit cette relation. A titre d'exemple dans le tableau. des phrases sont présentées, transformées conformément à la syntaxe de la logique des prédicats.

Tableau 1. Syntaxe de la logique des prédicats

2. Faits

Dans Prolog, ils décrivent objets (objets) Et relation (rapports), puis décrit règles (règles) pour lequel ces relations sont vraies. Par exemple, une phrase

Bill adore les chiens. (Bill aime les chiens.)

établit la relation entre les objets Bill et les chiens (Bill et les chiens) ; cette relation est appréciée. Vous trouverez ci-dessous une règle qui détermine quand la phrase « Bill aime les chiens » est vraie :

Bill aime les chiens, à condition qu'ils soient bons. (Bill aime les chiens si les chiens sont gentils.)

En Prolog, une relation entre objets s'appelle fait(fait). En langage naturel, une relation s’établit dans une phrase. Dans la logique des prédicats utilisée par Prolog, une relation correspond à une simple phrase (fait) constituée du nom de la relation et d'un ou plusieurs objets mis entre parenthèses. J'aime la proposition le fait se termine par un point (.) .

Ci-dessous plusieurs phrases en langage naturel avec la relation « j’aime » :

Bill aime Cindy. (Bill aime Cindy)

Cindy aime Bill. (Cindy aime Bill)

Bill adore les chiens. (Bill aime les chiens)

Réécrivons maintenant ces mêmes faits en utilisant la syntaxe Prolog :

aime (bill, cindy).

aime (Cindy, Bill).

aime (bille, chiens).

Les faits, en plus des relations, peuvent aussi exprimer des propriétés. Ainsi, par exemple, les phrases en langage naturel « Kermitisgreen » et « Caitlinisgirl » dans Prolog, exprimant les mêmes propriétés, ressemblent à ceci :

3. Prédicats

Une relation en Prolog s'appelle prédicat. Arguments- ce sont des objets qui sont liés par cette relation ; En fait

aime (bill, cindy).

la relation likes est le prédicat, et les objets bill et cindy sont les arguments.

Exemples de prédicats avec différents nombres d'arguments :

pred(entier, symbole)

personne (nom, prénom, sexe)

anniversaire (prénom, nom, date)

L'exemple montre que les prédicats ne peuvent avoir aucun argument.

4. Règles

Les règles vous permettent de déduire un fait à partir d’autres faits. En d'autres termes, nous pouvons dire que règle - c'est une conclusion dont on sait qu'elle est vraie si une ou plusieurs autres conclusions ou faits trouvés sont vrais. Ci-dessous se trouvent les règles correspondant à la connexion « j’aime » :

Cindy aime tout ce que Bill aime. (Cindy aime tout ce que Bill aime)

Caitlin aime tout ce qui est vert. (Caitlin aime tout ce qui est vert)

En utilisant ces règles, vous pouvez, à partir des faits précédents, trouver certaines choses que Cindy et Caitlin aiment :

Cindy aime Cindy. (Cindy aime Cindy)

Caitlin aime Kermit. (Caitlin aime Kermit)

Pour traduire ces règles en Prolog, vous devez modifier légèrement la syntaxe :

aime(cindy, quelque chose) :- aime(bill, quelque chose). j'aime (caitlin, quelque chose): - vert (quelque chose) .

Le symbole : - a la signification de « si », et sert à séparer les deux parties de la règle : la tête et le corps. Une règle peut également être considérée comme une procédure. Autrement dit, les règles

aime(cindy, quelque chose) :- aime(bill, quelque chose).

aime(caitlin, Quelque chose) :- vert (Quelque chose).

signifier: "Pour prouver que Cindy aime quelque chose, prouve que Bill l'aime" Et " Pour prouver que Caitlin aime quelque chose, prouvez que c'est quelque chose de vert.". De ce point de vue « procédural », les règles peuvent « demander » à Prolog de faire autre chose que de prouver des faits, comme imprimer quelque chose.

5. Demandes (objectifs)

Après avoir décrit plusieurs faits dans Prolog, vous pouvez poser des questions sur les relations entre eux. On l'appelle demande(requête) Systèmes de langage Prolog. Vous pouvez poser à Prolog les mêmes questions que nous pourrions vous poser sur ces relations. Sur la base de faits et de règles préalablement connus, vous pouvez répondre à des questions sur ces relations, tout comme Prolog peut le faire. En langage naturel, nous demandons : Fait Facture comme Cindy ? (Est-ce que Bill aime Cindy ?) Selon les règles de Prolog, nous demandons :

aime (bill, cindy).

Dès réception d'une telle demande, Prolog répondra :

parce que Prolog a un fait pour prouver qu'il en est ainsi. Pour compliquer un peu la question, vous pouvez demander en langage naturel : Quoi fait Facture comme ? (Qu'est-ce que Bill aime ?) Selon les règles de Prolog, nous demandons :

aime(facture, Quoi).

Il convient de noter que le deuxième objet - Quoi - commence par une majuscule, alors que le premier objet - facture - ne le fait pas. Cela se produit parce que la facture est un objet fixe, un objet constant est une quantité connue et Qu'est-ce qu'une variable.

Variables commencez toujours par une majuscule ou un trait de soulignement !

Prolog cherche toujours une réponse à une requête, en commençant par le premier fait, et parcourt tous les faits jusqu'à ce qu'il n'y en ait plus.. Lorsqu'on lui demande ce que Bill aime, Prolog répondra :

Alors, comme il le sait

aime (bill, cindy).

aime (bille, chiens) .

Si nous demandions :

Qu’est-ce que Cindy aime ? (Qu'est-ce que Cindy aime ?)

aime(cindy, Quoi).

alors Prolog répondrait :

parce que Prologue sait que Cindy aime Bill, et que Cindy aime les mêmes choses que Bill aime, et que Bill aime Cindy et les chiens.

On pourrait poser à Prolog d'autres questions qui pourraient être posées à un humain. Mais des questions comme « Quel genre de fille Bill aime-t-il ? » n'obtiendra pas de solution, car Prolog dans ce cas ne connaît pas les faits sur la fille, et il ne peut pas tirer de conclusion basée sur des données inconnues : dans cet exemple, nous n'avons donné à Prolog aucune relation ou propriété pour déterminer si des -objets par les filles.

6. Publication de faits, de règles et de requêtes

Supposons qu'il existe les faits et règles suivants :

Une voiture rapide, c'est bien. (Afastcarisfun).

Une grosse voiture, c'est beau. (Une grosse voiture, c'est bien).

Une petite voiture - pratique. (Une petite voiture est pratique).

Bill aime une voiture si elle est belle. (Bill aime une voiture si la voiture est amusante).

En examinant ces faits, vous pouvez conclure que Bill aime les voitures rapides. Dans la plupart des cas, Prolog proposera une solution similaire. S'il n'y avait aucun fait sur les voitures rapides, vous ne seriez pas en mesure de déduire logiquement quelles voitures Bill aime. Vous pouvez deviner quel type de machines pourrait être difficile, mais Prolog ne sait que ce que vous lui dites. Prologue ne fait aucune hypothèse.

Voici un exemple montrant comment Prolog utilise des règles pour répondre aux requêtes. Regardez les faits et les règles dans cette partie du programme ch02e01.pro :

aime (Ellen, tennis).

aime (John, le football).

aime (déchiré, baseball).

aime (eric, natation).

aime (marque, tennis).

aime (facture, activité) :- aime (déchiré, activité).

La dernière ligne du programme est la règle. Cette règle correspond à une phrase en langage naturel :

Bill aime l'activité si Tom aime l'activité. (Bill aime une activité si Tom aime cette activité)

Dans cette règle, la tête est aimée (bille, Activité) et le corps est aimé (déchiré, Activité). Notez que dans cet exemple, il n'y a aucun fait sur l'amour de Bill pour le baseball. Pour savoir si Bill aime le baseball, vous pouvez demander à Prolog comme ceci :

aime (bill, baseball).

En essayant de trouver une solution à cette requête, Prolog utilisera la règle :

Chargez le programme ch02e01.pro dans l'environnement de développement visuel VisualProlog et exécutez-le avec l'utilitaire TestGoal .

j'aime (symbole, symbole)

aime (Ellen, tennis).

aime (John, football).

aime (déchiré, baseball).

aime (eric, natation).

aime (marque, tennis).

likes(facture,Activité) :-likes(déchiré, Activité).

aime (bill, baseball).

L'utilitaire TestGoal répondra dans la fenêtre de l'application :

Le système a utilisé une règle combinée

aime(facture, activité) :- aime(déchiré, activité).

aime(déchiré, baseball). pour résoudre ça aime (bill, baseball).

Essayez également la requête suivante dans la section GOAL :

aime (bille, tennis).

L'utilitaire Test Goal répondra :

parce que le:

· il n'y a aucun fait qui indique que Bill aime le tennis ;

· L'attitude de Bill envers le tennis ne peut pas être logiquement déduite en utilisant cette règle et les faits disponibles.



Avez-vous aimé l'article? Partagez-le