• Aucun résultat trouvé

Automates, machines, moteurs r´eactifs

N/A
N/A
Protected

Academic year: 2022

Partager "Automates, machines, moteurs r´eactifs"

Copied!
20
0
0

Texte intégral

(1)

Automates, machines, moteurs r´ eactifs

G´erard Huet Notes de cours MPRI, 2008

October 15, 2008

1 Automates

1.1 Automate sur un mono¨ıde d’actions

Soit S = hS,·,1i un mono¨ıde de support un ensemble S d’´el´ements appel´es actions, muni d’une op´eration associative not´ee·appel´eeproduitet d’un ´el´ement 1 neutre `a gauche et `a droite pour ce produit.

On appelleS-automate un tuplehQ, I, T, δio`u : – Qest un ensemble fini d’´etats

– I∈Qest l’ensemble des ´etatsinitiaux – T ∈Qest l’ensemble des ´etatsterminaux

– δ∈Q→℘(S×Q) est larelation de transition, qui associe `a tout ´etat un ensemblefinide paires (a, q) form´ees d’une actionaet d’un ´etatq.

On appellesupport de l’automate A=hQ, I, T, δil’ensemble fini d’actions ΦA={a∈S| ∃q, q0∈Q(a, q0)∈δ(q)}.

On appelleinversede l’automate A=hQ, I, T, δil’automate de mˆeme sup- porthQ, T, I, δ0itel que δ0(q0) ={(a, q)|(a, q0)∈δ(q)}, not´e ˜A. On a bien sˆur

e˜ A=A.

1.2 Comportement d’un automate

On appelleparcoursde l’automateA=hQ, I, T, δiune s´equence p=q0

a1

→q1 a2

→...q2 an

→qn (n≥0)

avec∀i≥0qi∈Q∧(ai+1, qi+1)∈δ(qi). On d´efinit l’actionassoci´ee au parcours pcommeact(p) = 1 si n= 0, et act(p) =a1·...·an sinon. Le parcours est dit acceptant si q0 ∈ I et qn ∈ T, et on note pa(A) pour l’ensemble des parcours acceptants de A. On appellecomportement de l’automate A l’ensemble|A| = {act(p)|p∈pa(A)}.

On dit queqn est A-accessible `a partir de q0, et que q est A-accessible s’il estA-accessible `a partir d’un ´etat initial deA. On dit queqestA-co-accessible s’il est ¯A-accessible, etA-utiles’il estA-accessible etA-co-accessible.

On dit queA est´emond´essi tous ses ´etats sont utiles. Tout automate peut ˆ

etre r´eduit en un automate ´emond´e de mˆeme comportement.

(2)

II

1.3 Exemples

Le mono¨ıde des actions peut ˆetre le mono¨ıde libre Σ engendr´e par un alpha- bet fini Σ. Un Σ-automate est alors la g´en´eralisation d’un automate fini non d´eterministe, o`u on permet d’´etiqueter une transition par un mot arbitraire, et non seulement une lettre. Un cas particulier est celui des automates avec tran- sition spontan´ee (-move).

On obtient les transducteurs d’un alphabetΣ dans un alphabetΣ0 en con- sid´erant le mono¨ıde (non-libre) produit des mono¨ıdes libres Σ etΣ0∗.

2 Machines

2.1 Relations comme actions

Une relation entre les ensemblesD et D0 est un ensemble de paires deD×D0. Toute relation ρ∈℘(D×D0) se currifie en une function deD dans ℘(D0) par une correspondance bijective. Nous ´ecrironsρ:D→D0 pourρ∈℘(D×D0) vue comme fonction, et nous noterons, pour toutd∈D,ρ(d) pour{d0|(d, d0)∈ρ}.

On notera ˜ρ:D0→D pour la relation inverse{(d0, d)|(d, d0)∈ρ}.

On ´ecrit pour l’ensemble des endo-relations de D: Rel(D) = ℘(D ×D).

Rel(D) est muni d’une structure de mono¨ıde multiplicatif, le produit ´etant la composition des relations:

ρ·ρ0={(d, d00)| ∃d0 d0 ∈ρ(d)∧d00∈ρ0(d0)}

et l’´el´ement neutre ´etant la relation identit´e 1 ={(d, d) | d ∈ D}. Rel(D) est aussi muni d’une structure de mono¨ıde additif, commutatif et idempotent, la somme + ´etant l’union, et l’´el´ement neutre 0 ´etant la relation vide. On peut

´

egalement d´efinir un it´erateur de Kleene ∗ par la fermeture r´eflexive transi- tive d’une relation, ce qui permet d’interpr´eter les expressions rationnelles dans Rel(D) vue comme une alg`ebre de Kleene.

Mieux encore, en d´efinissant les op´erateurs d’implicature ou semi-compl´ement:

ρ→σ={(v, w)| ∀u uρv⇒uσw}

σ←ρ={(u, w)| ∀v wρv⇒uσv}

