summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2018-10-16 16:42:36 +0200
committerDavid A. Madore <david+git@madore.org>2018-10-16 16:42:36 +0200
commit1344414e41dd66e79d484ac9e9d585cad4d115c7 (patch)
treec99bbc999f92152f011a6b7774f3808ae2934e07
parentad186bc02f3b9c6e74364c682fd001b22b705cde (diff)
downloadinf105-1344414e41dd66e79d484ac9e9d585cad4d115c7.tar.gz
inf105-1344414e41dd66e79d484ac9e9d585cad4d115c7.tar.bz2
inf105-1344414e41dd66e79d484ac9e9d585cad4d115c7.zip
Possible set of slides for first course.
-rw-r--r--slides1.tex633
1 files changed, 633 insertions, 0 deletions
diff --git a/slides1.tex b/slides1.tex
new file mode 100644
index 0000000..b7c9120
--- /dev/null
+++ b/slides1.tex
@@ -0,0 +1,633 @@
+%% This is a LaTeX document. Hey, Emacs, -*- latex -*- , get it?
+\documentclass[mathserif,a4paper]{beamer}
+%\documentclass[a4paper]{article}
+%\usepackage[envcountsect,noxcolor]{beamerarticle}
+%\usepackage[francais]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\DeclareUnicodeCharacter{00A0}{~}
+% Beamer theme:
+\usetheme{Goettingen}
+%\usecolortheme{albatross}
+%\usecolortheme{lily}
+%\setbeamercovered{transparent}
+% A tribute to the worthy AMS:
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{amssymb}
+\usepackage{amsthm}
+%
+\usepackage{mathrsfs}
+%
+\usepackage{graphicx}
+\usepackage{tikz}
+\usetikzlibrary{matrix,arrows,snakes,calc}
+%
+\newcommand{\itempoint}{\strut\hbox{\color{beamerstructure}\donotcoloroutermaths$\blacktriangleright$}\nobreak\hskip.5em plus.5em\relax}
+\renewcommand{\thefootnote}{\textdagger}
+\newcommand{\ord}{\mathop\mathrm{ord}\nolimits}
+%
+%
+%
+\title{Mots, languages et langages rationnels}
+\subtitle{Théorie des langages (INF105)}
+\author[David Madore]{David A. Madore\\
+{\footnotesize Télécom ParisTech}\\
+\texttt{david.madore@enst.fr}}
+\date{17 octobre 2018}
+\mode<presentation>{%
+\beamertemplatenavigationsymbolsempty
+\usenavigationsymbolstemplate{\vbox{\hbox{\footnotesize\hyperlinkslideprev{$\leftarrow$}\insertframenumber/\inserttotalframenumber\hyperlinkslidenext{$\rightarrow$}}}}
+}
+\setbeamercolor{myhighlight}{fg=black,bg=white!90!green}
+\begin{document}
+\mode<article>{\maketitle}
+%
+\setlength\abovedisplayskip{2pt plus 2pt minus 2pt}
+\setlength\belowdisplayskip{2pt plus 2pt minus 2pt}
+%
+\frame{\titlepage}
+%
+\section*{Plan}
+\begin{frame}
+\frametitle{Plan}
+\tableofcontents
+\end{frame}
+%
+\section{Introduction}
+\begin{frame}
+\frametitle{Qu'est-ce que la théorie des langages ?}
+
+\itempoint Discipline à l'interface entre \textbf{mathématiques}
+discrètes et \textbf{informatique}.
+
+\bigskip
+
+\itempoint Trouve ses origines dans une étude formelle de la
+linguistique (Chomsky) et de la calculabilité (Turing).
+
+\bigskip
+
+\itempoint Cherche à développer des outils algorithmiques et concepts
+abstraits pour l'étude des \textbf{chaînes de caractères}
+(=~\textbf{mots}) et fichiers texte, p.ex. :
+\begin{itemize}
+\item recherche de motifs / remplacement,
+\item différences, substitutions,
+\item analyse syntaxique (p.ex. avant compilation).
+\end{itemize}
+
+\bigskip
+
+\itempoint Ce cours se concentrera sur trois aspects :
+\begin{itemize}
+\item langages et expressions rationnels, automates finis,
+\item grammaires hors contexte et arbres d'analyse,
+\item introduction à la calculabilité.
+\end{itemize}
+
+\end{frame}
+%
+\section{Alphabets, mots, longueur, concaténation}
+\begin{frame}
+\frametitle{Alphabet, lettres, mots, langages}
+
+Quatre concepts basiques :
+
+\medskip
+
+\itempoint L'\textbf{alphabet} (= jeu de caractères) est un ensemble
+\emph{fini}, généralement noté $\Sigma$, sans structure particulière.
+
+\smallskip
+
+{\footnotesize
+
+Souvent fixé pour toute la discussion, p.ex., $\Sigma = \{a,b,c\}$.
+
+\par}
+
+\medskip
+
+\itempoint Les éléments de $\Sigma$ s'appellent \textbf{lettres} ou
+\textbf{caractères}.
+
+\medskip
+
+\itempoint Un \textbf{mot} est une suite \emph{finie} de lettres.
+
+(L'ensemble des mots possibles se note $\Sigma^*$.)
+
+\medskip
+
+\itempoint Un \textbf{langage} est un ensemble (quelconque) de mots.
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Alphabet et lettres}
+
+On considère un ensemble $\Sigma$ \emph{fini}, l'\textbf{alphabet},
+dont les éléments s'appellent \textbf{lettres} ou \textbf{caractères}
+(ou \textbf{symboles}).
+
+\bigskip
+
+P.ex., $\Sigma = \{0,1\}$ (alphabet \textbf{binaire}).
+
+\bigskip
+
+En informatique, on parle de \textbf{jeu de caractères}, p.ex., ASCII
+ou Unicode.
+
+\bigskip
+
+Pour les exemples, on utilisera souvent quelque chose comme $\Sigma =
+\{a,b\}$ ou $\{a,b,c\}$.
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Mots}
+
+{\footnotesize(Rappel : $\Sigma$ est un ensemble \emph{fini}.)\par}
+
+\medskip
+
+\itempoint Un \textbf{mot} sur $\Sigma$ est une suite finie de lettres
+(= éléments de $\Sigma$).
+
+\smallskip
+
+En informatique, on parle de \textbf{chaîne de caractères}.
+
+\medskip
+
+\itempoint On notera sans séparateur : $x_1\cdots x_n$ le mot de $n$
+lettres (= longueur $n$) formé par $x_1,\ldots,x_n$.
+
+\medskip
+
+\itempoint \textbf{Longueur} d'un mot : $|x_1\cdots x_n| = n$. Aussi
+notée $\ell(x_1\cdots x_n)$.
+
+\medskip
+
+\itempoint Il existe un unique mot de longueur $0$ : le \textbf{mot
+ vide}, généralement noté $\varepsilon$ (en informatique,
+\texttt{\char`\"\char`\"}).
+
+\smallskip
+
+{\footnotesize Le symbole $\varepsilon$ \alert{ne fait pas} partie de
+ l'alphabet ! C'est un symbole spécial.\par}
+
+\medskip
+
+\itempoint L'ensemble de tous les mots sur $\Sigma$ sera noté
+$\Sigma^*$.
+
+\smallskip
+
+{\footnotesize L'ensemble $\Sigma^*$ est toujours infini (sauf
+ si $\Sigma = \varnothing$).\par}
+
+\smallskip
+
+{\footnotesize P.ex. $\{a\}^* = \{\varnothing, a, aa, aaa, aaaa,
+ \ldots\}$.\par}
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Concaténation de mots}
+
+{\footnotesize(Rappel : $\Sigma$ est un ensemble \emph{fini}, et
+ $\Sigma^*$ l'ensemble des \textbf{mots} sur $\Sigma$ = suites
+ finies.)\par}
+
+\medskip
+
+\itempoint Si $u = x_1\cdots x_m$ est un mot de longueur $m$,\\
+et $v = y_1\cdots y_n$ est un mot de longueur $n$,\\
+alors $uv := x_1\cdots x_m y_1\cdots y_n$ mot de longueur $m+n$.
+
+\medskip
+
+\itempoint On parle de \textbf{concaténation} ou simplement
+\textbf{produit} des mots $u$ et $v$.
+
+\medskip
+
+\itempoint Opération associative, $\varepsilon$ est neutre, et
+$|uv| = |u|+|v|$.
+
+\medskip
+
+\itempoint Puissances d'un mot : $u^n := u\cdots u$ (répété $n$ fois)
+si $u\in\Sigma^*$, $n\in\mathbb{N}$, avec conv\textsuperscript{n} $u^0
+:= \varepsilon$. On a $u^{m+n} = u^m u^n$ et $u^{mn} = (u^m)^n$ et
+$|u^n| = n|u|$.
+
+\medskip
+
+\itempoint Si $w = uv$, on dit que $u$ est un \textbf{préfixe} de $w$,
+que $v$ est le \textbf{suffixe} correspondant.
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Facteurs, sous-mots, miroir}
+
+\itempoint\textbf{Facteur} = préfixe d'un suffixe = suffixe d'un
+préfixe = choix de lettres consécutives.
+
+\smallskip
+
+Si $w = x_1\cdots x_n$, un facteur de $w$ est un $x_i x_{i+1}\cdots
+x_{j-1}$ où $i\leq j$ (longueur $j-i$), y compris le mot vide.
+
+\smallskip
+
+{\footnotesize P.ex. $\varepsilon$, $bbc$, $cab$ et $abbcab$ sont
+ facteurs de $abbcab$ mais pas $abc$.\par}
+
+\bigskip
+
+\itempoint\textbf{Sous-mot} = choix de lettres non
+nécess\textsuperscript{t} consécutives (mais dans l'ordre).
+
+\smallskip
+
+Si $w = x_1\cdots x_n$, un facteur de $w$ est un $x_{i_1} x_{i_2}
+\cdots x_{i_k}$ où $1\leq i_1<\cdots<i_k\leq n$ (longueur $k$), y
+compris le mot vide.
+
+\smallskip
+
+{\footnotesize P.ex. $\varepsilon$, $abc$ et $abbcab$ sont sous-mots
+ de $abbcab$ mais pas $cba$.\par}
+
+\smallskip
+
+{\footnotesize Tout facteur est un sous-mot.\par}
+
+\bigskip
+
+\itempoint\textbf{Mot miroir} = inverser l'ordre des lettres.
+
+\smallskip
+
+Si $w = x_1\cdots x_n$, alors $w^{\textsf{R}} := x_n\cdots x_1$.
+
+\smallskip
+
+{\footnotesize Noter $(uv)^{\textsf{R}} = v^{\textsf{R}}
+ u^{\textsf{R}}$.\par}
+
+\smallskip
+
+{\footnotesize \textbf{Palindrome} : mot $w$ tel que $w =
+ w^{\textsf{R}}$.\par}
+
+\end{frame}
+%
+\section{Langages et opérations sur les langages}
+\begin{frame}
+\frametitle{Notion de langage}
+
+\itempoint Un \textbf{langage} $L$ sur $\Sigma$ est un ensemble
+(quelconque !) de mots sur $\Sigma$.
+
+\smallskip
+
+Autrement dit, $L \subseteq \Sigma^*$ (rappel : $\Sigma^* =
+\{\text{mots sur~$\Sigma$}\}$).
+
+\medskip
+
+\itempoint Un langage peut être fini ou infini.
+
+\smallskip
+
+Deux cas extrêmes : $\varnothing$ (langage vide, ne contient aucun
+mot), $\Sigma^*$ (langage plein, contient tous les mots).
+
+\smallskip
+
+On distinguera bien $\{\varepsilon\}$ (contient un seul mot, le mot
+vide) et $\varnothing$ (ne contient aucun mot).
+
+\medskip
+
+{\footnotesize
+
+\itempoint Autres exemples sur $\Sigma = \{a,b\}$ : le langage $\{abb,
+abab, abbbb\}$, celui des mots commençant par $a$, celui des mots
+finissant par $b$, celui des mots ne contenant aucun $a$, celui des
+mots dont la longueur est un nombre premier. Aussi $\Sigma$ = mots de
+longueur $1$.
+
+\par}
+
+\medskip
+
+\itempoint Opérations booléennes : $L_1\cup L_2$ (réunion), $L_1\cap
+L_2$ (intersection), $\Sigma^*\setminus L$ (complémentaire, parfois
+noté $\overline{L}$).
+
+{\footnotesize
+
+\itempoint Remarque : on a $L_1 \cap L_2 = \overline{\overline{L_1}
+ \cup \overline{L_2}}$.
+
+\par}
+
+\medskip
+
+{\footnotesize
+
+\itempoint On peut identifier un langage à une \textbf{propriété} des
+mots.
+
+\par}
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Concaténation, puissances, étoile de Kleene}
+
+\itempoint Concaténation de langages : $L_1 L_2$ est l'ensemble $\{w_1
+w_2 : w_1\in L_1, w_2\in L_2\}$ des concaténations d'un mot quelconque
+de $L_1$ et d'un mot quelconque de $L_2$.
+
+\medskip
+
+\itempoint Puissances : $L^n := L\cdots L$ (avec $n$ facteurs) est
+l'ens. des concat\textsuperscript{ons} de $n$ mots de $L$.
+(Conv\textsuperscript{n} : $L^0 = \{\varepsilon\}$.)
+
+\medskip
+
+{\footnotesize
+
+\itempoint Attention : $L^n$ \alert{n'est pas} $\{w^n : w\in L\}$ en
+général.
+
+\par}
+
+\medskip
+
+\itempoint \textbf{Étoile de Kleene} : $L^* :=
+\bigcup_{n\in\mathbb{N}} L^n$ est l'ensemble des concaténations de
+mots de $L$ (éventuellement zéro).
+
+\smallskip
+
+{\footnotesize
+
+On retrouve bien $\Sigma^* = \{\text{mots sur~$\Sigma$}\}$.
+
+\par}
+
+\smallskip
+
+{\footnotesize
+
+\itempoint Variante : $L^+ := \bigcup_{n\geq 1} L^n = LL^*$ est
+l'ensemble des concaténations d'au moins un mot de $L$.
+
+Notamment, $\Sigma^+ = \{\text{mots non vides}\}$.
+
+\par}
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Classes de langages}
+
+Une \textbf{classe de langages} est un ensemble de langages. On ne
+fera pas leur théorie générale.
+
+\bigskip
+
+Mais on étudiera dans ce cours quatre grandes classes de langages, de
+la plus petite à la plus grande (inclusions successives) :
+
+\smallskip
+
+\itempoint Les \textbf{langages rationnels} définis par les
+expressions rationnelles. Cette classe coïncidera avec celle des
+\textbf{langages reconnaissables} définis par les automates finis.
+
+\smallskip
+
+\itempoint Les \textbf{langages algébriques} définis par les
+grammaires hors contexte.
+
+\smallskip
+
+\itempoint Les \textbf{langages décidables} définis par des
+algorithmes quelconques (mais terminant à coup sûr en temps fini).
+
+\smallskip
+
+\itempoint Les \textbf{langages semi-décidables} définis par des
+algorithmes quelconques (terminant pour indiquer l'appartenance d'un
+mot au langage).
+
+\end{frame}
+%
+\section{Langages rationnels et expressions rationnelles}
+\begin{frame}
+\frametitle{Notion de langage rationnel}
+
+\itempoint Les \textbf{langages rationnels} sont ceux qui s'obtiennent
+à partir des langages $\varnothing$, $\{\varepsilon\}$ et $\{x\}$
+(pour $x\in\Sigma$) à partir des opérations de
+\begin{itemize}
+\item réunion (de deux langages),
+\item concaténation (de deux langages),
+\item étoile de Kleene (d'un langage),
+\end{itemize}
+appliquées un nombre fini de fois.
+
+\bigskip
+
+\itempoint Intuitivement, ce sont les langages qui admettent une
+description à partir des lettres de l'alphabet et des connecteurs « ou
+bien » (disjonction), « suivi de » (concaténation) et « répétitions
+illimitées de » (étoile).
+
+\bigskip
+
+\itempoint Exemple : $\{d\}(\{c\}^*) = \{d, dc, dcc, dccc, \ldots\}$
+est le langage constitué des mots formés d'un $d$ suivi d'une
+répétition quelconque de la lettre $c$.
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Expressions rationnelles}
+
+\itempoint Les \textbf{expressions rationnelles}
+(= \textbf{régulières}) sont un moyen pour \emph{(dé)noter}
+commodément un langage rationnel.
+
+\smallskip
+
+{\footnotesize
+
+\itempoint P.ex. : $dc{*}$ est une r.e. dénotant le langage rationnel
+$\{d\}(\{c\}^*) = \{d, dc, dcc, dccc, \ldots\}$. À lire comme « un
+$d$ suivi d'un nombre quelconque de $c$ ».
+
+\par}
+
+\medskip
+
+\itempoint Souvent utilisées en informatique pour spécifier des motifs
+de recherche. (Nombreuses variations de syntaxe.)
+
+\medskip
+
+\itempoint Ce sont des mots sur l'alphabet « étendu » $\Sigma \cup
+\{\bot, \underline{\varepsilon}, {(}, {)}, {|}, {*}\}$, les derniers
+étant appelés \textbf{métacaractères} (n'appartiennent pas
+à $\Sigma$).
+
+\medskip
+
+\itempoint Le ${|}$ dénote la disjonction (réunion des langages).
+
+\itempoint Le ${*}$ dénote l'étoile de Kleene.
+
+\itempoint Les parenthèses corrigent la priorité (étoile prioritaire
+sur concaténation prioritaire sur disjonction).
+
+\itempoint $\underline{\varepsilon}$ dénote le (langage formé du seul)
+mot vide.
+
+\itempoint $\bot$ dénote le langage vide (rarement utile...).
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Expressions rationnelles (suite)}
+
+Exemples d'expressions rationnelles sur $\Sigma = \{a,b,c,d\}$ :
+
+\begin{itemize}
+\item $a|b|cd$ dénote le langage $\{a\} \cup \{b\} \cup \{c\}\{d\} =
+ \{a,b,cd\}$.
+\item $a(b|cd)$ dénote le langage $\{a\}(\{b\} \cup \{c\}\{d\})
+ \penalty0 = \{a\}\{b,cd\} \penalty0 = \{ab,acd\}$, et est
+ équivalente à $ab|acd$.
+\item $a{*}$ dénote $\{a\}^* = \{\varepsilon, a, aa, aaa,\ldots\}$.
+\item $aa{*}$ dénote $\{a\}\{a\}^* = \{a, aa, aaa, aaaa,\ldots\} =
+ \{a\}^+$.
+\item $(a|b){*}$ dénote le langage $(\{a\}\cup\{b\})^* = \{a,b\}^*$
+ des mots quelconques sur l'alphabet $\{a,b\}$ (= mots ne contenant
+ que des $a$ et des $b$).
+\item $(a|bb){*}$ dénote le langage $\{a,bb\}^*$ des mots du précédent
+ dont les $b$ viennent par paires.
+\item $aba(a|b|c|d){*}$ ...mots ayant $aba$ pour
+ préfixe.
+\item $(a|b|c|d){*}aba$ ...mots ayant $aba$ pour suffixe.
+\item $(a|b|c|d){*}aba(a|b|c|d){*}$ ...mots ayant $aba$ pour facteur.
+\end{itemize}
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Expressions rationnelles (suite)}
+
+Autres exemples d'expressions rationnelles sur $\Sigma =
+\{a,b,c,d\}$ :
+
+\begin{itemize}
+\item $(a|b|c|d){*}a(a|b|c|d){*}b(a|b|c|d){*}a(a|b|c|d){*}$ ...mots
+ ayant $aba$ pour sous-mot.
+\item $(ba{*}){*}$ dénote le langage $(\{b\}\{a\}^*)^* =
+ \{b,ba,baa,\ldots\}^*$ des mots formés d'un certain nombre de $b$
+ chacun suivi d'un certain nombre de $a$.
+\item $a{*}(ba{*}){*}$ est en fait équivalente à $(a|b){*}$
+ (dénotant le langage $\{a,b\}^*$).
+\item $(a|b)\underline{\varepsilon}(c|d)$ est équivalente à
+ $(a|b)(c|d)$ et dénote $\{ac,bc,ad,bd\}$.
+\item $(a|b)\bot(c|d)$ dénote le langage $\{a,b\} \varnothing \{c,d\}$
+ qui est vide.
+\end{itemize}
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Expressions rationnelles : définition formelle}
+
+Formellement, par induction sur la complexité :
+
+\itempoint $\bot$ est une r.e. dénotant $\varnothing$,
+
+\itempoint $\underline{\varepsilon}$ est une r.e. dénotant
+$\{\varepsilon\}$,
+
+\itempoint si $x\in\Sigma$ alors $x$ est une r.e. dénotant $\{x\}$,
+
+\itempoint si $r_1,r_2$ sont deux r.e. dénotant $L_1$ et $L_2$
+alors $r_1 r_2$ est une r.e. dénotant $L_1 L_2$,
+
+\itempoint ...et $(r_1|r_2)$ est une r.e. dénotant $L_1\cup L_2$,
+
+\itempoint si $r$ est une r.e. dénotant $L$ alors $(r){*}$ est une
+r.e. dénotant $L^*$.
+
+\bigskip
+
+\itempoint Un langage rationnel est un langage dénoté par une r.e. ;
+si $r$ est une r.e., on note $L(r)$ le langage qu'elle dénote.
+
+\smallskip
+
+{\footnotesize
+
+(+ règles sur l'omission des parenthèses...)
+
+\par}
+
+\bigskip
+
+\itempoint On dit que $w$ \textbf{vérifie} $w$ quand $w \in L(r)$.
+
+\smallskip
+
+\itempoint On dit que $r$ et $r'$ sont \textbf{équivalentes} quand
+$L(r) = L(r')$.
+
+\end{frame}
+%
+\begin{frame}
+\frametitle{Questions algorithmiques}
+
+On veut maintenant se poser les questions suivantes :
+
+\begin{itemize}
+\item Donnés $w$ (un mot) et $r$ (une r.e.), comment décider
+ algorithm\textsuperscript{t} si $w \in L(r)$ ?
+\item Données $r$ et $r'$ (deux r.e.), comment décider
+ algorithm\textsuperscript{t} si $L(r) = L(r')$ ?
+\item Donnée $r$, existe-t-il une r.e. $r'$ telle que $L(r') =
+ \Sigma^* \setminus L(r)$ (i.e., le langage complémentaire d'un
+ rationnel est-il rationnel) et si oui, comment la trouver
+ algorithm\textsuperscript{t} ?
+\item Données $r_1$ et $r_2$, existe-t-il une r.e. $r$ telle que $L(r)
+ = L(r_1) \cap L(r_2)$ (i.e., l'intersection de deux langages
+ rationnels est-il rationnel) et si oui, comment la trouver
+ algorithm\textsuperscript{t} ?
+\end{itemize}
+
+La résolution de ces problèmes passera par la notion
+d'\textbf{automate fini}.
+
+\end{frame}
+%
+\end{document}