• Aucun résultat trouvé

1.4 Carte de compilation des langages booléens

1.4.1 Requêtes et transformations booléennes

Notions sémantiques

On étend ici certaines notions de la logique — modèle, cohérence, validité, etc. — aux fonctions booléennes en général.

Définition 1.4.1 (Modèle et contre-modèle). Soit f une fonction booléenne sur V

V ; une V -instanciation #—v est un modèle (resp. contre-modèle) de f , ce que l’on note

#—v |= f (resp. #—v ̸|= f), si et seulement si f(#—v ) =⊤ (resp. f(#—v ) =⊥).

L’ensemble des modèles de f est noté Mod(f ) ⊆ Dom(V ) ; l’ensemble de ses

contre-modèles est noté Modc(f ). Il est assez clair que{Mod(f), Modc(f )} est une partition de Dom(V ).

Nous étendons cette définition d’un modèle à toute instanciation #—x des va-

riables d’un quelconque ensemble X⊆ V : en notant Y = V \ X, #—x est un modèle

de f si et seulement si pour toute Y -instanciation #—y , f ( #—x|V . #—y ) = ⊤. On écrit

également #—x |= f, et on étend de la même façon la notion de contre-modèle. Il est

à noter que les ensembles de modèles et de contre-modèles ne contiennent toujours que des V -instanciations.

Définition 1.4.2 (Cohérenceet validité). Soit f une fonction booléenne sur V ⊆ V.

f est cohérente si et seulement si Mod(f ) ̸= ∅. f est valide si et seulement si

Définition 1.4.3 (Contexte). Soit f une fonction booléenne sur V ⊆ V, x ∈ V une

variable, et ω∈ Dom(x). ω est une valeur cohérente pour x dans f si et seulement s’il existe une V ∪ {x}-instanciation #—v telle que #—v|x= ω et #—v |= f.

L’ensemble de toutes les valeurs cohérentes pour x dans f est appelé contexte de x dans f , et noté Ctxtf(x).

Les valeurs cohérentes sont parfois appelées GAC (generalized arc consistent, arc- cohérentes de manière généralisée) ou globalement cohérentes en programmation par contraintes [voir e.g. LS06].

Définition 1.4.4 (Implication et équivalence). Soit f, g des fonctions booléennes. f

implique g, ce que l’on note f |= g, si et seulement si tout modèle de f est un modèle

de g. f est équivalente à g, ce que l’on note f ≡ g, si et seulement si f |= g et g |= f. Toutes les notions précédemment introduites peuvent être définies de manière très simple sur des représentations, c’est-à-dire des éléments d’un langage quel- conque, par le biais de sa fonction d’interprétation.

Définition 1.4.5. Soit L un langage de représentation booléen, et soit φ et ψ des L-représentations.

• Une Scope(φ)-instanciation #—v est un modèle (resp. un contre-modèle) de φ,

ce que l’on note #—v |= φ (resp. #—v ̸|= φ), si et seulement si elle est modèle

(resp. contre-modèle) deJφK.

• On écrit Mod(φ) = Mod(JφK) et Modc(φ) = Modc(JφK).

• φ est cohérente si et seulement siJφK est cohérente. • φ est valide si et seulement siJφK est valide. • φ|= ψ si et seulement si JφK |= JψK. • φ≡ ψ si et seulement si JφK ≡ JψK.

• Une valeur cohérente pour x dans φ est définie comme une valeur cohérente pour x dansJφK. On note Ctxtφ(x) = CtxtJφK(x).

Les définitions suivantes ont trait aux opérations sur les fonctions booléennes.

Définition 1.4.6 (Opérationsbinaires). Soit⊗ ∈ BB2un opérateur binaire surB, et

f, g des fonctions booléennes sur Vf ⊆ V et Vg ⊆ V, respectivement. La fonction

booléenne f⊗g est définie sur les variables de Vf∪Vgpar∀#—x ∈ Dom(Vf∪Vg), (f⊗

g)( #—x ) = f ( #—x|Vf)⊗ g(#—x|Vg).

Définition 1.4.7 (Négation). Soit f une fonction booléenne sur V ⊆ V ; la fonction

booléenne¬f est définie sur les variables de V par ∀#—x ∈ Dom(V ), (¬f)(#—x ) = ¬f(#—x ).

Définition 1.4.8 (Quantification). Soit f une fonction booléenne sur V ⊆ V, et X ⊆

V un ensemble de variables. La quantification existentielle de f par X (également

appelée oubli de X dans f et projection existentielle de f sur V \ X), notée ∃X.f, est la fonction booléenne définie sur Y = V \ X par

∀#—y ∈ Dom(Y ), (∃X.f)(#—y ) =⊤ ⇐⇒ ∃#—x ∈ Dom(X), f(#—y . #—x|V) =⊤. La quantification universelle de f par X (également appelée enforcement de X dans

f et projection universelle de f sur V \ X), notée ∀X.f, est la fonction booléenne

définie sur Y = V \ X par

