Programmation déclarative

Sommaire du document

Nous sommes plus habitués à la programmation impérative (comme le langage C, ou le langage Java), mais Prolog [PROgrammation LOGique], que nous allons voir dans les pages qui suivent, est un langage de programmation logique qui appartient à la programmation déclarative, et non à la programmation impérative.

La programmation déclarative contient non seulement la programmation logique, mais aussi la programmation descriptive (balises, comme HTML, ou XML), la programmation fonctionnelle (fonctions mathématiques, comme LISP, ou Caml), ou encore la programmation par contraintes.

Nous avons l'habitude de programmer le comment (quelles sont les opérations à réaliser, comment effectuer les traitements), mais en programmation déclarative nous allons programmer le quoi (ce qui est calculé, description de l'environnement).

Pré-requis

Avant d'aller plus loin, nous pouvons revoir certains principes qui nous seront utiles par la suite...

Validité des formules

Nous pouvons dire d'une formule qu'elle est valide si elle est vraie quelle que soit sont interprétation. Nous avons alors une tautologie.
Exemple   ∀ x ¬p(x) ∨ p(x)

Nous pouvons dire d'une formule qu'elle est consistante (ou satisfiable) si il existe une interprétation dans laquelle elle est vraie. Rien n'empèche qu'une formule consistante soit invalide.
Exemple   ∃ x ¬p(x)

Nous pouvons dire d'une formule qu'elle est inconsistante (ou insatisfiable) si il n'existe pas d'interprétation dans laquelle elle est vraie.
Exemple  x ¬p(x) ∧ p(x)

 

Equivalance

Deux formules sont sémantiquement équivalantes si leurs tables de vérités sont identiques. Nous noterons que deux formules sont équivalantes par le symbole  ⇔ , mais nous retrouvons souvent le symbole .

 

Variable libre

Nous dirons d'une variable qu'elle est libre si elle ne dépend d'aucun quantificateur. Une variable liée dépend donc d'un quantificateur, et nous pouvons remplacer son nom par n'importe quel autre nom qui ne figure pas dans la formule.

 

Prédicat

Un prédicat (ou expression prédicative) est une expression appliquée à un certain nombre d'arguments[2] qui nous retourne vrai ou faux.

Dans le cas où notre prédicat ne possède q'un argument, nous sommes face à une définition de propriété. parent(frank_gray) est une propriété qui nous dit si Frank Gray est un parent ou s'il ne l'est pas.

Si notre prédicatne possède plus d'un argument, nous définissions une relation entre les entités du monde. parent(frank_gray, bill_atkinson) est une relation qui nous dit si Bill Atkinson est le parent de Frank Gray ou s'il ne l'est pas[3].

