Mines Informatique 1 MPI 2026Sujet et rapport du jury
- Langages réguliers et automates finis : déterminisation, complémentaire, automate produit
- Lemme de l'étoile et langages non réguliers
- Programmation OCaml : tableaux, listes, complexité
- Représentation binaire des entiers et exponentiation rapide
- Logique du premier ordre et déduction naturelle
- Preuves par induction structurelle
- Réductions polynomiales et problème SAT
Téléchargements
- Corrigé : pas encore disponible
Présentation du sujet
Difficulté moyenneDécidabilité de l'arithmétique de Presburger à l'aide d'automates synchrones sur des vecteurs binairesAfficher ou masquer la section
Présentation du sujet
Difficulté moyenneLa première épreuve d'informatique MPI des Mines 2026 (3 heures, OCaml) est un problème unique de 30 questions en cinq sections. Elle part de l'écriture binaire des entiers pour construire des automates lisant plusieurs mots binaires en parallèle, reconnaître l'addition, écrire des formules de l'arithmétique de Presburger, puis montrer que leur validité est décidable par une construction inductive d'automates.
- 1Section 1 : implémentation de quelques fonctions utiles (Q1 à Q3)Exponentiation rapide, bijection entre les entiers de 0 à 2^n - 1 et les vecteurs binaires de taille n, puis son implémentation en OCaml.
- 2Section 2 : automates finis sur Σn (Q4 à Q13)Langages d'automates donnés, test de déterminisme complet, déterminisation par l'automate des parties, complémentaire et automate produit pour l'intersection.
- 3Section 3 : opérations arithmétiques (Q14 à Q16)Automate à deux états reconnaissant l'addition, preuve de sa correction et non-régularité du langage associé à la multiplication.
- 4Section 4 : arithmétique de Presburger (Q17 à Q22)Écriture de formules, mise sous forme simple par induction et preuves en déduction naturelle avec quantificateurs et règles de l'égalité.
- 5Section 5 : retour sur les automates (Q23 à Q30)Réduction polynomiale de Sat-Cnf à Tautologie-Presburger, projection existentielle d'un langage, construction d'un automate associé à une formule, preuve de correction et décision de la validité.
Difficulté moyenne. Le jury juge le niveau global bon et une note honorable accessible par la seule maîtrise du cours, mais très peu de candidats ont abordé sérieusement les questions 26 à 30.
Ce qu'a observé le jury
6 erreurs relevéesExponentiation rapide mal programmée · Construction de cours non formalisée · Complexité dégradée par List.lengthAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe problème balaie une large part du programme de MPI : OCaml, automates, logique et complexité. Une grande majorité des candidats a compris les notions introduites et le jury signale quelques excellentes copies, mais la restitution et l'application directe des théorèmes et algorithmes de cours sont souvent insuffisantes. Un peu plus d'un tiers des copies a subi un malus de présentation.
Les erreurs les plus sanctionnées
- 1Exponentiation rapide mal programméeQ1
Passer par les flottants et l'opérateur ** était incorrect pour des entiers. Deux appels récursifs dans le même appel font perdre la complexité logarithmique demandée.
« trop de candidats ont utilisé deux appels récursifs lors du même appel »
- 2Construction de cours non formaliséeQ9, Q13
Pour la déterminisation, il fallait définir formellement états, transitions, état initial et états finaux de l'automate des parties. L'automate de Glushkov ou l'ajout d'un état puits ne déterminisent pas.
« Un exemple de construction d'un tel automate ne constituait pas une réponse correcte à elle seule. »
- 3Complexité dégradée par List.lengthQ8
Appeler List.length à chaque tour de boucle dépasse la complexité attendue ; un filtrage suffisait. Le déterminisme devait être vérifié pour tous les états, pas seulement les états accessibles.
- 4Automate de l'addition incomplet ou non prouvéQ14, Q15
Beaucoup de propositions oublient l'état où la retenue vaut 1 et les transitions qui y restent. Pour la preuve, il fallait une justification rigoureuse, par exemple une condition nécessaire et suffisante.
« Les réponses ne faisant que paraphraser l'automate proposé à la question précédente n'ont obtenu aucun point. »
- 5Non-régularité mal justifiéeQ16
Le langage de la multiplication n'étant pas régulier, on pouvait utiliser la contraposée du lemme de l'étoile ; un argument intuitif ne suffit pas.
« Il ne suffisait pas d'arguer que reconnaître ce langage nécessite d'utiliser une “mémoire non bornée” pour conclure. »
- 6Termes interdits en arithmétique de PresburgerQ17, Q18
Les constantes 0 et 1, l'écriture 2y ou x = n ne sont pas des termes autorisés. Il fallait construire f0(x) et f1(x), puis fn(x) pour n ≥ 2.
« puisqu'ils ne font pas partie des termes autorisés dans l'arithmétique de Presburger. »
Ce qui a été bien réussi
- Les questions 5 et 6 sont parfaitement réussies par une majorité des candidats qui les ont traitées.
- Les questions 13 et 17 sont réussies ; les questions 3, 7, 10 et 12 sont globalement ou plutôt bien traitées.
- Les arbres de preuve en déduction naturelle (Q20 à Q22) sont plutôt réussis quand ils sont traités.
- La plupart des programmes OCaml sont clairs, structurés et correctement indentés.
Conseils du jury
- Donner une définition formelle complète lorsqu'une question demande de rappeler une définition, une construction ou un algorithme de cours.
- Expliquer la stratégie des fonctions OCaml non évidentes et le rôle des fonctions auxiliaires, avec des noms pertinents, sans paraphraser le code.
- Respecter les types de l'énoncé (tableaux contre listes, bool array contre int array) et connaître la complexité de Array.make, Array.length et List.length.
- Pour une preuve par induction, préciser l'ensemble, la variable, la propriété et les hypothèses utilisées dans chaque cas inductif.
- En logique, préciser la valuation avant de dire qu'une formule est vraie et distinguer le connecteur ↔ de l'équivalence sémantique ≡.
- Indiquer clairement les étapes non démontrées d'un raisonnement : le jury l'a valorisé.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
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
ÉCOLE NATIONALE DES PONTS et CHAUSSÉES, ISAE-SUPAERO, ENSTA, TÉLÉCOM PARIS, MINES PARIS - PSL, MINES SAINT-ÉTIENNE, MINES NANCY, IMT ATLANTIQUE, ENSAE PARIS, CHIMIE PARISTECH - PSL.
Durée de l'épreuve : 3 heures
L'usage de la calculatrice ou de tout dispositif électronique est interdit.
Les candidats sont priés de mentionner de façon apparente sur la première page de la copie :
Cette épreuve concerne uniquement les candidats de la filière MPI.
L'énoncé de cette épreuve comporte 9 pages de texte.
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.
Préliminaires
Travail attendu
Introduction
Dans tout le sujet, pour tout entier
Considérons par exemple le mot
Dans ce sujet, un automate fini non déterministe à un seul état initial, qu'on s'autorise à appeler simplement automate, est défini comme un tuple
- -
Σ est un alphabet fini; - -
Q est un ensemble fini d'états; - -
q_0 est un état deQ appelé état initial; - -
F est un sous-ensemble deQ appelé ensemble des états finaux ; - -
δ est une fonction deQ × Σ dansP(Q) appelée fonction de transition.
Dans tout le sujet, on fera l'hypothèse simplificatrice qu'en OCaml, on dispose d'une mémoire infinie et que les variables peuvent stocker des valeurs aussi grandes que l'on souhaite.
1. Implémentation de quelques fonctions utiles
- □1 - Écrire une fonction pow2 : int -> int qui prend en entrée un entier
n et renvoie2^n . On attend une fonction récursive de complexité temporelle enO(log(n)) .
- □2 - Exhiber une bijection entre
[ [0, 2^n − 1] ] etΣ_n .
À présent, on souhaite implémenter notre bijection. - □3 - Écrire une fonction decompose : int -> int -> int array qui prend en entrée x et n tels que
x ∈ [ [0, 2^n − 1] ] et qui renvoie l'élément deΣ_n associée par la bijection précédemment définie. On vérifiera que l'entrée est valide à l'aide d'une assertion.
2. Automates finis sur
∑_n