on peut voirRel(D) comme unealg`ebre d’actionsau sens de Pratt [6]. Rappelons que les alg`ebres d’actions forment une vari´et´e (c’est-`a-dire sont axiomatisables

´

equationnellement) au contraire des alg`ebres de Kleene, qui ne forment qu’une quasi-vari´et´e (c’est-`a-dire n´ecessitent pour leur axiomatisaton des ´equations con- ditionnelles) [5]. Les op´erations de semi-compl´ement peuvent ˆetre vues comme des interpolants permettant la compl´etude du raisonnement ´equationnel. Elles ont aussi l’avantage de formaliser une notion logique d’implication entre rela- tions, utile pour d´ecrire des transductions conditionnelles. Les alg`ebres d’action semblent donc un compromis int´eressant entre les alg`ebres de Kleene servant `a interpr´eter les expressions rationnelles et le mod`ele relationnel de la th´eorie des ensembles.

(3)

III On peut ainsi calibrer la th´eorie axiomatique des actions pour accommoder plus ou moins des propri´et´es des relations. Par exemple, se donner une op´eration involutive d’inverse, permettant d’accommoder `a la fois l’inverse d’une relation

˜

ρet l’image-miroir d’un mot sur un alphabet fini. N´eanmoins, voir la difficult´e dans Pratt.

Enfin, on peut compl´eter les alg`ebres d’actions par une op´eration limite au- torisant des unions infinies. Dans l’alg`ebre des relations, ceci correspond `a as- socier `a une familleR de relations la relation union :

U(R) = [

ρ∈R

ρ

Les alg`ebres relationnelles sont ainsi des alg`ebres d’actions continues - ce sont des ordres partiels complets au sens de Scott, la relation d’approximation ´etant la partie, et la continuit´e la compacit´e.

Bien sˆur, Rel(D) poss`ede de nombreuses autres propri´et´es, et par exemple l’ordre partiel d´efini par a≤b ssi a+b =b lui donne une structure d’alg`ebre Bool´eenne compl`ete. Mais les machines que nous consid´erons n’ont pas besoin d’op´erer sur des alg`ebres d’actions aussi riches. Par exemple, si la somme de deux actions n’est pas idempotente, nous pouvons remplacer la notion de relation comme ensemble de paires par une notion plus fine de relation repr´esent´ee par un multi-ensemble de paires, ou mˆeme par une s´equence si l’on oublie aussi la commutativit´e.

2.2 Relations calculables

Nous allons maintenant nous restreindre `a des relations calculables, et pour ce faire d’abord se restreindre `a des espaces de donn´ees (Dci-dessus) r´ecursivement

´

enum´erables repr´esent´es par des flux calculables. Un flux sur un espace de donn´ees D (anglais stream) est soit Vide soit une paire Stream(d,f) compos´ee d’un ´el´ement d deD et d’une fonction partielle f de U →D, o`u U est le type de donn´ees trivial r´eduit `a un ´el´ement not´e (). Ces fonctions partielles perme- ttent le calcul progressif d’un sous ensemble r´ecursivement ´enum´erable de D potentiellement infini. La valeur Videpermet de distinguer les ensembles finis.

On d´efinit, pour tout fluxφsur le domaineD, l’ensembleφcomme suit:

V ide=∅

Stream(d, f) ={d} ∪f()

On dit que le fluxφest progressif si soitφ=V ide, soitφ=Stream(d, f), avec f une fonction totale telle que f() est un flux progressif. Autrement dit, toutes les fonctions intervenant dans le calcul de l’ensembleφterminent. Les flux progressifs permettent de d´efinir des ensembles calculables (i.e. r´ecursivement

´

enum´erables) dont la vacuit´e est d´ecidable.

On appelledomaine de calculun ensemble ´enum´er´e par un flux progressif.

On appellerelation calculablesur le domaine de calculD une endo-relation deD d´efinie par une fonction totaleρassociant `a toutd∈D un flux progressif ρ(d) de valeurs deD. Autrement dit, (x, y)∈ρssiy∈ρ(x).

(4)

IV

2.3 Machines d’Eilenberg

Une machine d’Eilenberg calculant sur le domaine de calculDest d´efinie comme unS-automate, o`u le mono¨ıde d’actionsSest pris comme l’ensemble des relations calculables surD muni de la composition et de l’identit´e [1].

Le comportement d’une telle machineMest un ensemble |M| de relations calculables - obtenues par composition des relations ´etiquetant un parcours ac- ceptant. On peut ´enum´erer ces parcours pour obtenir un flux de relations.

La relation caract´eristique d’une machine M est l’union de ses comporte- ments:

||M||= [

ρ∈|M|

ρ

Les relations caract´eristiques interpr`etent relationnellement le langage re- connu par l’automate.

2.4 Machines d’Eilenberg modulaires

On obtient la notion de machine modulaire en ´etiquetant les transitions de l’automate par les relations caract´eristiques des machines param`etres d’une ma- chine ainsi d´efinie comme un foncteur. En termes de langages formels, on in- stancie la description d’une machine syntaxique d´efinie sur un alphabet Σ de relations formelles par un morphisme de renommage (ang. relabeling). Chaque param`etre formel est instanci´e par la relation caract´eristique de la machine cor- respondante.

Ceci nous am`ene donc `a d´efinir les machines d’Eilenberg syntaxiques rela- tivement `a un alphabet Σ , comme des Σ-automates particuliers, o`u les ac- tions ´etiquetant les transitions sont r´eduites `a un ´el´ement deΣ. Notons que ce sont exactement les automates finis non-d´eterministes traditionnels. On appelle donc foncteur d’Eilenberg, ou machine d’Eilenberg modulaire, la paire (Σ, M) o`u M est une machine syntaxique relativement `a Σ. Si on se donne un con- texte d’instanciation comme une tableN associant une machine d’EilenbergNa

`

a toute actiona∈Σ, alors on peut d´efinir la machine instance du foncteur par cette application:

App(Σ, M)N

En effet, il suffit d’instancier la relation de transition deM en y rempla¸cant toute paire (a, q) par la paire (||Na||, q). SiNa est une machine de domaine de calcul Da, la machine ainsi obtenue est une machine de domaine de calculS

a∈ΣDa. En particulier, si les Na ont toutes le mˆeme domaine de calcul D, la machine compos´ee a aussi ce domaine de calcul.

2.5 Interfaces

Ce que nous avons d´efini jusqu’`a pr´esent est lenoyaud’une machine d’Eilenberg, d´efinissant ses donn´ees et son contrˆole. La description se compl`ete par la donn´ee d’une interface, compos´ee d’un domaine d’input D, d’un domaine d’output

(5)

V D+, d’une relation d’input φ et d’une relation d’output φ+. La machine M compl´et´ee par cette interface I d´efinit une relation φ(M, I) : D → D+ par composition :

φ(M, I) =φ◦ ||M|| ◦φ+

2.6 Calculs d’une machine d’Eilenberg

L’id´ee est de remplacer l’´etat d’un automate muni d’une bande de calcul par une cellule(d, q) o`udest une donn´ee du domaine de calculD de la machine, etqun

´

etat de son espace d’´etatsQ. La cellule est diteinitiale(resp.finale) siqest un

´

etat initial (resp. terminal).

Une´etape de calculest une transition avec calcul sur la donn´ee : (d, q)→ρ (d0, q0)

o`u (ρ, q0) ∈ δ(q) et d0 ∈ ρ(d). Notons qu’il y a deux choix non-d´eterministes successifs; le premier est sur le contrˆole, le deuxi`eme est sur la donn´ee. Le premier choix est d´eterministe si l’automate sous-jacent est d´eterministe, le deuxi`eme choix l’est si la relation s´electionn´ee est fonctionnelle. Une cellule (d, q) est dite bloquantesi pour tout (ρ, q0)∈δ(q) on aρ(d) =∅.

Un calcul est une suite d’´etapes de calcul issue d’une cellule initiale. On d´efinit l’ensemble des donn´ees permises`a l’´etatqcomme le sous-ensembleD(q) des ´elementsd∈D tels qu’il existe un calcul se terminant en (d, q). L’ensemble des donn´eesD(M) calculables par une machineMest l’union desD(q) pourq

´

etat terminal. C’est l’image de Dpar la relation caract´eristique ||M||.

Donnons maintenant quelques d´efinitions permettant de limiter la puissance du formalisme vers des machines plus finitistes.

La relationρ:D→D0est ditelocalement finiesi pour toutd∈Dl’ensemble ρ(d) est fini. La machine M est dite localement finie si toute relationρ∈ ΦM

est localement finie. La machineM est ditenœth´eriennesi tous ses calculs sont finis.

Remarquons qu’une machine est nœth´erienne si son domaine de calculD est un ordre bien fond´e par la relation d’ordre>engendr´ee par :

d > d0 ⇐ ∃ρ∈Φ(M)d0∈ρ(d)

En effet, s’il existe une suite de calcul infinie alors il existe une sous-suite in- finie passant par le mˆeme ´etatq. Par contre, la r´eciproque n’est pas vraie, car une machine peut terminer pour une raison d´ependant essentiellement de son contrˆole.

Enfin, la machineM est ditefinie si elle est localement finie et nœth´erienne.

On dit qu’une machine estlocalement d´eterministe(“sequential” in Eilenberg [1]) ssi pour toute cellule (d, q) apparaissant dans un calcul il existe au plus une transition de calcul issue de cette cellule, c’est-`a-dire siδ(q) est un ensemble de paires {(ρ1, q1),(ρ2, q2), ...(ρn, qn)}tel que pour au plus un 1≤k≤n ρk(d) est non vide, et que si cekexiste alorsρk(d) est singleton. Cette condition exige que

(6)

VI

d’une part la relation de transition de l’automate sous-jacent soit une fonction partielle, et que d’autre part les relations issues d’un ´etatqsoient des fonctions partielles sur D(q). Remarquez qu’une machine localement d´eterministe peut n´eanmoins engendrer plusieurs solutions, puisqu’une cellule terminale n’est pas forc´ement bloquante.

2.7 Exemples

Traductions On traduit un formalisme calculatoire, et un probl`eme `a r´esoudre vis-`a-vis de ce formalisme, par l’interm´ediaire d’une traduction, comme suit.

Une traduction (eng. relabeling) entre un S1-automate A1 et un S2-auto- mate A2 est donn´ee par un morphisme de mono¨ıde α : S1 → S2 ´etendu en r´e-´etiquetage des transitions deA1en transitions deA2. Il est facile de montrer que|A2|=α(|A1|).

Notez que

App(Σ, M)N

est une traduction de M, α´etant d´efini dans ce cas comme l’extension unique deN en un morphisme du mono¨ıde libreΣ en le mono¨ıde des relations sur son domaine de calcul.

Automates finis non-d´eterministes Un automate fini non d´eterministe (NFA) sur l’alphabet Σ est un Σ-automate A tel que ΦA ⊂ Σ. C’est ce que nous avons appel´e plus haut une machine d’Eilenberg syntaxique. Son comportement

|A|est un langage rationnel surΣ. On traduit un NFA (Q, I, T, δ) en une ma- chine d’EilenbergMqui r´esout le probl`eme du mot (appartenance) comme suit.

D=Σ. La traductionαest d´efinie parα(a) =L−1a =def {(a·w, w)|w∈Σ. On a :||M||={(w·w0, w0)|w∈ |A|, w0 ∈Σ} M est une machine finie. En effet,α(a) est une fonction partielle, donc on a la finitude locale. Une ´etape de calcul est de la forme (d, q)→ρ (d0, q0) avec|d0|=|d| −1 et donc tous les calculs sont finis.

On compl`ete ce noyau par une interfaceD, φ =IdΣ,D+ =B = {0,1},φ+(w) = 1ssi w=. On a bienρ(w) = 1 ssi w∈ |A|.

Notez que si l’automate est d´eterministe alors la machine associ´ee l’est aussi.

Transducteurs rationnels SoientΣ et Γ deux alphabets finis. Un transduc- teurΣ⇒Γ est unM-automate avecM =Σ×Γ (mono¨ıde non libre, produit terme `a terme). On prendΦA ⊂(Σ×)∪(×Γ). |A|d´efinit unerelation ra- tionnelle. On donne des traductions enM-machines pour r´esoudre 3 probl`emes:

1. Appartenance. Donn´e (w, w0)∈M. D´ecider si (w, w0)∈ |A|.

2. Synth`ese. Donn´ew∈Σ. Calculer l’image|A|(w)⊂Γ.

3. Analyse. Donn´ew∈Γ. Calculer l’image inverse|A−1|(w)⊂Σ

Appartenance. La traduction α est d´efinie par α(σ, ) = L−1σ ×IdΓ et α(, γ) =IdΣ×L−1γ . Comme pour les automates on a une machine finie, puisque

(7)

VII le long d’une transition le couple des longueurs d´ecroˆıt. On prend comme inter- faceD×Γ=IdΣ×Γ, D+=B,φ+(w, w0) = 1ssi w=w0=.

Synth`ese. La traductionαest d´efinie parα(σ, ) =L−1σ ×IdΓ et α(, γ) = IdΣ ×Rγ, avec Rγ =def {(w, w·γ) | w ∈ Γ}. On compl`ete par l’interface D = Σ, φ = {(w,(w, )) | w ∈ Σ}, φ+ = {(, w0), w0) | w0 ∈ Γ}. On a |A| = φ ◦ ||M|| ◦φ+. Une telle machine est localement finie trivialement.

Mais la machine n’est pas forc´ement Nœth´erienne, il peut y avoir des cycles de transitions ´etiquet´es avec des actions (, w). C’est d’ailleurs la seule mani`ere d’avoir des calculs infinis, et la machine est nœth´erienne si et seulement si il n’y a pas de tels cycles, si et seulement si l’ensemble |A|(w) est fini pour tout w∈Σ [7].

Analyse. Sym´etrique de la synth`ese, en rempla¸cant L−1σ par Rσ et Rγ par L−1γ .

Machines oracles Soit un ensemble D arbitraire, et un pr´edicat P sur D.

On consid`ere la relationρ sur D d´efinie comme la restriction de l’identit´e aux

´

el´ements v´erifiant P: ρ(d) ={d} si (d), ρ(d) =∅ sinon. On d´efinit de mani`ere canonique la machine d’Eilenberg dont l’automate sous-jacent A a deux ´etats Q ={0,1} avec I ={0} et T ={1}, la fonction de transition δ´etant d´efinie parδ(0) ={(ρ,1)} etδ(0) =∅. Cette machine est une machine finie localement d´eterministe, qui sait d´ecider en un pas de calcul de l’appartenance `aP. Notre re- striction des machines d’Eilenberg `a des relations calculables limite ces oracles `a des pr´edicats r´ecursifs, mais d’une complexit´e arbitraire. Plus g´en´eralement, nos machines d’Eilenberg savent ´enum´erer des ensembles r´ecursivement ´enum´erables arbitraires, et ont donc la puissance des machines de Turing.

3 Moteurs r´ eactifs terminaux

On peut simuler les ex´ecutions d’une machine d’Eilenberg finie en adaptant la notion de moteur r´eactifde la biblioth`eque Zen [2–4, 7].

3.1 Impl´ementation des relations calculables par projection en des g´en´erateurs de flux

L’id´ee est de “Currifier” une relation binaire sur D (classiquement un sous- ensemble deD×D) en une fonction deD dans une partie de D´enum´er´ee par une s´equence d’´el´ements deDrepr´esent´ee par un flˆot calculable progressivement.

type s t r e a m ’ d a t a = [ Void

| Stream o f ’ d a t a and d e l a y ’ d a t a ]

and d e l a y ’ d a t a = u n i t → s t r e a m ’ d a t a ; (∗ f r o z e n s t r e a m ∗) type r e l a t i o n ’ d a t a = ’ d a t a → s t r e a m ’ d a t a ;

(8)

VIII

3.2 Noyau de machines d’Eilenberg calculables

On axiomatise le graphe de transitions de l’automate sous-jacent par une liste d’adjacence. Voici l’interface ML d´efinissant le noyau de machines d’Eilenberg calculables (EMK=Eilenberg machines kernel).

module type EMK = s i g type d a t a ;

type s t a t e ; type g e n e r a t o r ;

value t r a n s i t i o n : s t a t e → l i s t ( g e n e r a t o r × s t a t e ) ; value i n i t i a l : l i s t s t a t e ;

value a c c e p t : s t a t e → b o o l ;

value s e m a n t i c s : g e n e r a t o r → r e l a t i o n d a t a ; end;

3.3 Moteur r´eactif simulant une machine en profondeur d’abord Nous donnons maintenant un simulateur de machines d’Eilenberg, fonction- nant en profondeur d’abord. L’avantage en est que les appels r´ecursifs sont terminaux, et sont compil´es en de simples boucles, ne n´ecessitant pas d’espace d’empilage. L’inconv´enient est que le simulateur peut ne pas terminer et donc ne pas ´enum´erer toutes les solutions.

module Engine ( Machine : EMK) = s t r u c t open Machine ;

type c h o i c e = l i s t ( g e n e r a t o r × s t a t e ) ;

(∗ We s t a c k b a c k t r a c k c h o i c e p o i n t s i n a r e s u m p t i o n ∗) type b a c k t r a c k =

[ React o f d a t a and s t a t e

| Choose o f d a t a and c h o i c e and d e l a y d a t a and s t a t e ]

and r e s u m p t i o n = l i s t b a c k t r a c k ;

(∗ The 3 i n t e r n a l l o o p s o f t h e d e p t h−f i r s t s e a r c h r e a c t i v e e n g i n e ∗) (∗ r e a c t : d a t a → s t a t e → r e s u m p t i o n → s t r e a m d a t a ∗)

value rec r e a c t d q r e s = l e t ch = t r a n s i t i o n q in

(∗ we need t o compute [ c h o o s e d ch r e s ] b u t f i r s t

we d e l i v e r d a t a [ d ] t o t h e s t r e a m o f s o l u t i o n s when [ q ] i s a c c e p t i n g ∗) i f a c c e p t q

then Stream d (fun ( ) → c h o o s e d ch r e s ) (∗ S o l u t i o n d f o u n d ∗) e l s e c h o o s e d ch r e s

(9)

IX (∗ c h o o s e : d a t a → c h o i c e → r e s u m p t i o n → s t r e a m d a t a ∗) and c h o o s e d ch r e s =

match ch with [ [ ] → resume r e s

| [ ( g , q ’ ) : : r e s t ] → match s e m a n t i c s g d with [ Void → c h o o s e d r e s t r e s

| Stream d ’ d e l → r e a c t d ’ q ’ [ Choose d r e s t d e l q ’ : : r e s ] ]

]

(∗ The s c h e d u l e r w h i c h b a c k t r a c k s i n d e p t h−f i r s t e x p l o r a t i o n ∗) (∗ resume : r e s u m p t i o n → s t r e a m d a t a ∗)

and resume r e s = match r e s with

[ [ ] → Void

| [ React d q : : r e s t ] → r e a c t d q r e s t

| [ Choose d ch d e l q ’ : : r e s t ] →

match d e l ( ) with (∗ we u n f r e e z e t h e d e l a y e d s t r e a m o f s o l u t i o n s ∗) [ Void → c h o o s e d ch r e s t (∗ f i n a l l y we l o o k f o r n e x t p e n d i n g c h o i c e ∗)

| Stream d ’ d e l ’ → r e a c t d ’ q ’ [ Choose d ch d e l ’ q ’ : : r e s t ] ]

]

;

(∗ Note t h a t t h e r e c u r s i o n s a r e j u s t l o o p s , s i n c e t h e r e c u r s i v e c a l l s a r e t e r m i n a l ∗) (∗ S i m u l a t i n g t h e c h a r a c t e r i s t i c r e l a t i o n : r e l a t i o n d a t a ∗)

value s i m u l a t i o n d = l e t rec i n i t r e s l a c c =

match l with [ [ ] → a c c

| [ q : : r e s t ] → i n i t r e s r e s t [ React d q : : a c c ] ] in

resume ( i n i t r e s i n i t i a l [ ] )

;

end; (∗ module Engine ∗)

Ce moteur, inspir´e du moteur r´eactif de la biblioth`eque Zen [2, 3], a ´et´e g´en´eralis´e aux machines d’Eilenberg finies par Benoˆıt Razet [7].

La fonction de simulation ´etant de type (relation data), on peut la r´e-injecter comme s´emantique d’une machine d’Eilenberg compos´ee, ce qui ouvre la voie `a la construction modulaire de machines complexes. Ceci est expliqu´e dans [4], et une impl´ementation concr`ete en est mise en œuvre dans le segmenteur de Sanskrit disponible `ahttp://sanskrit.inria.fr.

(10)

X

3.4 Certification du moteur r´eactif et preuve de compl´etude

Benoˆıt Razet a montr´e comment utiliser l’assistant de preuves Coq pour ax- iomatiser les machines d’Eilenberg finies, faire la preuve de compl´etude du mo- teur r´eactif terminal, extraire le programme ML automatiquement `a partir de la preuve formelle, et ainsi certifier la m´ethodologie. Ce d´eveloppement est pr´esent´e en [8].

4 Un moteur r´ eactif g´ en´ eral, dirig´ e par une strat´ egie

Le moteur r´eactif terminal est bien adapt´e aux machines finies, puisqu’il ´enum`ere compl`etement tous les calculs, avec un bon comportement algorithmique. Mais il ne se prˆete pas `a la simulation de machines non finies. Notamment, lorsqu’il existe un g´en´erateurg s’interpr´etant dans la s´emantique par une relation ρ telle que pour une donn´eedil existe une infinit´e de valeursd0images dedparρ, alors si la machine arrive dans une configuration de cellule (d, q) telle qu’il existe unq0avec (ρ, q0)∈δ(q), alors la simulation de cette transition provoquera un bouclage de la fonctionchoose, par parcours du flux de donn´eesd0 correspondant. Et mˆeme si les relations intervenant dans le calcul sont toutes fonctionnelles, il existe le risque de boucler en d´eroulant un calcul infini sans laisser leur chance aux autres calculs potentiels. Ce ph´enom`ene est bien connu des programmeurs Prolog, dont l’´evaluateur standard proc`ede en profondeur d’abord, et n’est donc pas complet pour l’´enum´eration de toutes les preuves possibles.

Notons que dans le cas d’une machine finie, pour une donn´ee d il n’existe qu’un nombre fini de valeursd0 images dedparρ. On pourrait donc repr´esenter cet ensemble de valeurs par une liste, plutˆot que par un flˆot. Mais alors on ne pourrait pas obtenir la modularit´e, la relation caract´eristique d’une machine

´

etant exprim´ee par le flˆot des solutions `a partir d’une donn´ee initiale. Cette architecture permet de faire des calculs par n´ecessit´e, et d’arrˆeter les calculs d`es qu’une valeur de sortie ob´eit `a un crit`ere d’arrˆet.

On d´efinit maintenant un moteur r´eactif g´en´eral, dirig´e par une strat´egie, permettant de s´electionner la succession des calculs d’une mani`ere ´equitable.

L’auteur en est Benoˆıt Razet.

L’id´ee principale est de remplacer la continuation (resumption) impl´ement´ee comme liste de valeurs de backtrack par une pile, g´er´ee par un module param`etre Resumptionde la strat´egie repr´esent´ee par un foncteur. La signature de ce mod- ule param`etre est compos´ee des op´erations d’une pile abstraite.

open E i l e n b e r g ;

module Engine ( Machine : EMK) = s t r u c t open Machine ;

type c h o i c e = l i s t ( g e n e r a t o r × s t a t e ) ;

(∗ Now we s e p a r a t e t h e c o n t r o l c h o i c e s and t h e d a t a r e l a t i o n c h o i c e s ∗)

(11)

XI type b a c k t r a c k =

[ React o f d a t a and s t a t e

| Choose o f d a t a and c h o i c e

| R e l a t e o f s t r e a m d a t a and s t a t e ]

;

(∗ Now r e s u m p t i o n i s an a b s t r a c t d a t a t y p e , g i v e n i n module Resumption argument t o t h e S t r a t e g y f u n c t o r , g e n e r a l i z i n g a b a c k t r a c k s t a c k ∗) module S t r a t e g y (∗ r e s u m p t i o n management ∗)

( Resumption : s i g type r e s u m p t i o n ;

value empty : r e s u m p t i o n ;

value pop : r e s u m p t i o n → o p t i o n ( b a c k t r a c k × r e s u m p t i o n ) ; value push : b a c k t r a c k → r e s u m p t i o n → r e s u m p t i o n ;

end) = s t r u c t

open Resumption ;

(∗ The g e n e r i c r e a c t i v e e n g i n e , u s i n g an e x p l o r a t i o n s t r a t e g y ∗) (∗ r e a c t : d a t a → s t a t e → r e s u m p t i o n → s t r e a m d a t a ∗)

value rec r e a c t d q r e s = l e t ch = t r a n s i t i o n q in i f a c c e p t q

then Stream d (fun ( ) → resume ( push ( Choose d ch ) r e s ) ) (∗ S o l u t i o n d f o u n d ∗) e l s e resume ( push ( Choose d ch ) r e s )

(∗ c h o o s e : d a t a → c h o i c e → r e s u m p t i o n → s t r e a m d a t a ∗) and c h o o s e d ch r e s =

match ch with [ [ ] → resume r e s

| [ ( g , q ’ ) : : r e s t ] →

l e t r e s ’ = push ( Choose d r e s t ) r e s in r e l a t e ( s e m a n t i c s g d ) q ’ r e s ’

]

(∗ r e l a t e : s t r e a m d a t a → s t a t e → r e s u m p t i o n → s t r e a m d a t a ∗) and r e l a t e s t r q r e s =

match s t r with [ Void → resume r e s

| Stream d d e l → l e t s t r = d e l ( ) in

resume ( push ( React d q ) ( push ( R e l a t e s t r q ) r e s ) ) ]

(12)

XII

(∗ resume : r e s u m p t i o n → s t r e a m d a t a ∗) and resume r e s =

match pop r e s with [ None → Void

| Some ( b , r e s t ) → match b with

[ React d q → r e a c t d q r e s t

| Choose d ch → c h o o s e d ch r e s t

| R e l a t e s t r q → r e l a t e s t r q r e s t ]

]

;

(∗ c h a r a c t e r i s t i c r e l a t i o n : r e l a t i o n d a t a ∗) value s i m u l a t i o n d =

l e t rec i n i t r e s l a c c = match l with

[ [ ] → a c c

| [ q : : r e s t ] → i n i t r e s r e s t ( push ( React d q ) a c c ) ] in

resume ( i n i t r e s i n i t i a l empty )

;

end; (∗ module S t r a t e g y ∗)

4.1 Quelques strat´egies typiques

Nous donnons dans cette section quelques impl´ementations de strat´egies usuelles.

On retrouve le moteur terminal avec la strat´egie Terminal. On donne ensuite une strat´egie appropri´ee aux machines s´equentielles, et une strat´egie ´equitable avec une pile `a priorit´e garantissant que tout point de backtrack enregistr´e sera ultimement trait´e - pourvu que les s´emantiques soient totales, c’est-`a-dire que pour tout g´en´erateurg, la fonctionsemantics(g) soit une fonction totale sur le domaine des valeursdcalcul´ees.

(∗ Terminal s t r a t e g y module ( a d e q u a t e f o r F i n i t e E i l e n b e r g Machines ) ∗) module T e rm in al = s t r u c t

type r e s u m p t i o n = l i s t b a c k t r a c k ; value empty = [ ] ;

value push b r e s = [ b : : r e s ] ; value pop r e s =

match r e s with [ [ ] → None

| [ b : : r e s t ] → Some ( b , r e s t ) ] ;

(13)

XIII

end; (∗ module Terminal ∗)

(∗ S e q u e n t i a l module f o r s e q u e n t i a l machines ∗) module S e q u e n t i a l = s t r u c t

type r e s u m p t i o n = l i s t b a c k t r a c k ; value empty = [ ] ;

value push b r e s = match b with

[ React → [ b : : r e s ]

| Choose → [ b ] (∗ c u t : t h e l i s t c o n t a i n s o n l y one e l e m e n t ∗)

| R e l a t e → r e s (∗ no o t h e r d e l a y ∗) ] ;

value pop r e s = match r e s with

[ [ ] → None

| [ b : : r e s t ] → Some ( b , r e s t ) ] ;

end; (∗ module S e q u e n t i a l ∗)

(∗ A module f o r g e n e r a l E i l e n b e r g machines w i t h f a i r s i m u l a t i o n ∗) (∗ F a i r n e s s i s i n s u r e d by Razet ’ a l t e r n a t i o n w e a v e r ∗)

module F a i r = s t r u c t

type r e s u m p t i o n = ( l i s t b a c k t r a c k × l i s t b a c k t r a c k ) ; value empty = ( [ ] , [ ] ) ;

value push b r e s =

l e t ( l e f t , r i g h t ) = r e s in ( l e f t , [ b : : r i g h t ] )

;

value pop r e s =

l e t ( l e f t , r i g h t ) = r e s in match l e f t with

[ [ ] → match r i g h t with [ [ ] → None

| [ r : : r r e s t ] → Some ( r , ( r r e s t , [ ] ) ) ]

| [ l : : l r e s t ] → Some ( l , ( l r e s t , r i g h t ) ) ]

;

end; (∗ module F a i r ∗)

module FEM = S t r a t e g y T e rm i nal ; (∗ S i m i l a r t o E i l e n b e r g . Engine ∗)

module S e q u e n t i a l E n g i n e = S t r a t e g y S e q u e n t i a l ; (∗ The s e q u e n t i a l e n g i n e ∗) module C o m p l e t e E n g i n e = S t r a t e g y F a i r ; (∗ The f a i r e n g i n e ∗)

(14)

XIV

end; (∗ module Engine ∗)

Nous avons maintenant fini de d´efinir le moteur r´eactif g´en´eral, et ses strat´egies typiques Terminal, Sequential et Fair.

4.2 Exemple

Donnons un exemple d’utilisation, pour engendrer le langage r´egulier(a(bc)*ba)*.

(∗ A t o y t r a n s i t i o n g r a p h f o r l a n g u a g e L=(a ( b c )∗ba )∗ ∗) value graph = fun

[ 1 → [ ( ’ a ’ , 2 ) ]

| 2 → [ ( ’ b ’ , 3 ) ]

| 3 → [ ( ’ a ’ , 1 ) ; ( ’ c ’ , 2 ) ]

| → a s s e r t F a l s e ]

;

value d e l a y e o s = fun ( ) → Void ;

value u n i t s t r e a m x = Stream x d e l a y e o s ; module AutoGen = s t r u c t

type d a t a = l i s t c h a r ; type s t a t e = i n t ; type g e n e r a t o r = c h a r ; value t r a n s i t i o n = graph ; value i n i t i a l = [ 1 ] ; value a c c e p t i = ( i = 1 ) ;

value s e m a n t i c s c t a p e = u n i t s t r e a m [ c : : t a p e ]

;

end; (∗ AutoGen ∗)

module AutoGen2 = s t r u c t

type d a t a = ( l i s t c h a r × i n t ) ; (∗ s t r i n g w i t h c r e d i t bound ∗) type s t a t e = i n t ;

type g e n e r a t o r = c h a r ; value t r a n s i t i o n = graph ; value i n i t i a l = [ 1 ] ; value a c c e p t i = ( i = 1 ) ; value s e m a n t i c s c ( tape , n ) =

i f n <= 0 then Void

e l s e u n i t s t r e a m ( [ c : : t a p e ] , n−1)

;

end; (∗ AutoGen2 ∗)

module WordGen = Engine AutoGen ; module WordGen2 = Engine AutoGen2 ;

(15)

XV

(∗ S e r v i c e f u n c t i o n s on c h a r a c t e r s t r e a m s f o r t e s t i n g ∗) (∗ p r i n t c h a r l i s t ∗)

value p r i n t c l l = l e t rec aux l =

match l with [ [ ] → ( )

| [ c : : r e s t ] → l e t ( ) = p r i n t c h a r c in aux r e s t ] in

do { aux l ; p r i n t s t r i n g ”\n” }

;

value i t e r s t r e a m f s t r = l e t rec aux s t r =

match s t r with [ Void → ( )

| Stream v d e l → l e t ( ) = f v in aux ( d e l ( ) ) ] in

aux s t r

;

value p r i n t c l 2 ( tape , ) = p r i n t c l t a p e

;

value c u t s t r n = l e t rec aux i s t r =

i f i ≥ n then Void e l s e

match s t r with [ Void → Void

| Stream v d e l → Stream v (fun ( ) → aux ( i +1) ( d e l ( ) ) ) ] in

aux 0 s t r

;

(∗ C a u t i o n : i t g e n e r a t e s t h e m i r r o r image o f words i n L ∗) p r i n t s t r i n g ” F i r s t 10 words i n ˜L g e n e r a t e d depth−f i r s t ” ; i t e r s t r e a m p r i n t c l ( c u t ( WordGen .FEM. s i m u l a t i o n [ ] ) 1 0 ) ;

p r i n t s t r i n g ” F i r s t 10 words i n ˜L g e n e r a t e d depth−f i r s t s e q u e n t i a l l y ” ; i t e r s t r e a m p r i n t c l ( c u t ( WordGen . S e q u e n t i a l E n g i n e . s i m u l a t i o n [ ] ) 1 0 ) ; p r i n t s t r i n g ” A l l words i n ˜L o f l e n g t h bounded by 12 ” ;

i t e r s t r e a m p r i n t c l 2 ( WordGen2 .FEM. s i m u l a t i o n ( [ ] , 1 2 ) ) ;

p r i n t s t r i n g ” F i r s t 50 words i n ˜L i n a c o m p l e t e e n u m e r a t i o n ” ;

i t e r s t r e a m p r i n t c l ( c u t ( WordGen . C o m p l e t e E n g i n e . s i m u l a t i o n [ ] ) 5 0 ) ;

(16)

XVI

5 Machines progressives

Nous avons pr´esent´e une strat´egie ´equitable Fair permettant de garantir une exploration compl`ete de l’espace de recherche des calculs. Une premi`ere remarque est qu’il existe de nombreuses strat´egies ´equitables, garantissant que tout point de choix (backtrack) empil´e dans la simulation est ultimement d´epil´e et trait´e.

On peut alors prouver la compl´etude de la simulation, pourvu que tous les calculs sur les donn´ees terminent, c’est `a dire que pour toute valeur datteinte par un calcul, et pour tout g´en´erateurg, la fonctionsemantics g dtermine. Autrement dit, la relationρg associ´ee `agest calculable progressivement, au sens o`u il existe une fonction r´ecursive (totale) ´enum´erant l’ensembleρg(d). Le domaine de cette fonction est un segment initial deN, possiblement infini. Ceci est une restriction

`

a la calculabilit´e, car dans le cas g´en´eral ρg(d) sera seulement r´ecursivement

´

enum´erable, et donc le co-domaine d’une fonction partielle r´ecursive, mais en g´en´eral on ne saura pas d´ecider si cet ensemble est vide.

Ceci nous am`ene `a d´efinir la notion de machine d’Eilenberg progressive, dont la relation caract´eristique est calculable progressivement. Les machines d’Eilenberg progressives peuvent ˆetre compos´ees modulairement, et simul´ees compl`etement par toute strat´egie ´equitable. Alors qu’une machine peut ne pas ˆ

etre progressive, par exemple par une boucle dans le contrˆole ne produisant pas de valeur en un ´etat acceptant.

La notion cl´e est de remplacer les flˆots synchrones par des flˆots asynchrones, qui vont entrelacer les calculs pour ne pas s’obstiner `a effectuer un calcul possi- blement non terminant.

5.1 Flˆots asynchrones type a s t r e a m ’ d a t a =

[ Void

| Tick o f d e l a y ’ d a t a

| Astream o f ’ d a t a and d e l a y ’ d a t a ]

and d e l a y ’ d a t a = u n i t → a s t r e a m ’ d a t a ; (∗ f r o z e n a s t r e a m ∗) type r e l a t i o n ’ d a t a = ’ d a t a → a s t r e a m ’ d a t a ;

5.2 Machines asynchrones

La signature d’un noyau de machine ne change pas, sauf que les relations sont maintenant asynchrones:

module type EMK = s i g type d a t a ;

type s t a t e ; type g e n e r a t o r ;

value t r a n s i t i o n : s t a t e → l i s t ( g e n e r a t o r × s t a t e ) ; value i n i t i a l : l i s t s t a t e ;

(17)

XVII value a c c e p t : s t a t e → b o o l ;

value s e m a n t i c s : g e n e r a t o r → r e l a t i o n d a t a ; end;

5.3 Moteur r´eactif asynchrone avec strat´egie

Maintenant, la strat´egie doit signaler si le calcul doit se poursuivre ou faire une pause.

type s i g n a l ’ c o n t = [ Wait o f ’ c o n t

| Go o f ’ c o n t ]

Voici maintenant le moteur asynchrone.

module Engine ( Machine : EMK) = s t r u c t open Machine ;

type c h o i c e = l i s t ( g e n e r a t o r × s t a t e ) ;

(∗ We s e p a r a t e t h e c o n t r o l c h o i c e s and t h e d a t a r e l a t i o n c h o i c e s ∗) type b a c k t r a c k =

[ React o f d a t a and s t a t e

| Choose o f d a t a and c h o i c e

| R e l a t e o f a s t r e a m d a t a and s t a t e ]

;

module S t r a t e g y (∗ r e s u m p t i o n management ∗) ( Resumption : s i g

type r e s u m p t i o n ;

value empty : r e s u m p t i o n ;

value pop : r e s u m p t i o n → o p t i o n ( s i g n a l ( b a c k t r a c k × r e s u m p t i o n ) ) ; value push : b a c k t r a c k → r e s u m p t i o n → r e s u m p t i o n ;

end) = s t r u c t

open Resumption ;

(∗ The g e n e r i c r e a c t i v e e n g i n e , u s i n g an e x p l o r a t i o n s t r a t e g y ∗) (∗ r e a c t : d a t a → s t a t e → r e s u m p t i o n → a s t r e a m d a t a ∗)

value rec r e a c t d q r e s = l e t ch = t r a n s i t i o n q in i f a c c e p t q

then Astream d (fun ( ) → resume ( push ( Choose d ch ) r e s ) ) (∗ S o l u t i o n d f o u n d ∗) e l s e resume ( push ( Choose d ch ) r e s )

(18)

XVIII

(∗ c h o o s e : d a t a → c h o i c e → r e s u m p t i o n → a s t r e a m d a t a ∗) and c h o o s e d ch r e s =

match ch with [ [ ] → resume r e s

| [ ( g , q ’ ) : : r e s t ] →

l e t r e s ’ = push ( Choose d r e s t ) r e s in r e l a t e ( s e m a n t i c s g d ) q ’ r e s ’

]

(∗ r e l a t e : a s t r e a m d a t a → s t a t e → r e s u m p t i o n → a s t r e a m d a t a ∗) and r e l a t e s t r q r e s =

match s t r with [ Void → resume r e s

| Tick d e l → l e t s t r = d e l ( ) in

resume ( push ( R e l a t e s t r q ) r e s )

| Astream d d e l → l e t s t r = d e l ( ) in

resume ( push ( React d q ) ( push ( R e l a t e s t r q ) r e s ) ) ]

(∗ resume : r e s u m p t i o n → a s t r e a m d a t a ∗) and resume r e s =

match pop r e s with [ None → Void

| Some c →

l e t d i s p a t c h b r e s t = match b with

[ React d q → r e a c t d q r e s t

| Choose d ch → c h o o s e d ch r e s t

| R e l a t e s t r q → r e l a t e s t r q r e s t ] in

match c with

[ Wait ( b , r e s t ) → Tick (fun ( ) → d i s p a t c h b r e s t )

| Go ( b , r e s t ) → d i s p a t c h b r e s t ]

]

;

(∗ c h a r a c t e r i s t i c r e l a t i o n : r e l a t i o n d a t a ∗) value s i m u l a t i o n d =

l e t rec i n i t r e s l a c c = match l with

[ [ ] → a c c

| [ q : : r e s t ] → i n i t r e s r e s t ( push ( React d q ) a c c ) ] in

(19)

XIX resume ( i n i t r e s i n i t i a l empty )

;

end; (∗ module S t r a t e g y ∗)

5.4 Les strat´egies

(∗ Terminal d e p t h f i r s t s t r a t e g y module ( a d e q u a t e f o r F i n i t e E i l e n b e r g Machines ) ∗) module T e rm in al = s t r u c t

type r e s u m p t i o n = l i s t b a c k t r a c k ; value empty = [ ] ;

value push b r e s = [ b : : r e s ] ; value pop r e s =

match r e s with [ [ ] → None

| [ b : : r e s t ] → Some (Go ( b , r e s t ) ) ] ;

end; (∗ module Terminal ∗)

(∗ S e q u e n t i a l module f o r s e q u e n t i a l machines ∗) module S e q u e n t i a l = s t r u c t

type r e s u m p t i o n = l i s t b a c k t r a c k ; value empty = [ ] ;

value push b r e s = match b with

[ React → [ b : : r e s ]

| Choose → [ b ] (∗ c u t : t h e l i s t c o n t a i n s o n l y one e l e m e n t ∗)

| R e l a t e → r e s (∗ no o t h e r d e l a y ∗) ] ;

value pop r e s = match r e s with

[ [ ] → None

| [ b : : r e s t ] → Some (Go ( b , r e s t ) ) ] ;

end; (∗ module S e q u e n t i a l ∗)

(∗ A module f o r g e n e r a l E i l e n b e r g machines w i t h f a i r s i m u l a t i o n ∗) (∗ F a i r n e s s i s i n s u r e d by Razet ’ a l t e r n a t i o n w e a v e r ∗)

(∗ T h i s s t r a t e g y s c a l e s t o m o d u l a r i t y b e c a u s e i t i s a ” p r o d u c t i v e ” f u n c t i o n i n t h e s e n s e o f t h e c o i n d u c t i v e c o n s t r u c t i o n o f Coq ∗)

module F a i r = s t r u c t

type r e s u m p t i o n = ( l i s t b a c k t r a c k × l i s t b a c k t r a c k ) ; value empty = ( [ ] , [ ] ) ;

value push b r e s =

l e t ( l e f t , r i g h t ) = r e s in

(20)

XX

( l e f t , [ b : : r i g h t ] )

;

value pop r e s =

l e t ( l e f t , r i g h t ) = r e s in match l e f t with

[ [ ] → match r i g h t with [ [ ] → None

| [ r : : r r e s t ] → Some ( Wait ( r , ( r r e s t , [ ] ) ) ) ]

| [ l : : l r e s t ] → Some ( Wait ( l , ( l r e s t , r i g h t ) ) ) ]

;

end; (∗ module F a i r ∗)

module FEM = S t r a t e g y T e rm i nal ; (∗ S i m i l a r t o E i l e n b e r g . Engine ∗)

module S e q u e n t i a l E n g i n e = S t r a t e g y S e q u e n t i a l ; (∗ The s e q u e n t i a l e n g i n e ∗) module C o m p l e t e E n g i n e = S t r a t e g y F a i r ; (∗ The f a i r e n g i n e ∗)

end; (∗ module Engine ∗)

References

1. S. Eilenberg. Automata, Languages, and Machines, volume A. Academic Press, 1974.

2. G. Huet. The Zen computational linguistics toolkit: Lexicon structures and morphol- ogy computations using a modular functional programming language. InTutorial, Language Engineering Conference LEC’2002, 2002.

3. G. Huet. A functional toolkit for morphological and phonological processing, ap- plication to a Sanskrit tagger. J. Functional Programming, 15,4:573–614, 2005.

http://yquem.inria.fr/huet/PUBLIC/tagger.pdf.

4. G. Huet and B. Razet. The reactive engine for modular transducers. In K. Futatsugi, J.-P. Jouannaud, and J. Meseguer, editors, Algebra, Meaning and Computation, Essays Dedicated to Joseph A. Goguen on the Occasion of His 65th Birthday, pages 355–374. Springer-Verlag LNCS vol. 4060, 2006. http://yquem.inria.fr/huet/

PUBLIC/engine.pdf

5. D. Kozen. A completeness theorem for Kleene algebras and the algebra of regular events. Information and Computation, 110:366–390, 1994.

6. V. Pratt. Action logic and pure induction. In Workshop on Logics in Artificial Intelligence. Springer-Verlag LNCS vol. 478, 1991.

7. B. Razet. Finite Eilenberg machines. In O. Ibarra and B. Ravikumar, editors, Proceedings of CIIA 2008, pages 242–251. Springer-Verlag LNCS vol. 5148, 2008.

http://gallium.inria.fr/razet/fem.pdf

8. B. Razet. Simulating finite Eilenberg machines with a reactive engine. InProceedings of MSFP 2008. Electric Notes in Theoretical Computer Science, 2008. http://

gallium.inria.fr/razet/PDF/razet msfp08.pdf

Références

Documents relatifs

Ainsi, le taux d’utilisation du glu- cose est diminué à partir de l’âge de 60 ans (3) ; l’activité physique aérobie améliore la sensibilité à l’insuline et les

Elle est d’autant plus importante que la masse de la charge est grande et s’oppose à la mise en mouvement. Elle est caractérisée par le moment d’inertie J, qui s’exprime en

Ils sont ensuite émis sans vitesse par la source S, puis accélérés par un champ électrostatique uniforme qui règne entre S et P tel que.. U sp

• On considère une roue de rayon R et dʼaxe OOʼ horizontal ; cette roue roule sans glisser sur un plan horizontal, et OOʼ (de longueur ρ ) tourne autour de lʼaxe Az

Dans cette question, toute trace de recherche, même incomplète, ou d’initiative non fructueuse, sera prise en compte dans l’évaluation... Déterminer la fonction dérivée de f

[r]

Montrer que les points A, B et C ne sont pas alignés. b) Donner une équation cartésienne du plan (ABC).. En préciser les

[r]