∀#—y ∈ Dom(Y ), (∀X.f)(#—y ) =⊤ ⇐⇒ ∀#—x ∈ Dom(X), f(#—y . #—x|V) =⊤.

Définition 1.4.9 (Restriction). Soient f, g deux fonctions booléennes sur Vf ⊆ V et

Vg⊆ V, respectivement. La restriction de f à g, notée f|g, est la fonction booléenne

définie sur Y = Vf \ Vg par f|g=∃Vg.(f∧ g).

Soit V ⊆ V, et soit #—v une V -instanciation. La restriction de f à #—v , notée f| #—v, est la fonction booléenne définie sur Y = Vf \ V par f| #—v( #—y ) = f ( #—y . #—v ).

Il est à noter que la restriction à une instanciation peut se voir comme un cas parti- culier de la restriction à une fonction. L’opération de restriction est utile pour com- poser deux fonctions ou fixer la valeur de certaines variables. On utilise également la notation f|x=ωpour la restriction de f à l’instanciation de x à ω.

Requêtes sur les langages booléens

Nous définissons à présent les requêtes standard utilisées pour comparer l’ef- ficacité des langages booléens. Introduites par Darwiche et Marquis [DM02], elles ont été généralisées aux langages de représentation par Fargier et Marquis [FM09], de qui nous adaptons les définitions suivantes.

Nous avons identifié trois types de requêtes ; commençons par la première ca- tégorie, celle des requêtes communes à tous les langages booléens.

Définition 1.4.10 (Requêtes générales). SoitL un langage de représentation booléen.

• L satisfaitCO(cohérence) (resp.VA, validité) si et seulement s’il existe un al- gorithme polynomial associant touteL-représentation φ à 1 si φ est cohérente (resp. valide), et à 0 sinon.

• L satisfaitMC (model checking, vérification de modèle) si et seulement s’il existe un algorithme polynomial associant touteL-représentation φ et toute instanciation #—v des variables de Scope(φ) à 1 si #—v |= φ, et à 0 sinon.

• L satisfait EQ (équivalence) (resp.SE, sentential entailment, implication de

formules) si et seulement s’il existe un algorithme polynomial associant tout couple deL-représentations⟨φ, ψ⟩ à 1 si φ ≡ ψ (resp. φ |= ψ), et à 0 sinon. Ces requêtes sont des extensions directes des définitions classiques [DM02] aux langages portant sur des variables non-booléennes. Grâce à leur structure simple,

ces requêtes s’appliquent à tout langage booléen. Cela est dû au fait que, contraire- ment aux requêtes qui suivent, leurs entrées et sorties sont très simples et ne posent aucune ambiguïté quant à la façon dont elles sont représentées.

Les requêtes de la seconde catégorie sont problématiques de ce point de vue : leur sortie est également élémentaire (il s’agit d’un valeur booléenne), mais leurs paramètres sont des objets « complexes », à savoir des clauses et des termes — qui ne sont définis que surGRDAG. C’est pour cette raison que nous avons choisi de ne définir ces requêtes que sur les sous-langages deGRDAG.

Définition 1.4.11 (Requêtes à paramètres complexes). Soit L un sous-langage de GRDAG.

• L satisfait CE(clausal entailment, implication clausale) si et seulement s’il existe un algorithme polynomial associant touteL-représentation φ et toute clause γ dansL à 1 si φ|= γ, et à 0 sinon.

• L satisfaitIM (vérification d’implicant) si et seulement s’il existe un algo- rithme polynomial associant touteL-représentation φ et tout terme γ dans L à 1 si γ|= φ, et à 0 sinon.

Dans cette définition, φ et γ sont des GRDAGs, et en particulier sont toutes deux des L-représentations (pour le même L). Si ce n’était pas le cas, certains problèmes liés à l’expressivité obscurciraient les raisons pour lesquelles un langage supporte ou non ces requêtes, alors même que le but de la carte de compilation est d’exprimer la puissance intrinsèque de chaque langage. Par exemple, pour queNNFSBB satisfasse

CE, l’algorithme doit être capable de déterminer si uneNNFSBB -représentation im-

plique[x =⊤][y =⊥], mais pas si elle implique des “clauses” non-GRDAG, telles que[x = y][y = z], qui ont une expressivité complètement différente.

Les requêtes de la troisième catégorie n’ont pas de paramètres complexes, mais leurs sorties (liées à la notion d’ensemble de modèles) ne sont pas des valeurs boo- léennes. Nous ne pouvons pas simplement étendre les requêtes de la littérature ; en effet, le nombre de modèles étant possiblement infini, il est inenvisageable de les compter ou de les énumérer. En ce qui concerne la requête d’« énumération de modèles », nous avons dû décider d’une représentation arbitraire de l’ensemble de modèles. Nous avons choisi d’exiger qu’il soit retourné sous la forme de DNFs, qui sont une façon naturelle de représenter des ensembles continus d’instanciations — dans ce contexte, elles sont appelées unions de boîtes. Ce fut plus délicat pour la requête de « comptage de modèles » ; nous avons envisagé la possibilité de la baser sur la taille caractéristique de laDNF-représentation minimale, mais prouver la minimalité n’est pas trivial. Au final, nous avons choisi de garder le sens originel de « comptage », et de simplement retourner le nombre de modèles s’il est fini, et

