Termes du premier ordre

Documents pareils
Résolution d équations non linéaires

Logique : ENSIIE 1A - contrôle final

Chapitre 2. Eléments pour comprendre un énoncé

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Initiation à la Programmation en Logique avec SISCtus Prolog

MIS 102 Initiation à l Informatique

Continuité d une fonction de plusieurs variables

Tâche complexe produite par l académie de Clermont-Ferrand. Mai 2012 LE TIR A L ARC. (d après une idée du collège des Portes du Midi de Maurs)

Introduction à l étude des Corps Finis

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Cryptographie et fonctions à sens unique

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

Chapitre 1 Qu est-ce qu une expression régulière?

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Calculabilité Cours 3 : Problèmes non-calculables.

Programmation linéaire

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Feuille TD n 1 Exercices d algorithmique éléments de correction

Équations non linéaires

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Initiation à l algorithmique

Logique. Plan du chapitre

Quelques tests de primalité

Utilisation des tableaux sémantiques dans les logiques de description

Université Paris-Dauphine DUMI2E 1ère année, Applications

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Leçon N 4 : Statistiques à deux variables

Cours de Probabilités et de Statistique

STAGE IREM 0- Premiers pas en Python

Exercices - Polynômes : corrigé. Opérations sur les polynômes

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Cours 1 : Qu est-ce que la programmation?

Les indices à surplus constant

Suites numériques 3. 1 Convergence et limite d une suite

Machines virtuelles Cours 1 : Introduction

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

CCP PSI Mathématiques 1 : un corrigé

Algorithme. Table des matières

CHAPITRE V SYSTEMES DIFFERENTIELS LINEAIRES A COEFFICIENTS CONSTANTS DU PREMIER ORDRE. EQUATIONS DIFFERENTIELLES.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Loi binomiale Lois normales

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

OM 1 Outils mathématiques : fonction de plusieurs variables

LES TYPES DE DONNÉES DU LANGAGE PASCAL

CH.6 Propriétés des langages non contextuels

Image d un intervalle par une fonction continue

ÉVALUATION FORMATIVE. On considère le circuit électrique RC représenté ci-dessous où R et C sont des constantes strictement positives.

Théorème du point fixe - Théorème de l inversion locale

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Conception des bases de données : Modèle Entité-Association

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

La fonction exponentielle

Continuité en un point

Informatique Générale

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES

En face du commanditaire, on met un chef de projet qui connait le domaine (banque, administration, etc.)

3 Approximation de solutions d équations

CHAPITRE IV. L axiome du choix

Algorithmique et Programmation, IMA

TD1 Signaux, énergie et puissance, signaux aléatoires

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

Techniques d interaction dans la visualisation de l information Séminaire DIVA

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Python - introduction à la programmation et calcul scientifique

eduscol Ressources pour la voie professionnelle Français Ressources pour les classes préparatoires au baccalauréat professionnel

V- Manipulations de nombres en binaire

Compter à Babylone. L écriture des nombres

Introduction à MATLAB R

Projet Active Object

Organigramme / Algorigramme Dossier élève 1 SI

NOM : Prénom : Date de naissance : Ecole : CM2 Palier 2

Objets Combinatoires élementaires

Par combien de zéros se termine N!?

Calculs de probabilités conditionelles

Problèmes de Mathématiques Filtres et ultrafiltres

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Proposition. Si G est un groupe simple d ordre 60 alors G est isomorphe à A 5.

Chapitre 6. Fonction réelle d une variable réelle

L informatique en BCPST

TP : Gestion d une image au format PGM

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

CONTRAT DE LICENCE D UTILISATION DU LOGICIEL MORPH M SOUS LA FORME MORPH M PYTHON

Chapitre 1 : Évolution COURS

Programmation C. Apprendre à développer des programmes simples dans le langage C

Transcription:

