• Aucun résultat trouvé

INE 11

N/A
N/A
Protected

Academic year: 2022

Partager "INE 11"

Copied!
8
0
0

Texte intégral

(1)

Principes des lang. de progr.

INE 11

Michel Mauny

Inria-Paris

prénom.nom@inria.fr

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 1 / 22

Termes

1 Termes du premier ordre Termes sans variables Définitions inductives Termes avec variables

2 Filtrage

3 Unification

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 2 / 22

Motivations

Termes

représentation d’expressions quelconques 1+2

if p(x) theng(f(x),h(x,y,z)) else succ(1+t) P(x)∨ ¬Q(x))

logique, types, données structurées, morceaux de programme variables pour représenter une infinité de termes

Du 1er ordre : sans liaisons de variables oui :P(x)∨ ¬Q(x)

non :∀x,P(x)∨ ¬Q(x)

(2)

Termes

Symboles :on considèreΣ, un ensemble symboles munis d’une arité Σ1={(Zero,0),(Succ,1),(Plus,2)}

Σ2={(A,0),(F,1),(G,3)}

Définition

Termes

L’ensembleTΣdes termes sur Σ(appelésΣ-termes) est défini par : tout symbole deΣd’arité 0 est unΣ-terme

sit1, . . . ,tnsont desΣ-termes et siF ∈Σest un symbole d’aritén, alorsF(t1, . . . ,tn)est unΣ-terme.

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 4 / 22

Exemples

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 Graphiquement

Zero Succ

Plus

F

Zero

G

A F

A A

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 5 / 22

Définitions inductives

Ensembles de termes quelquefois définisinductivement

Le plus petit ensemble contenant une relation nat=Zero|Succofnat

qu’on peut lire comme

natest le plus petit ensembletel que : Zero∈nat

sin∈natalorsSucc(n)∈nat

(3)

Définitions inductives

On retrouve de telles définitions dans :

définitions de type OCaml (types ditsalgébriques) définitions de grammairesalgébriques

. . .

Entiers naturels Pairs

0 est pair

npair⇒n+2 pair

Impairs

1 est impair

nimpair⇒n+2 impair

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 7 / 22

Preuves par induction

SoitE défini par induction avec cas de baseb1, . . . ,bn

cas d’inductionpi ⇒qi

Pour montrerP surE montrerP(bi)

montrerP(pi)⇒P(qi) Exemple

arbre=F|Nofarbre∗arbre

montrer que le nombre de feuilles d’unarbreest au plus égal à 1+le nombre de nœuds (fa≤na+1)

par induction sur la structure d’arbre: casa=F: trivial

casa=N(t,u) : on suppose la propriété vraie pourt etu, et on conclut puisquefu≤nu+1 etft≤nt+1, on a

fa=fu+ft≤nu+nt+2=na+1

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 8 / 22

Termes avec variables

TΣ ne contient que des termes dits clos

Soit V ensemble infini dénombrable de noms de variables

Termes avec variables

toute variable deV est unΣ∪ V-terme

tout symbole deΣd’arité 0 est unΣ∪ V-terme

sit1, . . . ,tnsont desΣ∪ V-termes et siF ∈Σest un symbole d’arité n, alorsF(t1, . . . ,tn)est unΣ∪ V-terme

Dans la suiteΣetV sont implicites.

(4)

Substitution

Définition

Unesubstitutionest une fonction totale de l’ensemble des variablesV vers un ensemble de termesT.

Domaine

dom(θ)ensemble desx tels queθ(x)6=x

on ne considérera que des substitutions à domaine fini Notations, terminologie

[x17→t1;. . .;xn7→tn]

la substitution identité :∅ ou [ ]

renommage :θbijective dont le codomaine ne contient que des variables

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 10 / 22

Morphisme

De substitution à morphisme

On étend naturellement une substitutionθen unmorphisme de termesθ: θ(F(t1, . . . ,tn)) =F(θ(t1), . . . , θ(tn))

θ(x) =θ(x)

Par la suite,θ sera notéθ :on confondra substitution et morphisme associé.

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 11 / 22

Extension, composition

Composition

On définit la compositionθ1◦θ2de deux substitutionsθ1etθ2comme la substitution qui associe à toute variablex le terme θ12(x)).

Extension de

θ

L’extension de la substitutionθpar[x7→t]est la substitution notée θ⊕[x 7→t]définie par :

dom(θ⊕[x7→t]) =dom(θ)∪ {x}

(θ⊕[x 7→t])(x) =t

(θ⊕[x 7→t])(y) =θ(y)poury 6=x

(5)

Pré-ordre sur les termes

Les substitutions induisent un pré-ordre sur les termes préordre = relation binaire réflexive et transitive Note : un ordre (partiel) est un préordre anti-symétrique

Préordre de généralité

On dira quet1 estmoins généralquet2, et on noterat1≤t2 si il existe une substitutionθtelle quet1=θ(t2).

On dira quet1 est uneinstancedet2.

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 13 / 22

Filtrage

Le problème du filtrage :Trouver une réponse à la question suivante : Étant donnés deux termest etm, a-t-ont≤m?

que l’on peut aussi formuler comme :

Le termet est-il une instance du termem? Utilisation

filtrage (pattern matching) des langages comme OCaml transposer un théorème général dans un contexte particulier raisonnement quotidien !

Calcul de substitutionθtelle queθ(m) =t

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 14 / 22

Exemples

terme instancede ? motif substitution

Succ(Succ(Zero)) Succ(x) θ= [x7→Succ(Zero)]

Succ(Succ(y)) Succ(x) θ= [x7→Succ(y)]

