Vous êtes sur la page 1sur 32

CSI3504A: Introduction aux langages formels

Lecture 1: Chapitres 1-3

Hiver 2023

Dr. Mouhcine Guennoun


Objectifs du cours

• Développer des modèles mathématiques abstraites pour

décrire, avec un niveau d’exactitude varié, des parties

des ordinateurs et des types de machines.

• Mais toutes les sciences de l’informatique ont pour

objectif la modélisation

– Quelle est la différence?


Comment ce cours est différent?
• Il y a des cours pour traiter des différents sujets
– Cours des systèmes opératoires

– Cours de structures de données

– Cours d’algorithmiques

– Cours de compilation

– Cours d’architecture des ordinateurs

– Cours sur les circuits intégrés

– Cours d’intelligence artificielle


La différence
• La différence principale se résume en deux points:

1. Les autres cours s’intéressent à modéliser des ordinateurs


existants alors que le cours de langages formels modélise
des ordinateurs qui existent, existeront, et qui peuvent
exister

2. Les autres cours traitent de l’optimalité alors que le notre


cours s’intéresse à la faisabilité (ce qui peut être fait et ce
qui ne peut pas être fait)

• Ce cours s’intéresse aux capacités (possibilités) et aux limites


théoriques des machines
Questions de base

• Quels sont les modèles théoriques de l’ordinateur?

• Qu’est ce qu’on peut et ne peut pas calculer avec un


ordinateur d’aujourd'hui ainsi que celui du futur?

• On a besoin de réponses précises.

– Donner des questions et preuves non ambigües a


l’aide de méthodes formelles.

• On apprendra aussi la rigueur mathématique.


Algorithme - Définition

• Un ensemble d’instructions pour résoudre d’une façon


systématique un problème

• Il a les propriétés suivantes:


– Simple à suivre et exécuter

– S’exécute en nombre fini d’instructions

– Complet: Garantie la résolution du problème dans un


nombre fini d’instructions si la solution existe

• Un protocole est un algorithme distribué


Le théorème d’incomplétude de Gödel (1931)

• Le théorème d’incomplétude de Gödel est un résultat fondamental


de la logique mathématique qui dit que tout système logique «
suffisamment puissant» admet nécessairement un énoncé qu’il ne
peut ni démontrer, ni réfuter.

• Autrement dit, une théorie cohérente suffisante pour y démontrer


les théorèmes de base de l'arithmétique est nécessairement
incomplète, au sens où il existe des énoncés qui n'y sont ni
démontrables, ni réfutables

• Ce qui revient au même, si on ne peut y démontrer A et non A


– Exemple: Est-ce qu’il y a une distribution des nombres premiers?

7
Quel est le meilleur langage ?

• C’est une question philosophique

• Cependant, tous les langages partagent les mêmes

possibilités et limites
Ce cours

• Trois sections fondamentales:

I. Théorie des automates

II. Théorie des langages formels

III. Théorie des machines de Turing


Les langages

➢ Collections de caractères, mots et phrases

➢ Un ensemble de caractères forme un mot

➢ pas nécessairement valide

➢ Un ensemble de mots forme une phrase

➢ Pas nécessairement valide

➢ Donc on a besoin de règles pour déterminer si le mot


ou la phrase est valide
Les langages formels
• Formel représente le fait que les règles du langage sont
exprimées explicitement, pas d’ambiguïté

• On s’intéresse à la forme de la chaine des symboles


plutôt que la sémantique.

• La théorie des langages formels étudie les aspects


purement syntaxiques de tels langages, c'est-à-dire
leur structure interne formelle.

• En informatique, les langages formels sont souvent


utilisés comme base pour la définition des langages de
programmation et d'autres systèmes ; les mots d'un
langage comportent alors aussi un sens, une
sémantique.
Définitions

Alphabet Σ Un ensemble fini de caractères