Chapitre 6 Termes du premier ordre Les termes du premier ordre forment une façon générale de représenter de nombreuses données manipulées en logique ou en programmation. On s en sert pour représenter des expressions logiques, des expressions de type, ou des données structurées manipulées par des programmes. On y pense en permanence lorsqu on écrit des expressions ou des programmes de façon linéaire en mathématiques ou dans des programmes informatiques. On peut les voir et les dessiner comme des arbres afin de mieux visualiser leur structure. Ces termes sont construits à partir de symboles et de noms de variables. Un terme avec variables peut être vu comme représentant une infinité de termes, et c est sur ces termes avec variables que prennent tout leur sens les notions de filtrage et d unification. Ces termes sont dits du premier ordre car ils sont dénués de lieur 1, c est-à-dire de constructions introduisant des noms de variables dans une certaine portée : ce qu on appelle des variables muettes en mathématiques, ou des variables liées en informatique. 6.1 Termes Soit un ensemble Σ de symboles. On suppose qu à chaque symbole est associé un entier appelé arité. On appelle généralement signature un tel ensemble et symboles de fonction les symboles de Σ. Si on connaît les langages fonctionnels de la famille ML ou Haskell, les symboles de fonctions peuvent être vus comme des constructeurs de données. Pour cette raison, nous les noterons ici par des noms qui commencent par une lettre majuscule, comme F ou Zero. Exemple Σ 1 = {(Zero, 0), (Succ, 1), (Plus, 2)} Σ 2 = {(A, 0), (F, 1), (G, 3)} 6.1.1 Termes Définition (Termes) Étant donné un tel ensemble de symboles, on peut définir l ensemble T Σ des termes sur Σ, que l on appelle Σ-termes, ou simplement termes lorsque Σ est implicite, par : tout symbole de Σ d arité 0 est un Σ-terme si t 1,..., t n sont des Σ-termes et si F Σ est un symbole d arité n, alors F(t 1,..., t n ) est un Σ-terme. 1. Par exemple, le symbole de quantification universelle introduit généralement une ou plusieurs variables dont la portée est son champ de validité dans l expression. Hors de ce champ, c est-à-dire hors de la portée du quantificateur, cette variable n est plus valide. 77

6.2. Substitutions Exemples Plus(Succ(Zero), Zero) T Σ1 F(G(A, F(A), A)) T Σ2 Succ(F(A)) T Σ1 Σ 2 Zero(Succ) n est pas un terme valide On représente souvent graphiquement de tels termes : Plus F Succ Zero G Zero A F A A Les termes de T Σ ne contiennent que des symboles, mais pas de variable. On dit qu ils sont clos. Si on dispose, en plus de Σ, d un ensemble V de noms de variables (qu on choisit généralement infini dénombrable), on peut construire des termes sur Σ V de la même manière que précédemment : Définition (Termes avec variables) toute variable de V est un Σ V-terme tout symbole de Σ d arité 0 est un Σ V-terme si t 1,..., t n sont des Σ V-termes et si F Σ est un symbole d arité n, alors F(t 1,..., t n ) est un Σ V-terme. On note var(t) l ensemble des variables apparaissant dans le terme t. Dans la suite, on laissera généralement implicite l ensemble de variables V. 6.2 Substitutions Une substitution est une fonction totale de l ensemble des variables V vers un ensemble de termes T. On appelle domaine d une substitution θ, et on le note dom(θ), l ensemble des variables x telles que θ(x) x. On ne considèrera dans la suite que des substitutions dont le domaine est fini. On notera quelquefois [x 1 t 1 ;... ; x n t n ] la substitution de domaine {x 1,..., x n } qui associe le terme t i à la variable x i, pour i = 1,... n. On note [ ] ou la substitution dont le domaine est vide. On appelle renommage une substitution bijective θ dont le codomaine (c est-à-dire l ensemble {θ(x) pour x dom(θ)}) ne contient que des variables. On étend naturellement une substitution θ en un morphisme de termes θ : θ(f(t 1,..., t n )) = F(θ(t 1 ),..., θ(t n )) θ(x) = θ(x) Par abus de langage, on confondra dans la suite une substitution θ et le morphisme qui lui est associé θ. On définit la composition θ 1 θ 2 de deux substitutions θ 1 et θ 2 comme la substitution qui associe à toute variable x le terme θ 1 (θ 2 (x)). On définit l extension d une substitution θ par une autre substitution dont le domaine est un singleton de la façon suivante : 78

