Notes sur le cours sur les automates - 1° partie, Notes de Applications informatiques
Francine88
Francine8813 January 2014

Notes sur le cours sur les automates - 1° partie, Notes de Applications informatiques

PDF (328.3 KB)
10 pages
97Numéro de visites
Description
Notes d'informatique sur le cours sur les automates - 1° partie. Les principaux thèmes abordés sont les suivants: les automates, la mise en perspective, la machine de von neumann, la machine de turing, la hiérarchie de ...
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document
Aperçu3 pages / 10
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Aperçu avant impression terminé
Chercher dans l'extrait du document

LES AUTOMATES

Le propos de ce chapitre est d'étudier le fonctionnement théorique du concept ordinateur, ou

machine. Nous nous situons ici au niveau des mathématiques et de la logique mathématique,

indépendamment de toute référence à une machine (ou un logiciel) concrète existant. Nous

nous pencherons sur la façon dont cette machine théorique va prendre connaissance de

données numériques, de quelque nature qu'elles soient, pour en effectuer un traitement, en vue

de résoudre un problème d'ordre général. Nous serons alors amenés à constater que, de ce

point de vue, toute machine théorique est réductible, dans son principe de fonctionnement, à

une machine idéale. Ainsi, nous pouvons dire que tous les ordinateurs, ou tous les

programmes, sont équivalents entre eux, puisque le propre d'un ordinateur, dans sa définition

théorique, est l'universalité, c'est-à-dire la capacité à traiter tous les problèmes traitables

effectivement.

Remarque: Ce chapitre aurait normalement sa place en tout premier de la section d'informatique

théorique mais il nous a semblé plus judicieux de se faire au préalable la main sur des exemples concrets

de l'informatique théorique avant de passer au formalisme abstrait de leurs exécutions. C'est une des

raisons pour lesquelles nous reviendrons ici brièvement sur les concepts d'algorithmes, de complexité,

de systèmes logiques formels, de théorie de la démonstration et de l'information (voir les chapitres du

même nom). Par ailleurs, pour ce chapitre, une expérience dans le développement de logiciels

informatiques est un grand plus pour comprendre certaines notions (ou pour s'imaginer les applications

pratiques).

Avant de commencer, il convient de faire un tour d'horizon très sommaire des questions mises

en jeu par ces premiers mots. Mais d'abord citons quelques domaines où la théorie du langage

et les automates sont utilisés : spécification des langages de programmation, compilation,

recherche de motifs (dans un texte, dans une base de données, sur le web, dans les gènes, ...),

compression de textes, preuves de programmes, électronique des ordinateurs, codage pour la

transmission, cryptographie, décodage du génôme, linguistique, sciences cognitives, etc.

MISE EN PERSPECTIVE L'informatique moderne est née de la recherche entreprise au début du 20ème siècle par

Bertrand Russel et Alfred North Whitehead pour constituer les mathématiques en un système

formel où toute proposition pourrait être démontrée par un calcul logique (cf. chapitre de

Théorie De La Démonstration). David Hilbert et Kurt Gödel accomplirent des pas décisifs dans

l'exploration de ce programme. En 1931, Gödel démontre que (rappel) :

1. Il se peut que dans certains cas, nous puissions démontrer une chose et son contraire

(inconsistance)

2. Dans tout système mathématique formel, il existe des vérités mathématiques qu'il est

impossible à de démontrer (incomplétude)

Le théorème de Gödel ruine ainsi le rêve de réunir les mathématiques en un système déductif

parfaitement cohérent, mais de l'effervescence intellectuelle autour du projet des Principia de

Russel et Whitehead vont sortir les idées fondatrices de l'informatique. Cela amène, en 1936

Alan Turing, à la suite de Gödel, s'attaque au problème de la décidabilité.

Définition: Un système est appelé "système décidable" s'il existe une procédure effective pour

distinguer les propositions démontrables des autres. Pour définir plus rigoureusement la notion

de procédure effective, Turing élabore le concept "d'automate", appelé par la suite "machine de

Turing" (voir exemple plus bas), qui lui permet de préciser la notion d'exécution d'un

"algorithme" (cf. chapitre de Méthodes Numériques).

Inventer des procédures effectives (des algorithmes) consiste à déterminer un enchaînement

d'opérations élémentaires qui exécuteront les calculs nécessaires à la solution de problèmes