Lettre (– ou caractère) est un élément de l’alphabet Σ
Mot est une suite finie de caractères dans Σ
Σ∗ L’ensemble de tous les mots sur l’alphabet Σ
Λ (mot vide) Le mot qui ne contient aucun caractère
(Lire Lambda)
Langage (L) Langage sur un alphabet Σ est un ensemble de
mots sur Σ. (sous ensemble de Σ ∗ )
Exemple
Notation: Mot vide Λ

• On dénote par Λ (Lambda) le mot vide (la chaine nulle


ou la chaine vide)
Deux types de langages
1. Un alphabet et une liste exhaustive de tous les mots du
langage

2. Un alphabet et un nombre fini de règles qui définissent


les mots acceptables

– Les règles définissent comment tester un mot pour


décider si c’est un mot valide.

– Ou bien elles donnent des procédures claires pour


construire tous les mots du langage.
Notation

• ab signifie la concaténation de a et de b

• Si a = xyz et b = mnp => ab = xyzmnp


Exemple 1
• Σ = {x}

• On définit le langage L1 toutes les chaines non vides qui


sont la concaténation de caractères de l’alphabet

• L1= {x, xx, xxx, xxxx, …} ou L1= {xn | n = 1, 2, 3, …}

• Σ ∗ = {Λ, x, xx, xxx, xxxx, …} ou Σ ∗ = {xn | n = 0, 1, 2, 3, …}

– On denote x0 = Λ

• Remarque:
– Si a ∈ L1 et b ∈ L1 alors ab ∈ L1 (c’est pas toujours vrai)
Exemple 2
• Σ = {x}

• Σ ∗ = {Λ, x, xx, xxx, xxxx, …} ou Σ ∗ = {xn | n = 0, 1, 2, 3, …}

• On définit le langage L2

– L2= {w ∈ Σ ∗ tel que w a un nombre impair de caractères}

• L2= {x, xxx, xxxxx, …} ou L1= {x2*n+1 | n = 0, 1, 2, 3, …}

– Si a ∈ L2 et b ∈ L2 alors ab ∉ L2
Opérations sur les mots

• Longueur(w) ou l(w) est le nombre de caractères du mot w.

l(xxxxx) = 5 l(1025)=4 l(Λ)=0

• Supposons Σ = {0, 1}, L1 = {w ∈ Σ ∗ : w commence par 1 et l(w) ≤ 3}

– L1 = {1, 10, 11, 101, 100, 110, 111}

• Inverse ou inv: L’inverse d’un mot u1u2…um est le mot umum-1…u1

– inv(abc) = cba inv(xxx) = xxx inv(157) = 751


Le langage palindrome

• Un langage est dit palindrome si:

– PALINDROME={w ∈ Σ ∗ : inv(w)= w}

• Si Σ = {a, b} alors PALINDROME = {Λ, a, b, aa, bb, aaa, aba, bbb, bab, … }

• Un langage palindrome est un exemple de langage intéressant


Enchaînement (ou concaténation) de deux mots

• L’enchaînement du mot u = u1u2…um avec le mot v=v1v2…vn est


le mot uv = u1u2…umv1v2…vn

• Les mots u et v sont les facteurs de cet enchaînement.

• Exemple1 : si u=xx et v=xxx alors uv=xxxxx

• Exemple2 : si u = abb et v= aa alors uv = abbaa

• Propriété:
– l(uv) = l(u) + l(v)
Enchaînement de deux langages
• Si L1 et L2 sont deux langages sur un alphabet Σ alors
l’enchaînement de L1 avec L2 est le langage
– L1L2 = {uv : u ∈ L1 et v ∈ L2}

• Exemple: Σ = {0,1}

• L1= {u dans Σ ∗ : le nombre de zéros dans u est pair}

• L2= {u dans Σ ∗ : u commence par 0 et tous les autres caractères «s’il y


en a» sont des 1}

• L1L2= {u dans Σ ∗ : le nombre de zéros dans u est impair}

• L2L1= {u dans Σ ∗ : u commence par zéro et le nombre de zéros dans u


est impair}
Σ ∗ la fermeture d’un alphabet

➢ On appelle Σ ∗ la fermeture de l’alphabet S.

➢ Exemples:

