Mines Option Informatique MP 2014Sujet et rapport du jury
Pas encore noté
Téléchargements
- Corrigé : pas encore disponible
Ces sujets peuvent vous intéresser
Pas encore de corrigé pour ce sujet : voici des sujets proches corrigés.
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.
A 2014 INFO. MP
ECOLE DES PONTS PARISTECH, SUPAERO (ISAE), ENSTA PARISTECH, TELECOM PARISTECH, MINES PARISTECH, MINES DE SAINT-ETIENNE, MINES DE NANCY, TELECOM BRETAGNE, ENSAE PARISTECH (FILIERE MP) ECOLE POLYTECHNIQUE (FILIERE TSI)
ECOLE DES PONTS PARISTECH, SUPAERO (ISAE), ENSTA PARISTECH, TELECOM PARISTECH, MINES PARISTECH, MINES DE SAINT-ETIENNE, MINES DE NANCY, TELECOM BRETAGNE, ENSAE PARISTECH (FILIERE MP) ECOLE POLYTECHNIQUE (FILIERE TSI)
CONCOURS 2014
EPREUVE d'INFORMATIQUE
Filière : MP
Durée de l'épreuve : 3 heures.
L'utilisation d'une calculatrice est autorisée.
EPREUVE d'INFORMATIQUE
Filière : MP
Durée de l'épreuve : 3 heures.
L'utilisation d'une calculatrice est autorisée.
Sujet mis à la disposition des concours :
Cycle International, ecoles des Mines, TELECOM SudParis, TPE-EIVP.
Cycle International, ecoles des Mines, TELECOM SudParis, TPE-EIVP.
L'énoncé de cette épreuve comporte 8 pages.
Les candidats sont priés de mentionner de façon apparente
sur la première page de la copie :
INFORMATIQUE - MP
sur la première page de la copie :
INFORMATIQUE - MP
Recommandations aux candidats
- Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.
- Tout résultat fourni dans l'énoncé peut être utilisé pour les questions ultérieures même s'il n'a pas été démontré.
- Il ne faut pas hésiter à formuler les commentaires qui semblent pertinents même lorsque l'énoncé ne le demande pas explicitement.
Composition de l'épreuve
L'épreuve est constituée :
- d'un exercice sur les automates et les langages : pages 2 et 3 ;
- d'un problème d'algorithmique et programmation : pages 3 à 8 .
Première partie : automates et langages
Un alphabet
Σ est un ensemble fini d'éléments appelés lettres. Un mot sur
Σ est une suite finie, éventuellement vide, de lettres de
Σ ; la longueur d'un mot
u est le nombre de lettres composant
u et est notée
|u| ; le mot de longueur nulle est noté
ε . On note par
Σ^∗ l'ensemble de tous les mots sur
Σ . Un langage sur
Σ est une partie de
Σ^∗ .
Soitu un mot sur un alphabet
Σ ; pour toute lettre
x de
Σ , on note
|u|_x le nombre d'occurrences de la lettre
x dans le mot
u .
On noteN l'ensemble des entiers naturels.
On considère dans cet exercice l'alphabetΣ = {a, b} .
Soitf une application quelconque définie sur
N et à valeurs dans
N . On note
L(f) l'ensemble des mots
u appartenant à
Σ^∗ vérifiant l'égalité
|u|_a = f(|u|_b) .
◻1 - On considère la fonction
f_1 définie par:
∀n ∈ N, f_1(n) = 2 . Dessiner un automate reconnaissant le langage
L(f_1) .
Soit
On note
On considère dans cet exercice l'alphabet
Soit
On considère la fonction
f_2 définie par:
∀n ∈ N, f_2(n) = 1 si
n est pair et
f_2(n) = 0 sinon.
2 - DécrireL(f_2) par une expression rationnelle de la forme
α(bab + a + b)β , où
α et
β sont des expressions rationnelles à déterminer. Justifier la réponse.
Remarque : on note aussi | l'opérateur noté + dans l'expression rationnelle ci-dessus.
3 - Dessiner un automate non nécessairement déterministe reconnaissant le langage décrit par l'expression rationnellebab + a + b . Cet automate devra nécessairement posséder un seul état initial et un seul état final.
4 - En s'appuyant sur l'expression rationnelle obtenue à la question◻2 , compléter l'automate obtenu à la question précédente pour obtenir un automate non déterministe reconnaissant le langage
L(f_2) . Cet automate devra nécessairement posséder un seul état initial et un seul état final.
5 - Déterminiser l'automate obtenu à la question précédente. On utilisera un algorithme vu en cours et on ne fera apparaître que les états accessibles depuis l'état initial.
6 - Montrer que sif n'est pas majorée par une constante, alors
L(f) n'est pas rationnel.
7 - On considère le langageL_= sur
Σ défini par
L_= = {u ∈ Σ^∗ vérifiant
|u|_a = |u|_b} . Le langage
L = est-il rationnel ?
8 - On considère le langageL ≤ sur
Σ défini par:
L_≤ = {u ∈ Σ^∗ avec
|u|_a ≤ |u|_b} . Le langage
L_(≤ est-il rationnel ? On utilisera le résultat de la question précédente.)
◻9 - On considère le langage
L_> sur
Σ défini par:
L_> = {u ∈ Σ∗ avec
|u|_a > |u|_b} . Le langage
L_> est-il rationnel ? On utilisera le résultat de la question précédente.
◻10 - Montrer que la réciproque de la proposition énoncée dans la question
◻6 est fausse.
Indication : on pourra admettre que le langageP des mots de la forme
b^n où
b est une lettre et
n est un entier premier n'est pas rationnel.
2 - Décrire
Remarque : on note aussi | l'opérateur noté + dans l'expression rationnelle ci-dessus.
3 - Dessiner un automate non nécessairement déterministe reconnaissant le langage décrit par l'expression rationnelle
4 - En s'appuyant sur l'expression rationnelle obtenue à la question
5 - Déterminiser l'automate obtenu à la question précédente. On utilisera un algorithme vu en cours et on ne fera apparaître que les états accessibles depuis l'état initial.
6 - Montrer que si
7 - On considère le langage
8 - On considère le langage
Indication : on pourra admettre que le langage
Seconde partie : logique et programmation
Préliminaire concernant la programmation
Il faudra écrire des fonctions ou des procédures à l'aide d'un langage de programmation qui pourra être soit Caml, soit Pascal, tout autre langage étant exclu. Indiquer en début d'épreuve le langage de programmation choisi; il est interdit de modifier ce choix au cours de l'épreuve. Certaines questions du problème sont formulées différemment selon le langage de programmation ; cela est indiqué chaque fois que cela est nécessaire. Lorsque le candidat écrira une fonction ou une procédure, il pourra faire appel à une autre fonction ou procédure définie dans les questions précédentes; il pourra aussi définir une procédure ou une fonction auxiliaire. Enfin, si les paramètres d'une fonction ou d'une procédure à écrire sont supposés vérifier certaines hypothèses, il ne sera pas utile, dans l'écriture de cette fonction ou de cette procédure, de tester si les hypothèses sont bien vérifiées.
Dans les énoncés du problème, un même identificateur écrit dans deux polices de caractères différentes désignera la même entité, mais du point de vue mathématique pour la police en italique (par exemple n) et du point de vue informatique pour celle en romain (par exemple n).
On ne se préoccupera pas d'un éventuel dépassement du plus grand entier codable dans le langage de programmation choisi.
Dans les énoncés du problème, un même identificateur écrit dans deux polices de caractères différentes désignera la même entité, mais du point de vue mathématique pour la police en italique (par exemple n) et du point de vue informatique pour celle en romain (par exemple n).
On ne se préoccupera pas d'un éventuel dépassement du plus grand entier codable dans le langage de programmation choisi.
Indications pour la programmation
Caml
Si n est un entier, l'instruction
let A = make_matrix n n false;;
permet de construire une matrice carrée booléenneA à
n lignes et
n colonnes, et dont les cases sont initialisées à false.
Fin des indications pour Caml
let A = make_matrix n n false;;
permet de construire une matrice carrée booléenne
Fin des indications pour Caml
Pascal
On utilisera dans tout le sujet les déclarations ci-dessous.
CONST MAX = 100;
type Tableau_Boolean = array [0 .. MAX - 1] of Boolean;
type Matrice_Boolean = array [0 .. MAX - 1] of Tableau_Boolean;
CONST MAX = 100;
type Tableau_Boolean = array [0 .. MAX - 1] of Boolean;
type Matrice_Boolean = array [0 .. MAX - 1] of Tableau_Boolean;
On supposera que la constante MAX est suffisamment grande pour que les tableaux et matrices de types Tableau_Boolean et Matrice_Boolean puissent coder les tableaux et matrices considérés dans ce problème.
Fin des indications pour Pascal
On considère un ensemble fini
Π de
n propositions logiques distinctes :
Π = {P_0, P_1, … ,
P_(n − 1)} . On suppose qu'un ensemble d'implications entre ces propositions, appelé ensemble des implications initiales et noté
I , a déjà été établi. On peut en général déduire d'autres implications à partir de l'ensemble des implications initiales en utilisant la transitivité des implications : pour deux propositions
P et
Q appartenant à
Π , si
Q se déduit de
P à l'aide d'une suite d'implications appartenant à
I , on dit que «
P implique
Q », ce que l'on note
P ⇒ Q . Dans toute la suite, on s'intéresse aux implications que l'on peut déduire de
I .
Pour toutP dans
Π , on suppose que
I contient l'implication
P ⇒ P ; une telle implication, nommée boucle, est notée
P ⇒ _0 P .
SiP et
Q sont dans
Π , la notation
P ⇒ _1 Q signifie que l'implication
P ⇒ Q appartient à
I (pour tout
P dans
Π , on a donc aussi
P ⇒ _1 P ).
Pour tout
Si
Exemple 1 :
n = 4, I = {P_0 ⇒ _0 P_0, P_1 ⇒ _0 P_1, P_2 ⇒ _0 P_2, P_3 ⇒ _0 P_3, P_0 ⇒ _1 P_2, P_2 ⇒ _1 P_3 ,
P_3 ⇒ _1 P_0, P_3 ⇒ _1 P_1} .
Exemple 2 :
n = 4, I = {P_0 ⇒ _0 P_0, P_1 ⇒ _0 P_1, P_2 ⇒ _0 P_2, P_3 ⇒ _0 P_3, P_0 ⇒ _1 P_1, P_1 ⇒ _1 P_2 ,
P_2 ⇒ _1 P_1, P_3 ⇒ _1 P_2} .
Pour
P et
Q dans
Π, P implique
Q (autrement dit,
P ⇒ Q ) s'il existe un entier
k ≥ 0 et
k + 1 propositions
P_(i_0), P_(i_1), …, P_(i_j), P_(i_((j + 1))), …, P_(i_k) appartenant à 7 tels que l'on ait :
-
P_(i_0) = P , -
P_(i_k) = Q , - pour
j vérifiant0 ≤ j ≤ k − 1 , l'implicationP_(i_j) ⇒ P_(i_((j + 1))) appartient àI .
Avec les notations ci-dessus, on dit alors qu'il existe une preuve de longueur
k de l'implication
P ⇒ Q , ce que l'on note
P ⇒ _k Q . Les implications de
I sont donc les preuves de longueur 0 (si
P = Q ) ou 1 .
Dans l'exemple 1, on aP_0 ⇒ _2 P_3 car on a
P_0 ⇒ _1 P_2 et
P_2 ⇒ _1 P_3 ; on a aussi
P_0 ⇒ _3 P_3 car on peut ajouter une boucle en considérant les trois implications
P_0 ⇒ P_0, P_0 ⇒ _1 P_2 et
P_2 ⇒ _1 P_3 . En revanche, on n'a pas :
P_0 ⇒ _2 P_1 .
Dans l'exemple 1, les implications qui peuvent être prouvées mais qui n'appartiennent pas àI sont :
P_0 ⇒ P_1, P_0 ⇒ P_3, P_2 ⇒ P_0, P_2 ⇒ P_1, P_3 ⇒ P_2 .
Dans l'exemple 1, on a
Dans l'exemple 1, les implications qui peuvent être prouvées mais qui n'appartiennent pas à
11 - Pour l'exemple 2, donner la liste des implications qui peuvent être prouvées mais qui n'appartiennent pas à
I .
◻12 - Soient
P et
Q dans
Π ; soient
h et
k deux entiers positifs ou nuls vérifiant :
h ≤ k . Montrer que si on a
P ⇒ _h Q , alors on a aussi
P ⇒ _k Q .
◻13 - Soient
P et
Q dans
Π . Montrer qu'on a l'implication
P ⇒ Q si et seulement si on a
P ⇒ _(n − 1)Q .
Une matrice booléenne est une matrice dont les coefficients prennent uniquement les valeurs faux et vrai (false et true en langage de programmation). Le produit de matrices booléennes s'obtient selon la formule habituelle en prenant comme somme de deux valeurs booléennes le «ou logique» (disjonction, notée V) et comme produit de deux valeurs booléennes le «et logique» (la conjonction, notée
Λ ); le produit de deux matrices
A et
B est noté
A × B .
Par exemple, si on considère les deux matrices :A_0 = (vrai, vrai; faux, vrai) et
B_0 = (faux, vrai; vrai, faux) , le produit
A_0 × B_0 vaut
(vrai, vrai; vrai, faux) .
On ne s'intéressera dans ce problème qu'à des matrices carrées ; la dimension d'une matrice carrée est son nombre de lignes (et donc de colonnes). Sik est un entier strictement positif, on obtient la matrice
A^k en multipliant
k − 1 fois la matrice
A par elle-même.
14 - On considère deux matrices carrées booléennesA et
B de même dimension
d . Il s'agit d'écrire en langage de programmation le calcul du produit
A × B .
Caml : Écrire en Caml une fonction nommée mult telle que, si A et B codentA et
B , alors mult A B renvoie une matrice codant le produit A
× B .
Pascal : Écrire en Pascal une fonction nommée mult telle que si :
Par exemple, si on considère les deux matrices :
On ne s'intéressera dans ce problème qu'à des matrices carrées ; la dimension d'une matrice carrée est son nombre de lignes (et donc de colonnes). Si
14 - On considère deux matrices carrées booléennes
Caml : Écrire en Caml une fonction nommée mult telle que, si A et B codent
Pascal : Écrire en Pascal une fonction nommée mult telle que si :
- A et B , de type Matrice_Boolean, codent
A etB , - d, de type Integer, contient la valeur de
d , alors mult (A, B, d) renvoie une matrice, de type Matrice_Boolean, codant le produitA × B .
On considère encore l'ensemble
Π des
n propositions logiques
P_0, P_1, …, P_(n − 1) et l'ensemble
I d'implications initiales entre ces propositions. On associe à
Π et
I une matrice
A carrée booléenne de dimension
n définie de la façon suivante :
- les lignes et les colonnes de
A sont indicées de 0 àn − 1 ; - soient
i etj deux entiers vérifiant0 ≤ i ≤ n − 1 et0 ≤ j ≤ n − 1 ; en notantA[i, j] le coefficient deA situé sur la ligne d'indicei et la colonne d'indicej, A[i, j] vaut vrai si et seulement si l'implicationP_i ⇒ P_j appartient àI .
Ainsi, les matrices
A_1 et
A_2 correspondant respectivement à l'exemple 1 et à l'exemple 2 sont:
16 - Montrer que, pour tout
k ≥ n − 1 , on a
A^k = A^(n − 1) .
On appelle fermeture transitive deA et on note
FT(A) la matrice
A^(n − 1) .
◻17 - Il s'agit d'écrire en langage de programmation une fonction nommée
FT qui calcule la fermeture transitive de
A en utilisant des multiplications de matrice.
Caml : Écrire en Caml la fonction FT telle que, si A code la matriceA , alors FT A renvoie la matrice
FT(A) .
Pascal : Écrire en Pascal la fonction FT telle que si :
On appelle fermeture transitive de
Caml : Écrire en Caml la fonction FT telle que, si A code la matrice
Pascal : Écrire en Pascal la fonction FT telle que si :
- A, de type Matrice_Boolean, code la matrice
A , - n , de type Integer, contient la dimension de
A , alorsFT(A, n) , de type Matrice_Boolean, renvoie la matriceFT(A) .
18 - Soit
P une proposition appartenant à
Π . Il s'agit d'écrire en langage de programmation une fonction nommée deduction qui détermine toutes les propositions
Q appartenant à 7 telles que l'on ait
P ⇒ Q . On utilisera pour cela la récursivité.
ATTENTION : On exige que la complexité de cette fonction soit de l'ordre den^2 . On ne justifiera pas la complexité de la fonction qui sera écrite.
Caml : Écrire en Caml la fonction deduction telle que si :
ATTENTION : On exige que la complexité de cette fonction soit de l'ordre de
Caml : Écrire en Caml la fonction deduction telle que si :
- A code la matrice
A , - i est un entier compris entre 0 et
n − 1 ,
alors deduction A i renvoie un tableau de booléens de longueurn tel que, pourj compris entre 0 etn − 1 , la valeur d'indice j de ce tableau vaut true si et seulement si on aP_i ⇒ P_j .
Pascal : Écrire en Pascal la fonction deduction telle que si : - A, de type Matrice_Boolean, code la matrice
A , - n , de type Integer, contient la valeur de
n , -
i , de type Integer, contient un entier compris entre 0 etn − 1 , alors deduction(A, n, i) renvoie un tableau de type Tableau_Boolean tel que, pourj compris entre 0 etn − 1 , la valeur d'indicej de ce tableau vaut true si et seulement si on aP_i ⇒ P_j .
19 - Il s'agit d'écrire en langage de programmation une fonction nommée FT_bis de complexité
n^3 calculant la matrice
FT(A) .
Caml : En utilisant la fonction deduction, écrire en Caml la fonction FT_bis telle que si A code la matriceA , alors FT_bis A renvoie la matrice
FT(A) .
Pascal : En utilisant la fonction deduction, écrire en Pascal la fonction FT_bis telle que si :
Caml : En utilisant la fonction deduction, écrire en Caml la fonction FT_bis telle que si A code la matrice
Pascal : En utilisant la fonction deduction, écrire en Pascal la fonction FT_bis telle que si :
- A, de type Matrice_Boolean, code la matrice
A , - n , de type Integer, contient la valeur de
n , alors FT_bis(A, n) renvoie la matriceFT(A) .
Soient
P et
Q deux propositions appartenant à
Π . On dit que les propositions
P et
Q sont équivalentes si on a :
P ⇒ Q et
Q ⇒ P .
SoitP appartenant à
Π . On dit ici que
P est un axiome si on a la propriété suivante : quelle que soit la proposition
Q appartenant à
Π , si on a
Q ⇒ P , alors on a aussi
P ⇒ Q et donc
P et
Q sont équivalentes; autrement dit,
P est équivalente à toute proposition qui l'implique.
20 - Donner tous les axiomes dans l'exemple 1.
21 - Donner tous les axiomes dans l'exemple 2.
On poseB = FT(A) . Des questions précédentes, on déduit que, si
i et
j sont deux entiers compris entre 0 et
n − 1 , on a
P_i ⇒ P_j si et seulement si
B[i, j] vaut vrai.
22 - Il s'agit, connaissant la matriceB , de programmer une fonction est_axiome qui indique si une proposition donnée est ou non un axiome.
Caml : Écrire en Caml la fonction est_axiome telle que si :
Soit
20 - Donner tous les axiomes dans l'exemple 1.
21 - Donner tous les axiomes dans l'exemple 2.
On pose
22 - Il s'agit, connaissant la matrice
Caml : Écrire en Caml la fonction est_axiome telle que si :
- B code la matrice B,
- i est un entier compris entre 0 et
n − 1 , alors est_axiome B i renvoie la valeur true siP_i est un axiome et la valeur false sinon.
Pascal : Écrire en Pascal la fonction est_axiome telle que si : - B, de type Matrice_Boolean, code la matrice B,
- n , de type Integer, contient la valeur de
n , - i , de type Integer, contient un entier compris entre 0 et
n − 1 , alors est_axiome(B, n, i) renvoie la valeur true siP_i est un axiome et la valeur false sinon.
On appelle suite unidirectionnelle de propositions une suite (
Q_0, Q_1, …, Q_h ), où
h est un entier positif ou nul, telle que :
- pour
i vérifiant0 ≤ i ≤ h, Q_i appartient àΠ , - pour
i vérifiant0 ≤ i ≤ h − 1, Q_i ⇒ Q_(i + 1) , - pour
i vérifiant0 ≤ i ≤ h − 1, Q_(i + 1) n'implique pasQ_i .
23 - Montrer que les propositions d'une suite unidirectionnelle de propositions sont deux à deux distinctes.
24 - SoitQ une proposition appartenant àΠ . Montrer qu'il existe un axiomeP avecP ⇒ Q .
On admet le résultat suivant : on peut partitionner
Π en sous-ensembles de sorte que deux propositions de
Π soient équivalentes si et seulement si elles appartiennent au même sousensemble. On appelle classes d'équivalence ces sous-ensembles.
Par définition : les classes d'équivalence sont non vides, l'union des classes d'équivalence est égale àΠ , l'intersection de deux classes d'équivalence est vide.
Par définition : les classes d'équivalence sont non vides, l'union des classes d'équivalence est égale à
Dans l'exemple 1, il y a deux classes d'équivalence : les classes
{P_0, P_2, P_3} et
{P_1} .
25 - Donner les classes d'équivalence dans l'exemple 2.
26 - On considère une classe d'équivalenceC contenant un axiome. Montrer que toutes les propositions contenues dans
C sont des axiomes.
25 - Donner les classes d'équivalence dans l'exemple 2.
26 - On considère une classe d'équivalence
On dit qu'une classe d'équivalence est une classe source si elle contient un axiome (auquel cas tous les éléments de la classe source sont des axiomes).
Soit
X une partie de
Π . On dit ici que
X est une axiomatique si, quelle que soit la proposition
Q appartenant à
Π , il existe une proposition
P appartenant à
X vérifiant
P ⇒ Q .
◻27 - Montrer qu'on obtient une axiomatique de cardinal minimum en choisissant une et une seule proposition dans chacune des classes sources.
◻28 - On pose encore
B = FT(A) . Il s'agit d'écrire en langage de programmation une fonction nommée axiomatique qui détermine une axiomatique de cardinal minimum. On pourra utiliser un tableau pour éliminer, lorsqu'on a choisi un axiome, les axiomes qui lui sont équivalents.
Caml : Écrire en Caml la fonction axiomatique telle que, si B code la matrice B, alors axiomatiqueB renvoie une liste d'entiers contenant les indices de propositions de
/7 formant une axiomatique de cardinal minimum.
Pascal :
On définit le type suivant :
type Pile = record
table : array [0 .. MAX - 1] of Integer;
nb : Integer;
end;
Si P est de type Pile, P code une pile de P.nb entiers situés dans P. table entre les indices 0 etP.nb − 1 .
Caml : Écrire en Caml la fonction axiomatique telle que, si B code la matrice B, alors axiomatique
Pascal :
On définit le type suivant :
type Pile = record
table : array [0 .. MAX - 1] of Integer;
nb : Integer;
end;
Si P est de type Pile, P code une pile de P.nb entiers situés dans P. table entre les indices 0 et
Écrire en Pascal la fonction axiomatique telle que si :
- B, de type Matrice_Boolean, code la matrice B,
- n , de type Integer, contient la valeur de
n ,
alors axiomatique(B, n ) renvoie un résultat de type Pile contenant les indices de propositions de 7 formant une axiomatique de cardinal minimum.
Pas de description pour le moment