pour lesquels existent des solutions calculables (il y a des problèmes sans solution et des

solutions incalculables comme nous l'avons vu lors de notre étude de la complexité dans le

chapitre de méthodes numériques). Turing démontre en outre que son modèle de calcul est

universel, c'est-à-dire que toutes les machines de Turing sont équivalentes (nous le

démontrerons plus loin). Il formule l'hypothèse selon laquelle tout algorithme est calculable par

une machine de Turing. Ces idées fondent la théorie de la programmation des ordinateurs.

MACHINE DE VON NEUMANN

Il revient à von Neumann de concevoir en 1945 l'architecture générale des appareils concrets

qui vont réaliser les calculs selon le modèle de Turing, architecture si efficiente et élégante que

les ordinateurs d'aujourd'hui sont encore construits, pour l'essentiel, selon ses principes.

Remarque: Nous pouvons d'une certaine façon dire que cette décennie entre 1936 et 1945 a vu la

naissance de l'informatique, qui est passée du stade de construction intellectuelle mathématique et

logique à celui de l'application de ces idées à la réalisation de systèmes physiques concrets.

Voici le schéma de l'architecture de von Neumann :

(1)

Les unités de contrôle (Control Unit), arithmétique (ALU) et de mémoire primaire (Primary

Memory) constituent à elles trois l'unité centrale, ou le "processeur" de l'ordinateur. Le

processeur est constitué de circuits électroniques qui peuvent exécuter des actions. L'ensemble

des actions câblées dans le processeur constitue le jeu d'instructions du processeur et

détermine le langage élémentaire de son utilisation, appelé "langage machine".

Le rôle de l'unité de contrôle consiste à permettre le déclenchement de l'action (l'instruction)

voulue au moment voulu. Cette instruction peut appartenir à l'unité arithmétique, à l'unité de

mémoire ou à l'unité de contrôle elle-même. Une instruction peut en outre consulter le contenu

de la mémoire (la "lire") ou modifier le contenu de la mémoire (y "écrire"). De façon générale,

une action consiste soit à consulter ou à modifier l'état de la mémoire ou d'un des registres (qui

sont des éléments de mémoire spéciaux incorporés à l'unité centrale), soit à déclencher une

opération d'entrée-sortie (communication avec le monde extérieur et notamment l'utilisateur

humain).

Exemple:

Comment indiquons-nous à l'unité de contrôle le moment voulu pour déclencher telle ou telle

action? : C'est écrit dans le texte d'un programme. Où est le programme ? : Dans la mémoire.

La mémoire est constituée d'éléments susceptibles de prendre des états. Un élément de base de

la mémoire peut prendre deux états distincts et peut servir à représenter une donnée

élémentaire, ou bit (cf. chapitre sur les Systèmes Logiques). Cette représentation d'une donnée

par un élément de mémoire s'appelle un "code". Une mémoire avec beaucoup de bits permet le

codage de données complexes, dans la limite de la taille de la mémoire.

Le chemin par lequel unité centrale, mémoire et organes d'entrée-sortie (Devices)

communiquent s'appelle de façon générique un "bus" (c'est en quelque sorte l'autoroute où

circulent des données d'un point à un autre à l'aide d'adresses). De façon un peu formelle, un

bus est un graphe connexe complet (cf. chapitre de Théorie Des Graphes), ce qui veut dire en

langage courant que tous les éléments connectés au bus peuvent communiquer entre eux.

Remarque: Le codage fait correspondre des groupes de bits à des symboles. Les symboles les plus

simples sont les chiffres et les lettres. Pour représenter des données complexes on peut définir des

méthodes, des règles pour regrouper des symboles puis associer un élément de donnée à un groupe de

symboles construit selon les règles.

Définition: Nous appelerons"langage" un ensemble de symboles ou de groupes de symboles,

construits selon certaines règles, et qui sont les mots du langage. La "syntaxe du langage" est

l'ensemble des règles de construction des mots du langage.

La mémoire de l'ordinateur (c'est l'idée fondamentale de von Neumann) contient des

informations de deux types : des programmes et des données. Les programmes et les données

sont représentés avec les mêmes symboles, seule la sémantique permet d'interpréter leurs

textes respectifs. D'ailleurs, le texte d'un programme peut parfois être envisagé comme des

données pour un autre programme, par exemple un programme de traduction d'un langage

dans un autre.

MACHINE DE TURING

Il importe de se convaincre (ce ne sera pas en un jour) que tous les programmes que nous

pourrons écrire dans différents langages sont équivalents. La machine de Turing est un modèle

d'automate dont on trouvera ci-dessous une description très terre à terre (avant de passer à

une définition beaucoup plus formelle). L'architecture de von Neumann, conçue pour réaliser