➢ S = {x} Σ ∗ = {Λ, x, xx, xxx, …}

➢ S = {0, 1} Σ ∗ = {Λ, 0, 1, 00, 01, 10, 11, 000, 001, …}

➢ S = {a, b, c} Σ ∗ = {Λ, a, b, c, aa, ab, ac, ba, bb, bc, …}


Fermeture d’un Langage S

• Soit S un langage sur un alphabet S.

• La fermeture de S, qu’on dénote S*, est l’ensemble des mots

• S*={u dans Σ ∗ : u=u1u2…um, où u1, u2, …, um sont tous dans S}


– Plus le mot vide Λ

• S* est l’ensemble de tous les mots qui peuvent se mettre sous


la forme d’enchaînement de mots de S.

• Il est évident de remarquer que S* ⊂ Σ ∗


Exemples
➢ Exemple 1: S={a, ab}

S*={Λ, a, aa, ab, aaa, aab, aba, aaaa, …}

S* = {Λ ainsi que tous les mots qui commencent par a et qui ne


contiennent pas deux b consécutif}

➢ Exemple 2: S = {xx, xxx}

S*= {Λ ainsi que tous les mots qui ont au moins deux x}

S* = {xn : n≠1}
Factorisation des mots de la fermeture
d’un langage S*
➢ Exemple 1:

➢ S={a, ab} S*={Λ, a, aa, ab, aaa, aab, aba, aaaa, …}

Si u = abaaababa ∈ S* ab|a|a|ab|ab|a (facteurs)

• La factorisation des mots de S* n’est pas nécessairement unique

➢ Exemple 2:

➢ S = {xx, xxx}

xxxxxxx ∈ S* xx|xx|xxx xx|xxx|xx xxx|xx|xx


Propriétés

• Si S = ∅ ou S = {Λ}, alors S*= {Λ}

• Sinon S* est toujours un langage infini et doit toujours


contenir le mot vide.

• Remarque :

• S={a, b, ab} T= {a, b, bb}, alors S*=T* bien que S ≠ T


Le langage S+

• S+ est le langage qui contient tous les enchaînements avec au moins1


mot de S.

– Si Λ est dans S alors, S*= S+, Sinon S+= S* - {Λ}.

Idem

❑ S = {x} S+= {x, xx, xxx, …} = S*-{Λ}

➢ S= {aa, bbb, Λ} S+={aa, bbb, Λ, aaaa, aabbb, …} = S*


Définitions récursives des langages

3 étapes:

1. Spécifier les mots de base du langage.

2. Règles pour construire des nouveaux mots à partir des mots déjà connus dans
le langage.

3. Déclarer que tout mot qui n’est pas construit en suivant les règles 1 et 2
n’appartient pas au langage.

C’est une méthode qui permet de définir récursivement les ensembles.


Exemple

• PAIR est l’ensemble de nombres entiers divisible par 2.

– On peut définier: PAIR = {2n | n = 1, 2, 3, 4, …}

• PAIR est construit par les règles (Définitions récursives):

1. 2 appartient à PAIR.

2. Si x appartient à PAIR, x+2 appartient aussi à PAIR.

3. Tous les éléments de PAIR sont construits en suivant les règles 1 et 2.


Définition récursive alternative de l’ensemble
PAIR

Les règles:

1. 2 appartient à PAIR.
2. Si x et y appartiennent à PAIR, alors x+y appartient aussi à
PAIR.

Construction:

❑ Règle1: 2 ∈ PAIR
❑ Règle2: x=2 ∈ PAIR, y=2 ∈ PAIR alors 2+2=4 ∈ PAIR
❑ Règle2: x=4 ∈ PAIR, y=2 ∈ PAIR alors 4+2=6 ∈ PAIR
❑ Règle2: x=4 ∈ PAIR, y=4 ∈ PAIR alors 4+4=8 ∈ PAIR
❑ Règle2: x=6 ∈ PAIR, y=8 ∈ PAIR, alors 6+8= 14 ∈ PAIR
Merci

Vous aimerez peut-être aussi