%% This is a LaTeX document. Hey, Emacs, -*- latex -*- , get it? \documentclass[12pt,a4paper]{article} \usepackage[francais]{babel} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} %\usepackage{ucs} \usepackage{times} % A tribute to the worthy AMS: \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsthm} % \usepackage{mathrsfs} \usepackage{wasysym} \usepackage{url} % \usepackage{graphics} \usepackage[usenames,dvipsnames]{xcolor} \usepackage{tikz} \usetikzlibrary{arrows,automata,positioning} \usepackage{hyperref} % \theoremstyle{definition} \newtheorem{comcnt}{Tout} \newcommand\thingy{% \refstepcounter{comcnt}\smallskip\noindent\textbf{\thecomcnt.} } \newcommand\exercice{% \refstepcounter{comcnt}\bigskip\noindent\textbf{Exercice~\thecomcnt.}\par\nobreak} \renewcommand{\qedsymbol}{\smiley} % \DeclareUnicodeCharacter{00A0}{~} \DeclareUnicodeCharacter{03B5}{$\varepsilon$} % \DeclareMathSymbol{\tiret}{\mathord}{operators}{"7C} \DeclareMathSymbol{\traitdunion}{\mathord}{operators}{"2D} % % \DeclareFontFamily{U}{manual}{} \DeclareFontShape{U}{manual}{m}{n}{ <-> manfnt }{} \newcommand{\manfntsymbol}[1]{% {\fontencoding{U}\fontfamily{manual}\selectfont\symbol{#1}}} \newcommand{\dbend}{\manfntsymbol{127}}% Z-shaped \newcommand{\danger}{\noindent\hangindent\parindent\hangafter=-2% \hbox to0pt{\hskip-\hangindent\dbend\hfill}} % \newcommand{\spaceout}{\hskip1emplus2emminus.5em} \newif\ifcorrige \corrigetrue \newenvironment{corrige}% {\ifcorrige\relax\else\setbox0=\vbox\bgroup\fi% \smallbreak\noindent{\underbar{\textit{Corrigé.}}\quad}} {{\hbox{}\nobreak\hfill\checkmark}% \ifcorrige\par\smallbreak\else\egroup\par\fi} \newenvironment{commentaire}% {\ifcorrige\relax\else\setbox0=\vbox\bgroup\fi% \smallbreak\noindent{\underbar{\textit{Commentaires.}}\quad}} {{\hbox{}\nobreak\hfill\maltese}% \ifcorrige\par\smallbreak\else\egroup\par\fi} % % % NOTE: compile dot files with % dot2tex --figonly -f tikz --tikzedgelabels --graphstyle=automaton file.dot > file.tex \tikzstyle{automaton}=[>=stealth',initial text={},thick,every loop/.style={min distance=7mm,looseness=5}] \tikzstyle{state}=[] \tikzstyle{final}=[accepting by arrow] % % % \begin{document} \ifcorrige \title{INF105\\Contrôle de connaissances — Corrigé\\{\normalsize Théorie des langages}} \else \title{INF105\\Contrôle de connaissances\\{\normalsize Théorie des langages}} \fi \author{} \date{18 juin 2021} \maketitle \pretolerance=8000 \tolerance=50000 \vskip1truein\relax \noindent\textbf{Consignes.} Les exercices sont totalement indépendants. Ils pourront être traités dans un ordre quelconque, mais on demande de faire apparaître de façon très visible dans les copies où commence chaque exercice. \medbreak L'usage de tous les documents (notes de cours manuscrites ou imprimées, feuilles d'exercices, livres) est autorisé. L'usage des appareils électroniques est interdit. \medbreak Durée : 1h30 Barème \emph{indicatif} : \textcolor{red}{à remplir} \ifcorrige Ce corrigé comporte \textcolor{red}{nnn} pages (page de garde incluse) \else Cet énoncé comporte \textcolor{red}{nnn} pages (page de garde incluse) \fi \vfill {\tiny\noindent \immediate\write18{sh ./vc > vcline.tex} Git: \input{vcline.tex} \immediate\write18{echo ' (stale)' >> vcline.tex} \par} \pagebreak % % % \exercice Dans cet exercice, on pose $\Sigma = \{a,b\}$. On considère l'expression rationnelle $r := bb{*}a(a|b){*}$, et soit $L := L(r)$ le langage qu'elle dénote (autrement dit, c'est le langage constitués des mots qui commencent par un nombre $\geq 1$ de fois la lettre $b$, immédiatement suivis par la lettre $a$, puis n'importe quoi). (0) Pour chacun des mots suivants, dire si oui ou non il appartient à $L$ (c'est-à-dire s'il vérifie $r$) : $\varepsilon$ (le mot vide), $a$, $b$, $ab$, $ba$, $bb$, $bab$, $bba$, $baba$. On ne demande pas de justifier les réponses. \emph{Il est fortement conseillé, dans toutes les questions suivantes, d'utiliser les mots qui viennent d'être listés pour vérifier les automates successifs qu'on calculera.} (Par exemple, pour un automate censé reconnaître le langage $L$, on vérifiera qu'il accepte bien les mots qu'on a identifiés comme appartenant à $L$ et pas ceux qu'on a identifiés comme n'appartement pas à $L$.) Les fautes pouvant être détectées par cette vérification seront plus lourdement sanctionnées. (1) Traiter l'une \emph{ou} l'autre des questions suivantes : (i) construire l'automate de Glushkov $\mathscr{A}_1$ de $r$ ; (ii) construire l'automate de Thompson de $r$, puis éliminer les transitions spontanées (= $\varepsilon$-transitions) de ce dernier (on retirera les états devenus inutiles) : on appellera $\mathscr{A}_1$ l'automate ainsi obtenu. (Dans les deux cas, on obtient le même automate fini $\mathscr{A}_1$. À défaut de donner l'automate de Glushkov ou de Thompson, donner un NFA reconnaissant $L$ pourra apporter une partie des points.) (2) Déterminiser l'automate $\mathscr{A}_1$. On appellera $\mathscr{A}_2$ l'automate en question. On rappelle qu'on attend ici un automate fini \emph{déterministe complet}. (3) Minimiser l'automate $\mathscr{A}_2$. On appellera $\mathscr{A}_3$ l'automate canonique du langage $L$ ainsi obtenu. (4) Déduire de $\mathscr{A}_3$ un automate fini déterministe complet $\mathscr{A}_4$ reconnaissant le langage $M := \Sigma^*\setminus L$ complémentaire de $L$. (5) En appliquant l'algorithme d'élimination des états, déduire de $\mathscr{A}_4$ une expression rationnelle $s$ dénotant le langage $M$ (c'est-à-dire vérifiée exactement par les mots qui ne vérifient pas $r$). % % % \exercice On considère la grammaire hors-contexte $G$ sur l'alphabet $\Sigma = \{a,b,c\}$ ayant pour seul nonterminal son axiome $S$, et pour règles \[ S \rightarrow \varepsilon \;|\; aSbc \;|\; abSc \] On appellera « $0$ » la règle $S \rightarrow \varepsilon$, et « $1$ » la règle $S \rightarrow aSbc$, et enfin « $2$ » la règle $S \rightarrow abSc$. (1) Donner un arbre d'analyse (= de dérivation) du mot $abaabcbcc$ selon cette grammaire $G$. (On pourra d'abord lire les questions suivantes si on a du mal à trouver comment dériver ce mot.) On va maintenant montrer que $G$ est inambiguë. (2) Montrer que tout mot non-vide du langage $L := L(G)$ engendré par $G$ a nécessairement $a$ pour préfixe (i.e., commence par la lettre $a$). (3) Montrer que tout mot de $L$ dérivé en commençant par\footnote{C'est-à-dire : tout mot $w$ possédant une dérivation selon $G$ de la forme $S \Rightarrow aSc \mathrel{\Rightarrow^*} w$ où $\mathrel{\Rightarrow^*}$ désigne une succession quelconque de dérivations. Ou, ce qui revient au même (on pourra tenir ce point pour acquis) : tout mot $w$ possédant un arbre d'analyse dont la racine a trois fils étiquetés $a,S,b$ dans cet ordre.} la règle $1$ a nécessairement $aa$ ou $ac$ comme préfixe. Montrer de même que tout mot de $L$ dérivé en commençant par la règle $2$ a nécessairement $ab$ comme préfixe. (4) En déduire comment, d'après la longueur d'un mot $w$ de $L$ et ses deux premières lettres, on peut savoir par quelle règle commence nécessairement une dérivation de $w$ selon $G$ (ou, ce qui revient au même, quels sont les fils de la racine dans tout arbre d'analyse de $w$). (5) Connaissant tous les arbres d'analyse d'un mot $w$ selon $G$, expliquer comment trouver tous les arbres d'analyse du mot $awbc$ d'une part, et du mot $abwc$ d'autre part. (6) En déduire que tout mot $w \in L$ possède un unique arbre d'analyse selon $G$, et proposer (sur la base des questions précédentes) un algorithme qui le calcule. % % % \exercice (Les deux questions suivantes sont indépendantes.) \smallskip (1) Le langage $\{a^n b^n c^n : n\in\mathbb{N}\}$ n'est pas algébrique\footnote{Ce fait est démontré dans le poly, dans la section consacrée au lemme de pompage pour les langages algébriques et comme illustration de ce dernier ; on ne demande bien sûr pas ici de le redémontrer.}. Est-il rationnel ? Est-il décidable ? Est-il semi-décidable ? On justifiera soigneusement les réponses. \smallskip (2) On rappelle la définition du problème de l'arrêt : c'est l'ensemble $H$ des couples\footnote{Pour être rigoureux, on a fixé un codage permettant de représenter les programmes $e$, les entrées $x$ à ces programmes, et les couples $(e,x)$, comme des éléments de $\mathbb{N}$ (ou bien de $\Sigma^*$ sur un alphabet $\Sigma\neq\varnothing$ arbitraire). Il n'est pas nécessaire de faire apparaître ce codage dans la description des algorithmes proposés, qui peut rester informelle.} $(e,x)$ formés d'un programme (= algorithme) $e$ et d'une entrée $x$, tels que l'exécution du programme $e$ sur l'entrée $x$ termine en temps fini. On a vu en cours que $H$ était semi-décidable mais non décidable. On considère l'ensemble $J$ des triplets $(e_1,e_2,x)$ tels que $(e_1,x) \in H$ et $(e_2,x) \not\in H$. Autrement dit, le programme $e_1$ termine en temps fini quand on l'exécute sur l'entrée $x$ mais le programme $e_2$, lui, ne termine pas sur cette même entrée. L'ensemble $J$ est-il décidable ? Semi-décidable ? On justifiera soigneusement. % % % \end{document}