efficacement les traitements décrits par une machine de Turing, engendre les langages

impératifs (voir définition en R1 ci-dessous). Tout programme, fonctionnel ou impératif,

destiné à être exécuté, sera traduit dans un langage impératif, le langage machine de

l'ordinateur utilisé. La cohérence de l'informatique, et l'équivalence sémantique des

programmes écrits en divers langages, qui assurent la validité de cette opération, sont le fruit

non pas du hasard, mais d'une conception théorique originelle commune. Gödel, Church, von

Neumann et Turing étaient tous à Princeton en 1936.

Remarques:

R1. Les premiers langages évolués qui apparurent sont des langages dits "langages impératifs",

fondés sur la notion d'état de la mémoire (c'est l'assembleur au fait!). Ces langages, inspirés du

modèle de John von Neumann, comportent comme le langage machine des instructions qui

produisent des modifications de la mémoire (instruction d'affectation). La rédaction d'un

programme en langage impératif consiste à écrire la suite des instructions qui vont causer les

états successifs par lesquels devra passer la mémoire pour que, en partant d'un état initial

permettant l'initialisation du programme, elle arrive dans un état final fournissant les résultats

recherchés.

R2. Outres les langages impératifs, en informatique nous distinguons les langages séquentiels,

interprétés et compilés.

Un modèle formel pour une procédure effective (pour décrire un algorithme) doit posséder

certaines propriétés. Premièrement, chaque procédure doit recevoir une définition finie.

Deuxièmement, la procédure doit être composée d'étapes distinctes, dont chacune doit pouvoir

être accomplie mécaniquement. Dans sa simplicité, la machine de Turing composée des

éléments suivants répond à ce programme :

1. Une mémoire infinie représentée par un ruban divisé en cases. Chaque case du ruban peut

recevoir un symbole de l'alphabet défini pour la machine ;

2. Une tête de lecture capable de parcourir le ruban dans les deux sens ;

3. Un ensemble fini d'états parmi lesquels on distingue un état initial et les autres états, dits

"états accepteurs"

4. Une fonction de transition qui, pour chaque état de la machine et chaque symbole figurant

sous la tête de lecture, précise : l'état suivant, le caractère qui sera écrit sur le ruban à la place

de celui qui se trouvait sous la tête de lecture, le sens du prochain déplacement de la tête de

lecture.

On peut doter sa Machine de Turing de l'alphabet fini de son choix. Son ruban peut être infini

dans les deux sens ou dans un seul. Elle peut même avoir plusieurs rubans. On montre que ces

diverses machines sont équivalentes.

Nous sommes alors amenés à la définition simpliste suivante :

Un automate fini est un modèle mathématique des systèmes ayant un nombre fini d'états et que

des actions (externes ou internes) peuvent faire passer d'un état à un autre. Les actions

externes sont représentées par les symboles d'un alphabet A ; les actions internes (invisibles,

silencieuses, ou spontanées) sont représentées par un symbole n'appartenant pas à l'alphabet

précité.

Un automate est représenté par un graphe (cf. chapitre de Théorie Des Graphes) dont les

sommets sont des états et à chaque arc est associé la reconnaissance d'une ou plusieurs lettres.

Les automates finis permettent de modéliser et de contrôler des systèmes à nombre d'états

finis et à résoudre des problèmes courants : analyse lexicale, recherche de motifs dans un

texte, analyse du génome, etc.

Exemples:

E1. Automate fini et déterministe qui reconnaît tous les entiers dont l'écriture est normalisée

(langage régulier), c'est-à-dire ne commençant pas par 0 (les chiffres dans les cercles sont

juste là pour décrire l'ordre dans lequel l'automate exécute l'opération) :

(2)

Explication : L'automate reçoit dans l'entrée (1) un nombre entier, il regarde si ce nombre

commence par un 0 ou un nombre compris entre 1 et 9. Si le nombre commence par zéro,

l'automate sort et s'arrête en (3). Sinon, l'automate va en (2) et analyse les chiffres du nombre

les un après les autres jusqu'à ce qu'il arrive à la fin après quoi il s'arrête et sort en (3).

