Licence Double Diplôme Informatique-Mathématiques

Catalogue des cours

Sommaire

  • Au département d'informatique à l'ENS Paris-Saclay
    • ALG1 : Algorithmique
    • AOS1 : Architecture et système d'exploitation
    • CCO1 : Calculabilité et complexité
    • MDI1 : Mathématiques discrètes
    • PCF1 : Programmation : concepts et fondements
    • LAF2 : Langages formels
    • LOG2 : Logique
    • LAL2 : Lambda-calcul et logique
    • PAV2 : Programmation avancée
    • PBD2 : Projet BD
    • PLO2 : Projet logique
    • PPR2 : Projet programmation
  • Au département de mathématiques à l'ENS Paris-Saclay
    • AFH1 : Analyse de Fourier et Hilbertienne
    • INP1 : Intégration et probabilités
    • EDO1 : Analyse numérique des EDO
    • ALI2 : Algèbre linéaire
    • ANC2 : Analyse complexe
    • MIN2 : Mini-cours
  • Au département d'informatique à l'ENS PSL
    • AST2 : Apprentissage statistique
    • BD2 : Bases de données
    • ICR2 : Initiation à la cryptologie

ALG1 : Algorithmique

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés
Evaluation:Contrôle continu, Examen
Public :Info et Math-Info
Responsables :Thomas Nowak, Thomas Chatain, Jean Goubault-Larrecq

Objectifs : Le but de ce cours est d’acquérir une maîtrise des concepts de base et de certains concepts avancés de l’algorithmique et des structures de données, ainsi que de maîtriser le calcul de leur complexité et les preuves de correction. Les concepts abordés concernent les paradigmes algorithmiques, les algorithmes sur les structures de données linéaires, arborescentes et sur les graphes.

En savoir plus...

AOS1 : Architecture et système d'exploitation

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés et pratiques
Evaluation:Contrôle continu, Projet, Examen
Public :Info
Responsables :Stefan Schwoon

Objectifs : Le cours se propose d'introduire les principes de l'architecture matérielle classique (dite de von Neumann) ainsi que ses évolutions récentes (hierarchies de mémoire, pipeline) et la programmation en assembleur. Dans la partie système d'exploitation, l'architecture à noyau est étudiée pour sa gestion des processus, de la mémoire, des fichiers et des entrées/sorties, en inclus sur réseau. Les compétences acquises seront exercées par deux projets, la conception d'un micro-processeur et la programmation d'un shell.

En savoir plus....

CCO1 : Calculabilité et complexité

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés
Evaluation:Contrôle continu, Examen
Public :Info et Math-Info
Responsables :Philippe Schnoebelen, Jean Goubault-Larrecq

Objectifs : Le but de ce cours est de comprendre les limites de ce qui est calculable d'une part, et de ce qui est calculable efficacement d'autre part. Il sera donc question, dans une première partie (calculabilité) des modèles de calculs, au premier rang desquels les machines de Turing, mais aussi les fonctions récursives. On y verra que certains langages, au premier rang desquels le problème de l'arrêt, sont indécidables. Dans la deuxième partie (complexité), il sera question de savoir ce qu'on peut calculer ou non sous des contraintes de temps, ou d'espace. La NP-complétude, et la complétude pour d'autres classes de complexité, sera étudiée. La notion de réduction sera importante dans les deux parties.

En savoir plus...

MSI1 : Mathématiques discrètes

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés
Evaluation:Contrôle continu, Examen
Public :Info
Responsables :Stéphane Le Roux

Objectifs : L'objectif est de donner aux étudiant.es une culture des mathématiques, surtout discrètes mais pas uniquement, requise pour suivre les cours de L3 et du M1 MPRI. Le cours est composé de deux parties. La première partie (6 séances) se concentre sur la théorie des ensembles ; la seconde partie (8 séances) aborde des notions de combinatoire, structures ordonnées, points fixes, récurrences, monoïdes et probabilités.

En savoir plus...

PCF1 : Programmation : concepts et fondements

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés et pratiques
Evaluation:Contrôle continu, Projet, Examen
Public :Info
Responsables :Jean Goubault-Larrecq, Mihaela Sighireanu

Objectifs : Ce cours est d'abord une introduction aux différents paradigmes des langages de programmation, des constructions typiques de ces langages et de ce qui fait que certains sont dits impératifs et d'autres fonctionnels par exemple. Il y sera question de portée (lexicale, opposée à la liaison dynamique), de passage de paramètres, de constructions de types de données, de compilation et de représentation en mémoire des objets. La définition formelle des langages de programmation (lexique, syntaxe et sémantique) sera abordée en utilisant les notions d'expressions régulière, de grammaire non-contextuelles et de traduction et interprétation orientées par la syntaxe. Ces notions seront mises dans le contexte d'un interpréteur ou d'une chaine de compilation. La question de savoir ce qu'un programme fait mènera à la notion de sémantique, opérationnelle ou dénotationnelle. On évoquera comment ces sémantiques justifient la correction de logiques comme la logique de Hoare. La notion de systèmes de types sera étudiée, et notamment le fait qu'un programme bien typé offre des garanties d'absence d'erreurs à l'exécution.

En savoir plus...

semestre 2

