Terme (logique)

Le terme (x + f(x,y)) * 3 sous forme arborescente

Un terme est une expression de base du calcul des prédicats, de l'algèbre, notamment de l'algèbre universelle, et du calcul formel, des systèmes de réécriture et de l'unification. C'est l'objet produit par une analyse syntaxique. Sa principale caractéristique est d'être homogène (il n'y a que des opérations de base et pas d'opérations logiques) et de décrire l'agencement des opérations de base. Un terme est parfois appelé une formule du premier ordre. Par exemple, (x + f(x,y)) * 3 et *(+(x,f(x,y)),3) et *+xfxy3 et la figure à droite représentent le même terme sous quatre formes externes différentes.

Description

À la base des termes, il y a des opérateurs qui sont répartis dans une signature. Les opérateurs sont les symboles de base, tandis que la signature attribue une arité à chaque opérateur. L'arité est le nombre d'arguments qu'attend un opérateur. Ainsi il y aura des opérateurs unaires (d'arité 1), des opérateurs binaires (d'arité 2), des opérateurs ternaires (d'arité 3) et plus généralement des opérateurs n {\displaystyle n} -aires. Les opérateurs 0-aires sont ceux qui n'attendent pas d'arguments et sont appelés des constantes. Dans le cas où on désire des termes avec des variables on ajoute à l'ensemble Σ 0 {\displaystyle \Sigma _{0}} un ensemble dénombrable X {\displaystyle X} dit ensemble des variables. Plus formellement une signature est définie ainsi :

Σ = i = 0 Σ i {\displaystyle \mathbf {\Sigma } =\bigcup _{i=0}^{\infty }\Sigma _{i}} ,

Σ i {\displaystyle \Sigma _{i}} est l'ensemble des opérateurs i {\displaystyle i} -aires. Par exemple, dans les groupes, la signature comporte trois ensembles non vides d'opérateurs Σ 0 = { e } {\displaystyle \Sigma _{0}=\{e\}} , Σ 1 = { _ 1 } {\displaystyle \Sigma _{1}=\{\_^{-1}\}} et Σ 2 = { } {\displaystyle \Sigma _{2}=\{\bullet \}} . Autrement dit, dans les groupes il y a une constante e {\displaystyle e} , un opérateur unaire qui s'écrit a 1 {\displaystyle a^{-1}} (notation suffixe) quand il est appliqué à un élément a {\displaystyle a} et un opérateur binaire qui s'écrit (notation infixe) a b {\displaystyle a\bullet b} quand il est appliqué à a {\displaystyle a} et b {\displaystyle b} . Notons cependant que la plupart du temps les termes sont écrits en notation préfixée, c'est-à-dire sous la forme f ( a 1 , . . . , a n ) {\displaystyle f(a_{1},...,a_{n})} , par exemple f ( a 1 , a 2 , a 3 ) {\displaystyle f(a_{1},a_{2},a_{3})} pour un opérateur ternaire. Notons aussi que si l'arité est bien spécifiée, on peut se passer des parenthèses dans une notation dite notation polonaise ou notation de Łukasiewicz

Il y a différentes définitions des termes qui sont équivalentes.

Définition récursive

On peut définir récursivement l'ensemble T {\displaystyle T} des termes ainsi

T = i = 0 f Σ i f ( T , . . . i   f o i s . . . , T ) {\displaystyle T=\bigcup _{i=0}^{\infty }\bigcup _{f\in \Sigma _{i}}f(T,...i~fois...,T)}

Définition comme application d'un ensemble de positions vers une signature

La définition utilisant la notion d'ensemble de positions d'un terme permet de décrire facilement différentes propriétés et différents algorithmes sur les termes.