6.3. Le filtrage Définition (Extension) L extension de la substitution θ par [x t] la substitution θ notée θ [x t] définie par : dom(θ ) = dom(θ) {x} θ (x) = t θ (y) = θ(y) pour y x On remarquera que si θ(x) est définie (et x), alors l extension de θ par [x t] masquera l action de θ sur x. Les substitutions induisent un pré-ordre sur les termes (c est-à-dire une relation binaire réflexive et transitive). Définition (Plus ou moins général) On dira que t 1 est moins général que t 2, et on notera t 1 t 2 si il existe une substitution θ telle que t 1 = θ(t 2 ). On dira quelquefois dans ce cas que t 1 est une instance de t 2. 6.3 Le filtrage Le problème dit du filtrage, c est de trouver une réponse à la question suivante : Étant donnés deux termes t et m, a-t-on t m? que l on peut aussi formuler comme : Le terme t est-il une instance du terme m? Ce problème apparaît bien plus souvent qu on ne le croit. Bien sûr, on le retrouve presque directement sous cette forme dans l opération de filtrage des langages comme OCaml ou Haskell, où on teste si le résultat d une évaluation est une instance d un motif. On l utilise presque tout aussi directement lorsqu on résoud des problèmes mathématiques et qu on cherche à transposer un théorème général dans un contexte particulier : on se demande alors «ce contexte est-il une instance des hypothèses du théorème?». En fait, ce problème du filtrage est à la base même de bon nombre de raisonnements que nous effectuons quotidiennement, dans lesquels on cherche à construire un exemple particulier de règle générale. Pour revenir à nos termes formels, résoudre un problème de filtrage, c est calculer une substitution qui permet de passer d un terme ou motif possédant généralement mais pas nécessairement des variables, à une instance de ce terme. En voici quelques exemples : terme motif substitution Succ(Succ(Zero)) Succ(x) θ = [x Succ(Zero)] Succ(Succ(y)) Succ(x) θ = [x Succ(y)] Succ(Succ(x)) Succ(x) θ = [x Succ(x)] G(F(A), F(A), F(A)) G(x, x, x) θ = [x F(A)] Succ(x) Succ(Succ(y)) G(F(A), A, F(A)) G(x, x, x) Algorithme de filtrage Nous appelons filtre l algorithme de filtrage. Au lieu de le définir sur une paire de termes, nous le définissons sur une liste de paire de termes. En effet, lorsqu on cherche à filtrer un terme t par un autre terme m (le motif ), on est amené à décomposer en parallèle ces deux termes, pour se ramener à deux sous-problèmes de taille inférieure. On traitera donc une liste de problèmes de filtrage : le premier élément de cette liste sera le problème courant, les autres sont les problèmes en attente. Nous utilisons une syntaxe OCaml pour de telles listes. Le problème initial s écrit filtre [(m, t)] et se lit «le motif m filtre-t-il le terme t», ou bien «le terme t est-il une instance de m?». 79

6.4. Unification 1 filtre [(m, t)] est défini par 2 filtre : (terme terme) list substitution substitution (ou échec) 3 filtre [ ] θ = θ 4 filtre [(x, t 1 ); (m 2, t 2 );...; (m n, t n )] θ = 5 si x dom(θ) alors 6 filtre [(m 2, t 2 );...; (m n, t n )] (θ [x t 1 ]) sinon 7 si θ(x) = t 1 alors filtre [(m 2, t 2 );...; (m n, t n )] θ 8 sinon échec 9 filtre [(S(q 1,..., q k ), T(u 1,..., u l )); (m 2, t 2 );...; (m n, t n )] θ = 10 si S = T alors filtre [(q 1, u 1 );...; (q k, u k ); (m 2, t 2 );...; (m n, t n )] θ 11 sinon échec 12 filtre n importe quoi d autre = échec Figure 6.1 L algorithme de filtrage de t par m L algorithme filtre, donné à la figure 6.1, reçoit un argument supplémentaire, une substitution, qui vaut initialement, et qui sert d accumulateur. Cet argument est produit en résultat de l algorithme en cas de réussite du filtrage. Notons que dans le cas où les deux symboles S et T sont égaux (ligne 10), on sait qu ils ont même arité et donc que k = l, car on ne considère que des termes bien formés. Remarquons aussi que la restriction de la solution du problème de filtrage de deux termes t et m à l ensemble des variables apparaissant dans t est unique. L algorithme ci-dessus calcule précisément cette restriction, commune à toutes les solutions. Enfin, on peut remarquer aussi lorsque le motif ne contient aucune variable, l algorithme de filtrage devient un test d égalité entre deux termes. On peut, à juste titre, se poser la question de savoir ce qui se passe lorsque les termes m et t partagent des variables. Dans ce cas, on peut être amené à utiliser une substitution θ qui à une telle variable partagée x associe x elle-même. La définition du domaine d une substitution nous indique que x dom(θ), puisque θ(x) = x, et notre algorithme est incorrect dans ce cas. Pour s on convaincre, il suffit de calculer : filtre [(Plus(x, x), Plus(x, 0))] ce, en toute rigueur, nous dit que la substitution [x 0] change Plus(x, x) en Plus(x, 0), ce qui est clairement faux. Il y a deux solutions possibles à ce problème : reformuler le problème de filtrage en disant qu il n est bien posé que s il concerne deux termes n ayant aucune variable en commun ; ou alors reformuler l algorithme en définissant le paramètre auxiliaire θ non pas comme une substitution, mais comme une liste de couples (variable, terme), et remplacer le test de la ligne 5 par un test qui calcule s il existe ou non un couple dans cette liste dont la première composante est la variable x. 6.4 Unification Le problème de l unification consiste, quant à lui, à comprendre si deux termes ont des instances communes. On voit aisément que cela peut être : quelquefois impossible (prendre par exemple deux constantes 2 A et B), d autres fois aussi facile que le filtrage (prendre par exemple Succ(x) et Succ(Zero)), et d autres fois encore un peu plus difficile (prendre par exemple Plus(x, Succ(Zero)) et Plus(Succ(y), z)). On peut aussi voir ce problème d unification comme la résolution d une équation t = u entre termes. 2. C est-à-dire deux symboles d arité 0. 80

