• Aucun résultat trouvé

Avant de commencer l’étude des machines à l’ADN en tant que telle, on doit d’abord se munir de quelques outils de base. En particulier, il sera utile de se définir un langage, qui nous permettra de traduire les problèmes mathématiques que nous devrons résoudre en quelque chose de “compréhensible” en termes des chaînes d’ADN et de leurs opérations biologiques associées.

Pour ce faire, nous exposerons la théorie du langage classique, qui est à la base des sciences informatiques modernes, et nous l’adapterons graduellement au cas spécifique de l’ADN.

Au départ, on doit se munir d’un alphabet X, constitué d’un ensemble de symboles. Par exemple, dans le cas de l’ADN, l’alphabet sera constitué des quatre bases azotées. Nous aurons donc que X = {A, C, G, T}.

Cet alphabet peut sembler restrictif, mais rappelons que les ordinateurs conventionnels ne disposent que d’un alphabet de 0 et de 1.

On construit alors des chaînes avec les symboles de cet alphabet, et on définit X* comme l’ensemble des chaînes possibles. Si on considère comme la chaîne “nulle” (ne contenant aucun symbole), on peut construire chacune des chaînes possibles par la concaténation, que l’on définit par récursivité :

1. λ∈X*

2. Si a∈X et cX*⇒caX*

Notons que l’étape 2 ne peut être appliquée qu’un nombre fini de fois à partir de , ce

qui exclut les chaînes infinies.

Définition1 [82] : Pour u∈X, on dit que v est une sous-chaîne de u six, y∈X tels que u = xvy. Si x = , v est un préfixe de u et si y = , v est un suffixe de u.

Dans le cas de l’ADN, X représente donc l’ensemble des chaînes simples d’ADN de

longueur finie pouvant être construites avec les quatre bases azotées ainsi que la chaîne vide.

En principe, on pourrait définir un langage comme tout sous-ensemble de X .

Cependant, ce n’est pas une définition très utilisée, car un langage complètement aléatoire n’est pas assez restrictif pour être efficace. En général, on préfère n’admettre que certaines chaînes répondant à un ensemble de critères précis.

C’est d’ailleurs le concept qu’on utilise intuitivement avec la langue française. En effet, on considère que notre alphabet est composé des 26 lettres minuscules, de leurs 26 majuscules, de l’espace blanc et des signes de ponctuation. Le langage lui-même est constitué de toutes les chaînes qui constituent des phrases complètes. Pour ce faire, il faut donner certaines restrictions au concept de phrase complète (c’est ce qu’on appelle une grammaire). En effet, on ne voudrait pas que la chaîne afgbd fJhrbnd hdgfb, soit un élément de notre langage. Il faut donc programmer dans la grammaire toutes les règles de la langue française : toute phrase débute par une majuscule et se termine par un point, on ne peut avoir qu’un mot défini dans le dictionnaire entre deux espaces blancs, le sujet vient avant le verbe, etc. ...

Pour l’ordinateur à ADN, nous devrons aussi définir un langage muni d’une grammaire restrictive qui corresponde à nos besoins. En effet, dans un ordinateur à l’ADN, on introduit différentes chaînes d’ADN dans une éprouvette (test-tube), et les calculs se font par une série d’opérations biologiques opérées le plus souvent par des enzymes. On veut donc un langage qui ne générera que les chaînes pouvant être créées par ces opérations.

Un des modèles les plus connus de calculs par ordinateur à ADN est celui de l’insertion-délétion [82]. L’idée est d’utiliser des enzymes pour

couper une sous-chaîne d’ADN à un endroit précis (délétion)

insérer une sous chaîne dans une autre à un endroit prescrit (insertion). Mais comment traduire ces opérations biologiques en termes de langage et de grammaire ? Nous avons déjà donné une idée intuitive de ce qu’est une grammaire ci-haut, mais nous poursuivrons en donnant la définition plus rigoureuse, telle qu’elle est utilisée en informatique théorique. Nous pourrons ensuite l’adapter pour modéliser l’insertion-délétion.