E2. Automate fini et déterministe qui reconnaît une entrée numérique dans un tableur type

langage régulier (par exemple : +12,3 ou 08 ou -15 ou 5E12 ou 14E-3) :

(3)

En d'autres termes, il suffit de reconnaitre un langage de la forme :

(4)

qui est bien régulier où est le mot vide, A est l'alphabet {0,1,...,9} et l'ensemble des mots

(in extenso des nombres) qu'on peut écrire avec A.

E3. Automate fini et déterministe reconnaissant tous les multiples de 3, type langage régulier

(en d'autres termes si un tel multiple est trouvé, l'automate effectue une sortie, sinon rien) :

(5)

HIÉRARCHIE DE CHOMSKY

La hiérarchie de Chomsky est une classification des langages décrits par les grammaires

formelles, proposée en 1956 par le linguiste Noam Chomsky. Elle est aujourd'hui largement

utilisée en informatique, en particulier pour la conception d'interpréteurs ou de compilateurs,

ou encore pour l'analyse des langages naturels.

Il convient au préalable de définir certaines notions :

LANGAGE FORMEL

Définition (simpliste): Dans de nombreux contextes (scientifique, légal, etc.) l'on désigne par

"langage formel" un mode d'expression plus formalisé et plus précis (les deux n'allant pas

nécessairement de pair) que le langage de tous les jours (voir langage naturel).

En mathématiques, logique et informatique, un langage formel est formé :

1. D'un ensemble de mots obéissant à des règles logiques (grammaire formelle ou syntaxe)

strictes.

2. Eventuellement d'une sémantique sous-jacente (la force des langages formels est de pouvoir

faire abstraction d'une telle sémantique, ce qui rend les théories réutilisables dans plusieurs

modèles)

Remarque: Ainsi, alors qu'un calcul particulier de paye ou de matrice inverse restera toujours un calcul

de paye ou de matrice inverse, un théorème sur les groupes s'appliquera aussi bien sur l'ensemble des

entiers que sur les transformations du cube de Rubik.

Le langage formel d'une discipline scientifique c'est donc effectivement un langage obéissant à

une syntaxe formelle stricte et qui va servir à exposer des énoncés de manière précise, si

possible concise et sans ambiguïté, et s'oppose en cela au langage naturel.

Le langage formel a pour avantage de rendre aisées la manipulation et la transformation de ces

énoncés. En effet, on va disposer en général de règles de transformation précises

(développement de formules logiques, formes normales, contrapositions, commutativité,

associativité, etc.) qui peuvent être appliquées sans même connaître la signification de l'énoncé

transformé ou la signification de la transformation. C'est donc un outil d'exploration puissant,

et c'est le seul langage qui permette aux machines de "faire des mathématiques".

L'inconvénient est évident : ne pas connaître le sens de l'énoncé empêche de savoir quelles sont

les transformations pertinentes et nuit à l'intuition du raisonnement. Ainsi, il est bon de savoir

lire rapidement un énoncé en langage formel et de le traduire tout aussi rapidement en un ou

plusieurs énoncés du langage naturel, plus parlants.

C'est là que se trouve la limite de ce que nous appelons les "logiciels d'aide à la preuve" :

naturellement, l'ordinateur n'a pas d'intuition. Toute l'habileté du concepteur d'un tel

programme consiste à trouver des moyens pour que l'ordinateur comprenne.

Donner un sens pertinent à un langage de programmation en vue d'exécuter ses programmes

est relativement aisé, du fait que ces langages formels ont été conçus pour signifier des suites

d'actions élémentaires de la machine. Pour prouver un programme (démontrer que l'algorithme

se termine en un nombre fini de fois) ou un théorème de mathématiques (ce qui revient au

même), il n'y a, en revanche, aucune méthode infaillible, la correction d'un programme étant un

problème de décision indécidable. Ainsi le prouveur doit se contenter d'appliquer certaines

heuristiques (technique consistant à apprendre petit à petit et tenant compte de ce qui a été fait

au préalable) et souvent appeler à l'aide l'utilisateur humain. Cependant, grâce à ses

heuristiques et à sa puissance de calcul, l'ordinateur explore des milliers de voies que

l'utilisateur humain n'aurait pas pu tester en plusieurs années, accélérant ainsi le travail du

mathématicien.

Définition (un peu plus formelle): En tant qu'objet d'étude, un "langage formel" est défini