Si toutes les variables d'une formule sont des variables liées, nous sommes en présence d'une formule close. Un prédicat est une formule dans laquelle nous avons toujours au moins une variable libre (un prédicat n'est donc pas une formule close).

 

Logique du premier ordre[4]

  • C : ensemble de constantes  ( c ) [5].
  • F : ensemble des fonctions  ( f, g, h, etc. )  C ⊆ F.
    une fonction est composée d'un nom et d'une arité (f/n)
  • P : ensemble des prédicats  ( p, q ) .
  • V : ensemble des variables  ( X, Y, Z ) .

 

Termes, constantes, variables

En programmation déclarative, nous n'avons pas de distinction entre les données du programme et le programme lui-même. Les éléments lexicaux de Prolog sont des « termes », que nous pouvons définir inductivement comme suit : t ::= X | c | f(t1, ..., tn)X est une variable, c est une constante, et f(t1, ..., tn) est une fonction pour laquelle tout t est un terme.

Variables

Toute variable est un terme.

Les noms de variables commencent par une majuscule, suivies d'un ensemble de lettres, nombres et caractères de soulignement. Nous pouvons aussi avoir (en Prolog) des noms de variables qui débutent par le caractère de soulignement « _ » pour représenter des variables anonymes.

Notion de variable en Prolog

Une variable en Prolog est différente de la notion de variable à laquelle nous sommes habitués en programmation impérative : Il ne s'agit pas d'un « container » dans lequel nous stockons une valeur qui peut être modifiée à tout moment, mais plus d'un élément que nous précisons par unification, et qui ne peut généralement être modifié au sein d'une même branche d'évaluation après unification.

 

Constantes

Toute constante est un terme. Une constante désigne une unité du monde.

Nous représenterons les constantes par un chiffre, une lettre minuscule, ou un nom qui commence par une minuscule. Si nous devons commencer par une majuscule, nous pouvons délimiter la constante par des apostrophes.

Termes composés

Si t1, ..., tn sont des termes,
si f/n est une fonction d'arité n,
alors f(t1, ..., tn) est un terme composé.

Par exemple en utilisant le foncteur suc et la constante 0, nous pouvons représenter les nombres naturels. Nous pouvons donc représenter la valeur 1, qui est le successeur de 0, par le terme suc(0).
La valeur 3 est donc suc(suc(suc(0))), ce qui est un terme composé.

Un exemple simple de terme composé est : parent_de(bill_atkinson).
Le terme utilisé est une constante, mais pouvons retrouver des variables dans les termes composés (puisque toute variable est un terme, et qu'un terme composé est l'ensemble formé par un foncteur et des termes). L'expression parent_de(X) est donc aussi un terme composé qui représente « une entité qui est le parent de quelqu'un », alors que l'exemple précédent représentait « une entité qui est le parent de Bill Atkinson ».

 

Atomes, formules atomiques

Un atome (ou « formule atomique ») est une expression de la forme p(t1, ..., tn)p est un prédicat d'arité n et t1, ..., tn sont des termes.

Nous noterons les atomes comme les termes, mais débutant par une lettre minuscule. Nous pouvons encadrer un nom d'atome par des apostrophes.

 

Arité

L'arité est le nombre d'arguments d'une fonction.

 

Formules bien formées [wff]

Les formules bien formées sont des formules atomiques

Si w1 et w2 sont des formules bien formées, alors
 ¬w1, w1 ∧ w2, w1 ∨ w2,
w1 ⇒ w2, w1 ⇔ w2,
 ∀ X ( w1 ) ,  ∃ X ( w1 ) ,  ( w1 ) X est non quantifié dans w1, sont des formules bien formées.

 

Cette page utilise des fonctions particulières d'affichage de formules (plus d'infos) , vous pouvez choisir entre un affichage mathml, un affichage html, et un affichage texte

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

6 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Notes

  1. a,b,c,d,e Prolog : PROgrammation LOGique

  2.  Arguments du prédicat : les arguments d'un prédicat sont des termes ou des termes composés.

  3.  Ordre des arguments : l'interprétation que nous pouvons faire de parent(frank_gray, bill_atkinson) dépend de l'ordre dans lequel sont placés les arguments. Cet ordre est fixé par le programmeur et non par le langage.

  4.  Logique du premier ordre : De nombreuses appellations correspondent à la logique du premier ordre, comme par exemple « calcul des prédicats du premier ordre », « calcul des relations », “lower predicate calculus”, ou encore “quantification theory”.

  5.  ensemble de constantes (c) : nous retrouvons ici les termes d'arité 0.

  6. a,b well formed formula : correspond à « Formules bien formées” en français

  7.  wff : “well formed formula” (en français, « Formules bien formées »)

 

Références

  1. livre Langue du document: fr IHDCB337 - Technique d'intelligence artificielle : JM Jacquet, Programmation déclarative (2009)
  2. livre Langue du document: fr IHDCB337 - Technique d'intelligence artificielle : H Toussaint, Tp (2009)

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

 

Historique et modifications de la page

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-4437
Document créé le 11/04/10 03:52, dernière modification le Vendredi 17 Juin 2011, 11:12
Source du document imprimé : http:///www.gaudry.be/programmation-declarative.html
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Apparence (afficher)
Stats (afficher)
15838 documents
455 astuces.
550 niouzes.
3107 definitions.
447 membres.
8121 messages.

Document genere en :
0,10 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Un grand pouvoir implique de grandes responsabilités.

Benjamin Parker [Spiderman ]
 
l'infobrol
Nous sommes le Mercredi 13 Décembre 2017, 00:45, toutes les heures sont au format GMT+1.00 Heure, heure d'hiver