Définition2 [82] : Une grammaire générative est un triple ordonné G = (X, A, P) où X est alphabet, A∈X est l axiome et P sont des lois de production (ou tout simplement productions).

Intuitivement, l’axiome représente la chaîne de départ. Dans le cas de l’ADN, l’axiome représente la chaîne introduite au départ dans l’éprouvette avant le début des calculs.

Quant à elles, les productions représentent toutes les modifications que l’on peut faire à la chaîne de départ pour générer toutes les chaînes du langage.

Exemple1 [82] : Dans le modèle d’insertion-délétion qui nous intéresse, nous devrons avoir deux productions : une qui modélise l’insertion et l’autre, la délétion.

Voyons maintenant comment on peut décrire l’insertion et la délétion de manière plus rigoureuse.

Définition3 [82] : Définition rigoureuse de l insertion-délétion :

1. Si x =x1x2est un mot dans X , on peut insérer une chaîne u∈X entre x et1 x ,2 ce qui donne le mot y = x u1 x . On écrit alors que2 xy et on dit que x dérive y par la loi de production de l insertion.

2. Si, au contraire, x =x1ux2 est un mot dans X , on peut retrancher la chaîne u, ce

qui donney=x1x2. On écrit encore une fois xyet on dit que x dérive y par la loi de production de délétion.

On voit donc que xyest la notation générale pour dire que y a été obtenu de x par

une des lois de production. Si y a été obtenu à la suite de plusieurs lois de production

appliquées une après l’autre à x, on utilise la notation x⇒∗y .

Définition4 [82] : Etant donné une grammaire G, on lui associe un langage L (G) avec L (G)=

{

cT A⇒∗c

}

.

Il reste maintenant à adapter la définition de grammaire afin que les productions modélisent bien les opérations d’insertion et de délétion. La grammaire sera donc le quadruplet ID = (X, I, D, A).

Ici, l’alphabet X = {A, G, T, C} contient les quatre bases azotées. A≠λ représente

l’axiome de départ (la chaîne introduite dans l’éprouvette avant le début des opérations). On

aura aussi P =ID où I représente les productions de l’insertion et D, celles de la délétion.

Chaque loi d’insertion est représentée par un triplet(c1,x,c2)I, où x∈X est la chaîne

à insérer et c1,c2∈X représentent le contexte d’insertion. On dit donc que I⊆(X)3.

De même, chaque loi de délétion est représentée par un triplet(c1,x,c2)D, où x∈X

est la chaîne à retrancher et c1,c2∈X sont le contexte de délétion. L’insertion et la délétion

sont représentées dans la Figure 3.1.

Théoriquement, ce modèle est très efficace. En effet, nous prouverons plus loin qu’on peut calculer n’importe quelle fonction récursive et résoudre n’importe quel problème exprimable récursivement en utilisant l’insertion-délétion. Cependant, il est souvent assez difficile de trouver un algorithme pour résoudre des problèmes mathématiques à l’aide d’une suite d’insertions et de délétions.

Pensons par exemple à la multiplication. C’est une fonction toute simple, et pourtant il est difficile d’imaginer un algorithme court qui permettrait de l’effectuer simplement avec l’insertion et la délétion de chaînes d’ADN. En effet, nous savons que c’est possible de trouver un algorithme pour la multiplication et que c’est toujours le cas pour n’importe quelle fonction récursive. Cependant, rien ne nous garantit que cet algorithme sera “beau”.

Il y a aussi un problème d’un autre ordre avec ce modèle théorique. En effet, nous avons supposé qu’il était possible de faire n’importe quelle insertion et n’importe quelle délétion. En d’autres mots, ceci veut dire que nous connaissons tous les enzymes et qu’on peut en placer un nombre illimité dans une éprouvette, où ils agiront sans interférence les uns avec les autres.

Or, on sait très bien que, dans la réalité, notre maîtrise de la biologie est très imparfaite et que nous ne comprenons pas assez bien l’action des enzymes pour pouvoir opérer n’importe quelle insertion ou n’importe quelle délétion permise par la théorie.

Documents relatifs