Éléments de logique : proposition, prédicats, validité, satisfiabilité.
Les techniques de raisonnement : direct, par cas, par contraposition, par récurrence, par l'absurde.
Eléments d'arithmétique : divisibilité, nombres premiers, propriétés du PGCD, algorithme d'Euclide, décomposition en produit de facteurs premiers, arithmétique modulaire, algorithme RSA.
Relations et ordres : relations binaires, d'équivalence, ordres partiels et totaux.
Calcul matriciel et analyse : résolution de systèmes linéaires, méthode de Gauss, Gauss Jordan et manipulation de séries de Fourier avec l'aide d'un logiciel.
Systèmes de transition : traces, exécutions, états accessibles, états récurrents, transitions récurrentes, systèmes de transitions étiquetées, propriétés générales (de sûreté, de vivacité), introduction aux réseaux de Pétri.
Processus stochastiques et modélisation : chaînes de Markov à temps discret ; distribution stationnaire, processus de Markov continus ; processus de Poisson ; processus de naissance et de mort ; application aux files d'attente simples.
Paradigmes de programmation
Contenu sans obligation d'exhaustivité: Paradigme objet, généricité, héritage et polymorphisme, introspection ; paradigme fonctionnel, lambda expressions, clôtures, objets persistants, promesses ; paradigme logique. Divers langages de programmation pourront être abordés, par exemple Java ou C# pour le paradigme objet, Javascript, Scala, Haskell ou Kotlin pour la programmation fonctionnelle, Prolog pour la programmation logique. Au mois 50% du programme (et de l'examen) concernent un autre paradigme que la programmation objet (dominant aujourd'hui).
L'enseignement comprendra un noyau de cours magistraux, mais surtout un volume important de TP sur machine. En particulier, on partira d'un ou plusieurs objectifs de programmation et leur déclinaison dans divers paradigmes.
Posséder les étapes importantes de la chaine de production de programmes.
Exploiter des éléments de logique en particulier le mode de raisonnement par déduction.
Maîtriser les notions de relations et d'ordre total et partiel, indispensables pour les questions de structuration de données.
Utiliser les notions de base du calcul matriciel et de l'analyse utiles pour la résolution de systèmes linéaires et le traitement du signal.
Utiliser des notions d'arithmétique utiles en informatique, notamment pour la cryptographie.
Comprendre le formalisme des systèmes de transitions pour la description et le contrôle de l'évolution des systèmes informatiques.
Aborder la modélisation de phénomènes aléatoires nécessaire à prendre en compte dans divers contextes comme les réseaux informatiques.