Un ensemble P {\displaystyle {\mathit {P}}} de mots sur l'ensemble des entiers positifs est un ensemble de positions si

  1. P {\displaystyle {\mathit {P}}} est fini et non vide,
  2. p P {\displaystyle p\in {\mathit {P}}} et q {\displaystyle q} préfixe de p {\displaystyle p} impliquent q P {\displaystyle q\in {\mathit {P}}} ,
  3. p i P {\displaystyle pi\in {\mathit {P}}} et j N { 0 } {\displaystyle j\in \mathbb {N} -\{0\}} et j < i {\displaystyle j<i} impliquent p j P {\displaystyle pj\in {\mathit {P}}} .

Un terme s {\displaystyle s} est une application d'un ensemble P {\displaystyle {\mathit {P}}} de positions dans une signature avec la contrainte que si s ( p ) = f Σ n {\displaystyle s(p)=f\in \Sigma _{n}} alors p i P {\displaystyle pi\in {\mathit {P}}} si et seulement si i n {\displaystyle i\leq n} . P {\displaystyle {\mathit {P}}} est alors appelé l'ensemble des positions du terme s {\displaystyle s} et noté P o s ( s ) {\displaystyle {\mathit {Pos}}(s)} .

La propriété 2. ci-dessus signifie que si p {\displaystyle p} est une position d'un terme, alors toute position préfixe est aussi une position dans le terme (située au-dessus). La propriété 3. ci-dessus signifie que si p {\displaystyle p} est une position d'un terme, alors toute position située sous le même symbole mais à sa gauche est aussi une position dans le terme. La contrainte ajoutée dit que si un nœud est étiqueté par un symbole d'arité n {\displaystyle n} alors il a exactement n {\displaystyle n} fils.

Définition en tant qu'arbre étiqueté orienté

Représentation arborescente des termes (n*(n+1))/2 et n*((n+1)/2)