LAF2 : Langages formels

Credits :6 ECTS
Nombre d'heures :56 (+14 renforcement)
Type :Leçons, Travaux dirigés et pratiques
Evaluation:Contrôle continu, Projet, Examen
Public :Info, Info-Math
Responsables :Sam van Gool, Stefan Schwwon

Objectifs : Ce cours étudie les familles de langages rationnels et algébriques, des concepts essentiels de l'informatique fondamentale. Entre autres, nous présentons différentes caractérisations de ces langages en termes d'automates, d'expressions régulières, de grammaires, de monoïdes et de logique. Une application majeure étant l'analyse lexicale et syntaxique dans la construction des compilateurs, nous en étudierons les bases théoriques et les mettrons en pratique à travers un projet.

En savoir plus...

LOG2 : Logique

Credits :6 ECTS
Nombre d'heures :54 (+16 renforcement)
Type :Leçons, Travaux dirigés
Evaluation:Contrôle continu, Examen
Public :Info
Responsables :Sam van Gool

Objectifs : La logique est au fondement à la fois des mathématiques et de l'informatique. Ce cours étudie des aspects de la logique relevant de ces deux disciplines, en abordant des thèmes fondamentaux et des thèmes plus avancés, énumérés ci-dessous. À l'issue du cours, les étudiants disposeront d'une solide formation de base en logique et seront capables d'appliquer des méthodes logiques en informatique.

En savoir plus...

LAL2 : Lambda-calcul et logique

Credits :6 ECTS
Nombre d'heures :54 (+16 renforcement)
Type :Leçons, Travaux dirigés et pratiques
Evaluation:Contrôle continu, Examen
Public :Info
Responsables :Jean Goubault-Larrecq, Guillaume Scerri

Objectifs : Le but de ce cours est de comprendre les bases du lambda-calcul, un formalisme qui est à la fois le cœur des langages de programmation fonctionnels et le langage des preuves dans diverses logiques, intuitionnistes ou classiques, propositionnelles ou non. La correspondance entre langages de programmation et preuves est la correspondance de Curry-Howard. Ce cours se déroule en trois parties: (1) le lambda-calcul pur, ses propriétés, y compris le fait qu'il code exactement les fonctions calculables; (2) logique et démonstrations, la correspondance de Curry-Howard; (3) implémentations, machines, et lambda-calculs à substitutions explicites.

En savoir plus...

PAV2 : Programmation avancée

Credits :6 ECTS
Nombre d'heures :48
Type :Leçons, Travaux dirigés et pratiques
Evaluation:Contrôle continu, Projet, Examen
Public :Info
Responsables :Jacques-Henri Jourdan

Objectifs : Le cours présente différents concepts des langages de programmation

modernes: les systèmes de modules, les classes et signatures/interfaces,

les foncteurs/classes génériques et GADT, les exceptions et les continuations, les coroutines, les moniteurs, le typage avec permissions, mémoire faibles, modèle map-reduce, et les mémoires transactionnelles. Ces concepts seront illustrés par des langages déjà vus (C, C++, Ocaml, Scala) ou de nouveaux langages (Haskell et Rust).

En savoir plus...

PBD2 : Projet BD

Credits :6 ECTS
Nombre d'heures :24 (+24 en autonomie)
Type :Travaux pratiques
Evaluation:Contrôle continu
Public :Info
Responsables :Guillaume Scerri

Objectifs : Le but de ce projet est de réaliser un système de gestion de bases de données (SGBD dans la suite), capable d'éxécuter des requêtes SQL, y compris des requêtes de création/modification de données, sur des données stockées sur disque. Le projet sera fait par groupe, chaque groupe réalisant une partie du système et devant s'interfacer avec les autres groupes.

En savoir plus...

PLO2 : Projet logique

Credits :6 ECTS
Nombre d'heures :24 (+24 en autonomie)
Type :Travaux pratiques
Evaluation:Contrôle continu
Public :Info
Responsables :Thomas Chatain

Objectifs : Ce projet est en deux parties.

  1. La première partie porte sur le problème SAT: implémentation de stratégies de résolution, encodage (réduction) de problèmes NP-complets en SAT et résolution.
  2. La seconde partie porte sur les assistants de preuves. Il s'agit de construire une bibliothèque de lemmes prouvés sur un domaine défini chaque année.

En savoir plus...

PPR2 : Projet programmation

Credits :6 ECTS
Nombre d'heures :24 (+24 en autonomie)
Type :Travaux pratiques
Evaluation:Contrôle continu
Public :Info
Responsables :Stefan Schwoon

Objectifs : Le but du projet est d'introduire les élèves à la programmation orientée objet ainsi qu'à la gestion d'un projet collaboratif en petit groupe. Le projet commence par une introduction au langage Scala et aux concepts de la programmation orientée objet (classes, objets, héritage, polymorphie), aux bibliothèques disponibles dans Scala, et au système de gestion de versions et de partage de Git. Le sujet précis du projet est variable selon l'année, mais comprend généralement trois parties, avec une soutenance pour chacune. La première partie sert à la familiarisation avec le langage, la seconde à l'utilisation avancée des classes et de l'héritage, la troisième à compléter la fonctionnalité.

En savoir plus...