∞ sinon.

Définition 1.4.12(Requêtes à sortie complexe). SoitL un sous-langage de GRDAG, sur un ensemble de variables VL.

• L satisfait ME (model enumeration, énumération de modèles) si et seule- ment s’il existe un polynôme P (·, ·) et un algorithme associant toute L- représentation φ à uneDNFVL-représentation ψ deJφK en temps P (∥φ∥, ∥ψ∥).

• L satisfaitMEc(counter-model enumeration, énumération de contre-modèles)

si et seulement s’il existe un polynôme P (·, ·) et un algorithme associant toute L-représentation φ à une DNFVL-représentation ψ de ¬JφK en temps

P (∥φ∥, ∥ψ∥).

• L satisfaitCT(comptage de modèles) si et seulement s’il existe un algorithme polynomial associant touteL-représentation φ à|Mod(φ)| s’il est fini, et à ∞ sinon.

Une fois de plus, ces requêtes ne sont définies que sur les sous-langages deGRDAG, à cause de problèmes d’expressivité. En effet, pour que leur satisfaction ne soit pas « faussée », il est nécessaire qu’uneDNFVL-représentation de φ existe, or ce

n’est pas garanti si φ n’est pas un GRDAG. Considérons par exemple la fonction booléenne f définie sur les variables réelles x et y par f (x, y) = ⊤ ⇐⇒ x =

y ; il n’existe aucuneGRDAG-représentation de f , et par conséquent aucune DNF- représentation. Pour pouvoir utiliser DNF comme langage-cible de représentation de l’ensemble de modèles, nous devons obliger le langage d’entrée à avoir une expressivité compatible avecDNF — ce qui est le cas de GRDAG.

Avant de passer aux transformations, notons que nous n’avons défini que les requêtes « classiques » ; nous introduisons de nouvelles requêtes ultérieurement [§ 3.3.3].

Transformations sur les langages booléens

Nous présentons ici les transformations standard sur les langages booléens, éga- lement introduites par Darwiche et Marquis [DM02] et généralisées aux langages de représentation par Fargier et Marquis [FM09].

Définition 1.4.13 (Transformations). Soit L un langage de représentation booléen sur un ensemble de variables VL.

• L satisfaitCD(conditionnement) si et seulement s’il existe un algorithme po-

lynomial associant touteL-représentation φ et toute instanciation #—v des va-

riables de VLà uneL-représentation de la restrictionJφK| #—v deJφK à #—v .

• L satisfait FO(forgetting, oubli) (resp.SFO, single forgetting, oubli simple) si et seulement s’il existe un algorithme polynomial qui associe toute L- représentation φ et tout ensemble (resp. singleton) X ⊆ VL à une L-

représentation de∃X.JφK.

• L satisfaitEN (ensuring, enforcement) (resp.SEN, single ensuring, enforce- ment simple) si et seulement s’il existe un algorithme polynomial associant touteL-représentation φ et tout ensemble (resp. singleton) X ⊆ VL à uneL-

• L satisfait ∧C (closure under ∧, fermeture pour la conjonction) (resp. ∨C,

closure under∨, fermeture pour la disjonction) si et seulement s’il existe un

algorithme polynomial associant tout ensemble fini Φ deL-représentations à uneL-représentation de∧φ∈ΦJφK (resp.φ∈ΦJφK).

• L satisfait∧BC(closure under binary∧, fermeture pour la conjonction binaire) (resp.∨BC, closure under binary∨, fermeture pour la disjonction binaire) si et seulement s’il existe un algorithme polynomial associant tout couple⟨φ, ψ⟩ deL-représentations à une L-représentation deJφK ∧ JψK (resp. JφK ∨ JψK). • L satisfait¬C(closure under ¬, fermeture pour la négation) si et seulement

s’il existe un algorithme polynomial associant touteL-représentation φ à une L-représentation de¬JφK.

La seule transformation délicate à généraliser aux variables non-booléennes était la première. Dans sa définition originelle [DM02], le conditionnement est une “res- triction à un terme” ; mais comme dans ce contexte tous les littéraux ont la forme « x = ⊤ » ou « x = ⊥ », il revient à une restriction à une instanciation. Pour le généraliser aux langages booléens à variables non-booléennes, nous avions le choix entre étendre la définition « restriction à un terme » ou garder l’usage « restriction à une instanciation ». Nous avons choisi la deuxième alternative (qui a l’avantage de ne nécessiter aucun paramètre dépendant du langage de φ — voir la discussion à propos de la définition 1.4.11), et avons étendu la définition originelle comme une nouvelle transformation, appelée explicitement restriction à un terme [voir § 3.3.3].