Succ(Succ(x)) Succ(x) θ= [x7→Succ(x)]

G(F(A),F(A),F(A)) G(x,x,x) θ= [x7→F(A)]

Succ(x) 6≤ Succ(Succ(y))

G(F(A),A,F(A)) 6≤ G(x,x,x)

(6)

Algorithme

filtre[(m,t)]∅est défini par

filtre : (terme× terme) list→subst.→subst. (ouéchec) filtre[ ] θ=θ

filtre[(x,t1); (m2,t2);...; (mn,tn)]θ= six6∈dom(θ)alors

filtre[(m2,t2);...; (mn,tn)] (θ⊕[x7→t1])sinon siθ(x) =t1alorsfiltre[(m2,t2);...; (mn,tn)]θ sinon échec

filtre[(S(q1, . . . ,qk),T(u1, . . . ,ul)); (m2,t2);...; (mn,tn)]θ= siS=T alorsfiltre[(q1,u1);...; (qk,uk); (m2,t2);...; (mn,tn)]θ sinon échec

filtren’importe quoi d’autre=échec

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 16 / 22

Unification

L’unification

deux termes ont-ils des instances communes ? la réponse peut être :

«non, évidemment» :AetB,F(...) etG(...)

«oui, évidemment» :Succ(x)etSucc(Zero)

moins évidente :Plus(x,Succ(Zero))etPlus(Succ(y),z)

c’est la résolution d’une équation entre termest1=t2, qui revient à calculer une substitutionθtelle queθ(t1) =θ(t2)

Si deux termes admettent un unificateurθ, on dit qu’ils sont unifiables

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 17 / 22

Exemples

termes à unifier

Succ(Succ(x))etSucc(Succ(x))

Plus(Zero,Zero)etPlus(x,Zero) [x7→Zero]

Plus(Zero,x)etPlus(x,Zero) [x7→Zero]

Plus(Succ(y),x)etPlus(Succ(Succ(x)),Succ(Zero))

[y7→Succ(Succ(Zero));x7→Succ(Zero)]

Succ(Zero)etSucc(Succ(Zero))

Succ(x)etSucc(Succ(x))

Dernier exemple :équation récursive

(7)

Principe de l’algorithme

Cas général

soit à unifier[(t1,u1), . . . ,(tn,un)]: on cherche µtelle que

∀i=1..n, µ(ti) =µ(ui)

sit1 est unifiable avecu1, produisantµ1, on continue l’unification de [(µ1(t2), µ1(u2)), . . . ,(µ1(tn), µ1(un))]

si cela réussit et produitµ0, alorsµ0◦µ1unifie[(t1,u1), . . . ,(tn,un)].

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 19 / 22

Algorithme

unifier[(t,u)]∅est défini par

unifier : (term×term) list→subst.→subst. (ou échec) unifier [ ]µ=µ

unifier[(x,u1); (t2,u2);...; (tn,un)]µ=

six=u1alorsunifier[(t2,u2);...; (tn,un)]µsinon six apparaît dansu1alors échec sinon

soitµ1= [x7→u1]

unifier(µ1(t2), µ1(u2));...; (µ1(tn), µ1(un))] (µ1◦µ) unifier[(t1,x);...; (tn,un)]µ= unifier[(x,t1);...; (tn,un)]µ unifier[(S(a1, ...,ak),T(b1, ...,bl)); (t2,u2);...; (tn,un)]µ=

siS=T alorsunifier[(a1,b1);...; (ak,bk); (t2,u2);...; (tn,un)]µ sinon échec

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 20 / 22

Propriétés

L’unificateurde 2 termes (quand il existe) n’est pas unique : siµunifie,θ◦µles unifie aussi

pourt etu, il existe un «meilleur» unificateurµ, tel que : siθunifietetu, alors∃θ0 t.q.θ=θ0◦µ

µest unique, à un renommage près

il est appeléunificateur le plus général, et on le note quelquefois mgu(t,u)

Alan Robinson, 1965 Voir aussi

Anti-unification ou généralisation (Plotkin 1971, Huet 1976)

(8)

Conclusion

Les termes

représentation de données dans le domaine du calcul symbolique (compilation, logique,etc.

clos, avec variables

filtrage et unification : mécanismes de base de «raisonnements mécaniques»

Michel Mauny (Inria-Paris) INE 11 prénom.nom@inria.fr 22 / 22

Références

Documents relatifs

découpage du programme en morceaux compilables indépendamment pour rendre les gros programmes compilables. donner de la structure

Comment produire un analyseur à partir d’une spécification traduction d’expressions rationnelles en automates finis non-déterministes.

Générateur d’analyseurs ascendants pour OCaml similaire à Yacc (pour C, mais aussi Java, etc) grammaires LALR(1) : LR(1) + compaction de tables grammaire + actions dans un

référence pour programmeurs : savoir «ce que ça fait» sans le tester preuves de correction de programmes : raisonnement mathématique impossible sans sémantique formelle.

Puis «lire» les axiomes et règles d’inférence comme des cas d’une fonction d’évaluation :. val eval : Pcfast.expr → environment → semopval let rec eval t rho = match

Les traits les plus importants des langages classiques (blocs, variables, fonctions/procédures, instructions, structures de données, objets) Une mise en œuvre possible de ces traits

On peut aussi représenter ces données avec un diagramme rectangulaire, où l’aire des rectangles est proportionnelle aux effectifs

Le dessin étant fait à l’échelle réduite, la représentation exacte de certains éléments ou détails y serait peu lisible ou même irréalisable.. On peut citer, à