6.4. Unification Le problème de l unification se formule donc ainsi, étant donnés deux termes t et u : existe-t-il une substitution µ telle que µ(t) = µ(u)? On appelle une telle substitution µ un unificateur de t et u. Si deux termes admettent un unificateur, on dit qu ils sont unifiables. Notons que si µ est un unificateur de t et u, alors pour toute substitution θ, θ µ en est aussi un. Termes à unifier résultat Succ(Succ(x)) et Succ(Succ(x)) Plus(Zero, Zero) et Plus(x, Zero) [x Zero] Plus(Zero, x) et Plus(x, Zero) [x Zero] Plus(Succ(y), x) et Plus(Succ(Succ(x)), Succ(Zero)) [y Succ(Succ(Zero)); x Succ(Zero)] Succ(Zero) et Succ(Succ(Zero)) Succ(x) et Succ(Succ(x)) Le dernier exemple représente en fait une tentative de résolution d équation récursive. On pourrait admettre qu une solution possible est la substitution qui à x associe le terme infini solution de l équation y = Succ(y). En ce qui nous concerne, ce dernier terme n entre pas dans la définition que nous avons donnée des termes, qui ne contenait que des termes finis. L algorithme qui va calculer un unificateur de deux termes t et u devra lui aussi comparer les symboles de tête des deux termes, et, s il s agit du même symbole, traiter récursivement les unifications des sous-termes respectifs de t et de u. L algorithme de vérification recevra donc, tout comme celui du filtrage, une liste de paires de termes à unifier, ainsi qu une substitution utilisée comme accumulateur, puis produite en résultat si l unification réussit. Avant de donner l algorithme complet, examinons-en ses grandes étapes : soit à unifier [(t 1, u 1 ),..., (t n, u n )] : on cherche µ telle que i = 1..n, µ(t i ) = µ(u i ) si t 1 est unifiable avec u 1, produisant µ 1, on continue l unification de [(µ 1 (t 2 ), µ 1 (u 2 )),..., (µ 1 (t n ), µ 1 (u n ))] si cela réussit et produit µ, alors µ µ 1 unifie [(t 1, u 1 ),..., (t n, u n )]. 1 unifier [(t, u)] est défini par 2 unifier : (term term) list substitution substitution (ou échec) 3 unifier [ ] µ = µ 4 unifier [(x, u 1 ); (t 2, u 2 );...; (t n, u n )] µ = 5 si x = u 1 alors unifier [(t 2, u 2 );...; (t n, u n )] µ sinon 6 si x apparaît dans u 1 alors échec sinon 7 soit µ 1 = [x u 1 ] 8 unifier (µ 1 (t 2 ), µ 1 (u 2 ));...; (µ 1 (t n ), µ 1 (u n ))] (µ 1 µ) 9 unifier [(t 1, x);...; (t n, u n )] µ = unifier [(x, t 1 );...; (t n, u n )] µ 10 unifier [(S(a 1,..., a k ), T(b 1,..., b l )); (t 2, u 2 );...; (t n, u n )] µ = 11 si S = T alors unifier [(a 1, b 1 );...; (a k, b k ); (t 2, u 2 );...; (t n, u n )] µ 12 sinon échec Figure 6.2 L algorithme d unification de t et u L algorithme d unification de t et de u est donné à la figure 6.2. Il utilise lui aussi une substitution auxiliaire θ qui sera produite en résultat si l unification réussit. Comme dans le cas du filtrage, on a k = l quand S = T dans le dernier cas de la fonction d unification. Le résultat de l algorithme d unification est un unificateur de t et de u. Comme nous l avons déjà remarqué, l unificateur µ de deux termes donnés n est pas unique, puisque pour toute substitution θ, θ µ est aussi un unificateur de ces deux termes. Il se trouve qu il existe un unificateur que nous noterons 81

6.4. Unification µ qui est «meilleur» que tous les autres, au sens où tous les autres se déduisent de µ par compositions : si θ unifie t et u, alors il existe σ telle que θ = σ µ. La substitution µ est appelé l unificateur le plus général de t et u. Cet unificateur est appelé l unificateur le plus général (most general unifier, en anglais), et il est unique à un renommage près. C est cet unificateur le plus général que calcule l algorithme ci-dessus. Pour deux termes donnés t et u, on le note quelquefois mgu(t, u). L algorithme ci-dessus a été inventé par Alan Robinson en 1965. 82