Un terme peut être vu comme un arbre[1] étiqueté (à chaque nœud est associé une étiquette prise dans la signature) orienté (les fils d'un nœud sont ordonnés de droite à gauche). Il y a de plus une contrainte, à savoir que le nombre de fils d'un nœud est donné par l'arité de l'étiquette du nœud. On parle de représentation arborescente d'un terme.

Un exemple

Considérons la signature

  • Σ 0 = X { 0 , 1 , 2 , . . . } {\displaystyle \Sigma _{0}=X\cup \{0,1,2,...\}} X = { n , m , n , m } {\displaystyle X=\{n,m,n',m'\}}
  • Σ 2 = { + , , / } {\displaystyle \Sigma _{2}=\{+,*,/\}}
  • Σ i = {\displaystyle \Sigma _{i}=\emptyset } pour 0 i 2 {\displaystyle 0\neq i\neq 2} .

Soit t {\displaystyle t} le terme tel que P o s ( t ) = { ε , 1 , 2 , 11 , 12 , 121 , 122 } {\displaystyle {\mathit {Pos}}(t)=\{\varepsilon ,1,2,11,12,121,122\}} et

  • t ( ε ) = / {\displaystyle t(\varepsilon )=/}
  • t ( 1 ) = {\displaystyle t(1)=*}
  • t ( 2 ) = 2 {\displaystyle t(2)=2}
  • t ( 11 ) = n {\displaystyle t(11)=n}
  • t ( 12 ) = + {\displaystyle t(12)=+}
  • t ( 121 ) = n {\displaystyle t(121)=n}
  • t ( 122 ) = 1 {\displaystyle t(122)=1} .

Il s'agit du terme de gauche de la figure ci-dessus. Il s'écrit / ( ( n , + ( n , 1 ) ) , 2 ) {\displaystyle /(*(n,+(n,1)),2)} en notation récursive préfixée, / + n 1 n 2 {\displaystyle /*+n1n2} en notation polonaise et ( n ( n + 1 ) ) / 2 {\displaystyle (n*(n+1))/2} en notation infixe.

Quelques définitions liées aux termes

Le nombre d'éléments de P o s ( s ) {\displaystyle {\mathit {Pos}}(s)} s'appelle la taille de s {\displaystyle s} . La position ε {\displaystyle \varepsilon } (le mot vide de ( N { 0 } ) {\displaystyle (\mathbb {N} -\{0\})^{*}} ) est la racine et s ( ε ) {\displaystyle s(\varepsilon )} est le symbole à la racine.

Un terme sans variable est dit clos ou fermé. Un terme qui n'est pas fermé est dit ouvert.

Le symbole à la position p {\displaystyle p} dans t {\displaystyle t} est le symbole de Σ {\displaystyle \mathbf {\Sigma } } associé à p P o s ( t ) {\displaystyle p\in {\mathit {Pos}}(t)} par la fonction t : P o s ( t ) Σ {\displaystyle t:{\mathit {Pos}}(t)\rightarrow \mathbf {\Sigma } } . Si p P o s ( t ) {\displaystyle p\notin {\mathit {Pos}}(t)} alors t ( p ) {\displaystyle t(p)} , autrement dit le symbole à la position p {\displaystyle p} dans t {\displaystyle t} , n'est pas défini.

Si p {\displaystyle p} est une position de t {\displaystyle t} , le sous-terme de t {\displaystyle t} à la position p {\displaystyle p} s'écrit t | p {\displaystyle t_{|p}} et se définit comme suit. Les positions de t | p {\displaystyle t_{|p}} forment l'ensemble des suffixes de p {\displaystyle p} dans P o s ( t ) {\displaystyle Pos(t)} , autrement dit:

P o s ( t | p ) = { q ( N { 0 } ) p q P o s ( t ) } {\displaystyle Pos(t_{|p})=\{q\in (\mathbb {N} -\{0\})^{*}\mid pq\in Pos(t)\}} .

Enfin t | p ( q ) = t ( p q ) {\displaystyle t_{|p}(q)=t(pq)} . La racine de t | p {\displaystyle t_{|p}} est le symbole à la position p {\displaystyle p} dans t {\displaystyle t} , autrement dit t | p ( ε ) = t ( p ) {\displaystyle t_{|p}(\varepsilon )=t(p)} . Dans l'exemple ci-dessus, t | p {\displaystyle t_{|p}} est le terme n + 2 {\displaystyle n+2} .

Algèbre et algèbre des termes

L'enracinement est l'opération qui consiste à prendre un opérateur f {\displaystyle f} d'arité n {\displaystyle n} et n {\displaystyle n} termes t 1 {\displaystyle t_{1}} , ..., t n {\displaystyle t_{n}} et à créer un terme f ( t 1 , . . . , t n ) {\displaystyle f(t_{1},...,t_{n})} . L'enracinement permet de munir l'ensemble des termes d'une structure d'algèbre universelle.

Il existe un morphisme naturel de l'algèbre des termes vers n'importe laquelle des algèbres de même signature. Ce morphisme fait de l'algèbre des termes sur une signature donnée Σ {\displaystyle \mathbf {\Sigma } } une algèbre initiale de la catégorie des algèbres de signature Σ {\displaystyle \mathbf {\Sigma } } .

Bibliographie

  • (en) Terese, Term Rewriting Systems, Cambridge Tracts in Theoretical Computer Science, 2003 (ISBN 0521391156)
  • (en) Franz Baader et Tobias Nipkow, Term Rewriting and All That, Cambridge (GB), Cambridge University Press, (1re éd. 1998), 301 p. (ISBN 0-521-45520-0 et 0521779200, présentation en ligne)

Voir aussi

  • Expression
  • Formule
  • Énoncé
  • Induction structurelle
  • Lambda-calcul
  • Prédicat (logique mathématique)
  • Arbre (mathématiques)
  • Partage (programmation informatique)

Notes & Références

  1. La tradition veut que la racine des arbres soit positionnée en haut!
  • icône décorative Portail des mathématiques
  • icône décorative Portail de la logique
  • icône décorative Portail de l’informatique
  • icône décorative Portail de l'informatique théorique