□ 4 - Démontrer rigoureusement que
□ 5 - Montrer que pour tout
□ 6 - Décrire sans justifier le langage
□ 7 - Proposer sans justifier un automate à 3 états qui reconnaît le langage
type automate = {
k : int ;
n : int ;
finaux : bool array ;
delta : int -> int array -> int list ;
}
□ 8 - Écrire une fonction est_deterministe_complet : automate -> bool qui vérifie si un automate
□ 9 - Soit
□ 10 - Écrire une fonction union : int array -> automate -> int array -> int array qui prend en entrée les paramètres etats, a et lettre, tels que :
- a soit un automate à
k états; - etats soit un tableau d'entiers de taille
k à valeur dans {0,1}; - lettre soit une lettre représentée par un tableau d'entiers.
□ 11 - En déduire une fonction determinise : automate -> automate qui prend en entrée un automate et renvoie un automate déterministe complet reconnaissant le même langage.
Indication : On pourra utiliser la fonction decompose plusieurs fois.
On appelle complémentaire d'un langage
□ 12 - Écrire une fonction complementaire : automate -> automate qui prend en entrée un automate et renvoie un automate reconnaissant son langage complémentaire.
□ 13 - Considérons deux automates
3. Opérations arithmétiques
- □14 - Donner, dans un premier temps sans justifier, un automate à deux états reconnaissant le langage
L_+ = {m ∈ Σ_3^∗|v_1(m) + v_2(m) = v_3(m)} . - □15 - Démontrer que l'automate proposé dans la question précédente reconnaît bien
L_+ .
◻16 - Le langageL_× = {m ∈ Σ_3^∗|v_1(m) × v_2(m) = v_3(m)} est-il reconnaissable? Justifier.
4. Arithmétique de Presburger
L'ensemble des termes est défini inductivement de la façon suivante :
- -pour tout
x ∈ V, x est un terme; - -pour deux termes
t_1 ett_2, t_1 + t_2 est un terme.
- -pour
t_1 ett_2 deux termes,t_1 = t_2 est une formule; - -pour
φ une formule,¬φ est une formule; - -pour
φ_1 etφ_2 deux formulesφ_1 → φ_2, φ_1 ∧ φ_2 etφ_1 ∨ φ_2 sont des formules; - -pour
φ une formule etx une variable qui n'apparaît pas juste après un quantificateur dansφ , alors∃x.φ et∀x.φ sont des formules.
□ 17 - Donner une formule de
□ 18 - Pour tout entier
Attention,
- (i)Elle ne contient pas les opérateurs
∨ et →. - (ii)Elle ne contient pas le quantificateur
∀ . - (iii)Pour toute sous-formule de la forme
t_1 = t_2, t_1 est une variable dansV et
- soitt_2 est une variable dansV ;
- soitt_2 = x + y avecx ety deux variables deV .
□ 20 - Prouver à l'aide de la déduction naturelle le séquent suivant où
□ 21 - Donner une formule sans variable libre de Presburger exprimant le fait que l'égalité est transitive sur les variables et la prouver en utilisant la déduction naturelle.
□ 22 - Prouver à l'aide de la déduction naturelle le séquent suivant.
5. Retour sur les automates
Tautologie-Presburger
- -Entrée : Une formule de Presburger
φ sans variable libre. - -Sortie : La valeur de vérité de cette formule.
Sat-Cnf
- -Entrée : Une formule logique sans quantificateur
φ sous forme normale conjonctive. - -Sortie : Un booléen indiquant si
φ est satisfiable.
□ 25 - Écrire une fonction automate_existe : automate -> int -> automate qui prend en entrée un automate
On note
type terme = V of int | Plus of int*int
type formule =
|Existe of int * formule
|Et of formule * formule
|Non of formule
|Egale of terme * terme
- □26 - Expliquer en langage courant le principe d'un algorithme qui prend en entrée une formule
φ sous forme simple, l'indice de la plus grande variable apparaissant dansφ , et qui renvoie un automate reconnaissantL_φ . - □27 - Faites tourner à la main votre algorithme en détaillant bien les étapes et automates intermédiaires sur la formule
φ(x_2):=¬∃x_1.¬(x_1 = x_2) pour renvoyer l'automate correspondant - □28 - Écrire une fonction automate_formule : formule -> int -> automate qui prend en entrée une formule
φ sous forme simple et l'indice de la plus grande variable apparaissant dansφ , et qui renvoie un automate reconnaissantL_φ . - □29 - Démontrer la correction de votre algorithme.
- □30 - En déduire une fonction est_vraie : formule -> int -> bool qui détermine pour une formule sous forme simple supposée sans variable libre et le plus grand indice de ses variables si elle est vraie.
A. Annexe : Règles de la déduction naturelle
Les arbres de preuves doivent être effectués à partir de l'ensemble de règles fourni ci-dessous.
- Les sujets sont la propriété du GIP CCMP. Ils sont publiés sous les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 3.0 France.
Questions fréquentes
3 questionsSur quoi porte le sujet d'informatique 1 MPI des Mines 2026 ?Afficher ou masquer la section
Questions fréquentes
3 questionsSur quoi porte le sujet d'informatique 1 MPI des Mines 2026 ?
Sur la décidabilité de l'arithmétique de Presburger : automates synchrones sur des vecteurs binaires, automate de l'addition, formules et déduction naturelle, réduction depuis Sat-Cnf et construction d'un automate pour chaque formule.
Quelles erreurs le jury a-t-il relevées en informatique 1 MPI Mines 2026 ?
Exponentiation rapide non logarithmique, déterminisation décrite sur un exemple au lieu d'être formalisée, preuves d'automates réduites à une paraphrase, termes interdits dans les formules de Presburger et malus fréquents pour la présentation.
Comment obtenir une note correcte à l'épreuve d'info 1 MPI Mines 2026 ?
Selon le jury, la maîtrise des notions de cours assurait une note honorable même en ne traitant qu'une partie du sujet. Les questions 1, 2, 4, 8, 14 et 19 ont été discriminantes.
Pas de description pour le moment