comme un ensemble de mots de longueur finie (i.e. chaînes de caractères) déduit d'un certain

alphabet fini, c'est-à-dire une partie du monoïde libre (l'ensemble des mots formé sur un

alphabet, muni de la loi interne de concaténation (qui est une loi de composition), est un

monoïde que nous appelons monoïde libre, dont le mot vide est l'élément neutre) sur cet

alphabet.

Remarque: Il faut tout de même que cet ensemble de mots ait un sens, soit pertinent, soit opérationnel,

serve à quelque chose. Sinon toute collection de groupements finis de caractères sera un langage

formel. En somme que ces mots puissent s'articuler entre eux pour former sens, ou du moins construire

une pensée, une démarche, un mécanisme logique, une technique de calcul...

SYNTAXE

Définition: La "syntaxe" est la branche de la linguistique qui étudie la façon dont les

"morphèmes libres" (les mots) se combinent pour former des "syntagmes" (nominaux ou

verbaux) pouvant mener à des propositions, lesquelles peuvent se combiner à leur tour pour

former des énoncés.

Exemple:

Le syntagme "une modeste maison de briques rouges" est englobé dans le syntagme supérieur,

c'est-à-dire, la phrase complète. Mais ce même syntagme "une modeste maison de briques

rouges" inclut parmi ses éléments, le syntagme inférieur "de briques rouges", complément du

nom "maison".

Définitions:

D1. En grammaire scolaire, une "proposition" est un syntagme articulé autour d'un verbe. Cette

notion est surtout utilisée dans l'apprentissage des langues.

D2. Un "énoncé", en linguistique est tout ce qui est prononcé par un locuteur entre deux

pauses. Syntaxiquement, l'énoncé peut donc s'étendre du simple mot à la phrase (voire au

discours) en passant par le syntagme.

Le terme de syntaxe est aussi utilisé en informatique, où sa définition est similaire, modulo une

terminologie différente. Ainsi la syntaxe est le respect, ou le non-respect, de la grammaire

formelle d'un langage, c'est-à-dire des règles d'agencement des lexèmes (qui, en informatique,

ne sont que des entités lexicales) en des termes plus complexes, souvent des programmes.

Dans la théorie des langages formels, ce qui joue le rôle de lexème est en général appelé

"lettre" ou "symbole", et les termes produits sont appelés "mots".

D'un point de vue purement grammatical, l'étude de la syntaxe concerne trois sortes d'unités :

U1. La phrase, qui est la limite supérieure de la syntaxe ;

U2. Le mot, qui en est le constituant de base, parfois appelé "élément terminal"

U3. Le syntagme (ou groupe), qui en est l'unité intermédiaire.

Les relations syntaxiques entre ces différentes unités peuvent être de deux ordres :

O1. La coordination lorsque les éléments sont de même statut

O2. La subordination dans le cas contraire (lorsqu'il y a subordination, l'élément subordonné

remplit une fonction syntaxique déterminée par rapport à l'unité de niveau supérieur)

L'étude de la syntaxe tiendra compte, notamment, de la nature (ou catégorie ou espèce) des

mots, de leur forme (morphologie) et de leur fonction. C'est ainsi qu'on parlera plus

généralement de rapports morphosyntaxiques.

GRAMMAIRE FORMELLE

Définition (simpliste): Une "grammaire formelle" est un formalisme permettant de définir une

syntaxe et donc un langage formel, c'est-à-dire un ensemble de mots sur un alphabet donné.

La notion de grammaire formelle est particulièrement utilisée dans les domaines suivants :

- La compilation (analyse syntaxique)

-L'analyse et le traitement des langues naturelles

- Les modèles de calcul (automates, circuits, machines de Turing, ...) ;

Pour définir une grammaire, nous avons besoin (voir l'exemple plus bas pour comprendre) :

1. D'un alphabet de non-terminaux ;

2. D'un alphabet de terminaux ;

3. D'un symbole initial (l'axiome) pris parmi les non-terminaux ;

4. D'un ensemble de règles de production.

Exemples:

E1. Nous pouvons définir des expressions arithmétiques de la façon suivante (écritures que

nous retrouvons fréquemment en théorie de la démonstration) :

(6)

Les non-terminaux sont ici implicitement exp et num, les terminaux sont + , * ,(,) et les

chiffres. L'axiome estexp.

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome