Démontrer et programmer en Python

Relier conjecture, démonstration et programmes Python : logique, récurrence, boucles, listes et recherche d’un seuil.

Environ 45 minutes

  • Distinguer expérimentation et preuve
  • Utiliser implication, négation et contre-exemple
  • Traduire une récurrence en boucle et justifier son arrêt
Sommaire
  1. 1. Lire une proposition avant de la tester
  2. 2. Choisir une preuve adaptée
  3. 3. Programmer et contrôler un seuil
  4. 4. Listes, fonctions et lecture au bac

Un programme qui vérifie mille cas a-t-il démontré une propriété ?

Le calcul numérique aide à découvrir des régularités, à tester une idée et à repérer une erreur. Une démonstration explique pourquoi une propriété est vraie pour toutes les valeurs annoncées. Ces démarches se complètent sans se confondre. Cette leçon mobilise les fonctions, les suites et les probabilités déjà rencontrées. Elle reprend les outils de programmation de seconde et de première : variables, affectations, conditions, boucles, fonctions et listes. Aucune connaissance de classes ou de récursivité informatique n’est nécessaire. L’objectif est de comprendre ce que fait un programme, de l’exécuter et de justifier mathématiquement ses résultats.

1. Lire une proposition avant de la tester

Une proposition mathématique est une phrase dont on peut discuter la vérité dans un cadre défini. « Tout entier naturel est inférieur à son carré » est fausse, car l’entier 0 et l’entier 1 vérifient une égalité et non une inégalité stricte. L’ensemble de départ et le sens de chaque comparaison sont donc essentiels. Une propriété valable pour les entiers strictement positifs peut échouer à zéro ; une propriété sur les réels positifs peut différer de celle sur les entiers.

Une implication P ⇒ Q affirme que lorsque P est vraie, Q l’est aussi. Sa réciproque Q ⇒ P est une autre proposition. Une équivalence exige les deux sens. Par exemple, si un entier est divisible par 4, il est pair ; la réciproque est fausse, puisque 6 est pair sans être divisible par 4. Être pair est ici nécessaire pour être divisible par 4, mais ne suffit pas. Être divisible par 4 est une condition suffisante de parité.

La négation de « tous les éléments vérifient P » est « il existe un élément qui ne vérifie pas P ». La négation de « il existe un élément vérifiant P » est « aucun élément ne vérifie P ». Pour nier « a < x < b », il faut écrire « x ≤ a ou x ≥ b ». Le connecteur ou est inclusif : il n’interdit pas que les deux propriétés soient vraies simultanément. Une négation correctement formulée guide souvent la recherche d’un contre-exemple.

Vocabulaire

Conjecture :
Propriété envisagée à partir d’observations, mais qui reste à démontrer ou à réfuter.
Contre-exemple :
Cas qui respecte les hypothèses et contredit la conclusion d’une affirmation universelle.
Affectation :
Instruction qui remplace la valeur associée à une variable ; le signe = en Python ne représente pas une égalité à démontrer.

Exemple résolu

Un programme teste n² + n + 41 pour les entiers n de 0 à 39 et trouve toujours un nombre premier. Peut-on conclure que cette expression est première pour tout entier naturel ?

  1. Étape 1 : Les tests portent sur un ensemble fini ; la proposition envisagée porte sur une infinité d’entiers.
  2. Étape 2 : Essayons n = 41. L’expression devient 41² + 41 + 41 = 41 × 43.
  3. Étape 3 : Ce nombre possède deux diviseurs strictement compris entre 1 et lui-même : la proposition universelle est fausse.

Résultat : Les tests suggéraient une conjecture ; le cas n = 41 la réfute. Une série de succès numériques ne prouve pas une affirmation universelle.

Piège à éviter : Le contre-exemple doit satisfaire les hypothèses : utiliser un nombre non entier ne réfuterait pas une proposition limitée aux entiers naturels.

À toi d'essayer

On affirme : « Pour tous réels a et b, si a² = b², alors a = b. » Réfute cette proposition puis donne une formulation correcte.

Voir la réponse

Prends a = 2 et b = −2 : les carrés sont égaux et les nombres sont différents. Une formulation correcte est : si a² = b², alors a = b ou a = −b, car (a − b)(a + b) = 0.

2. Choisir une preuve adaptée

Une preuve directe part des hypothèses et enchaîne des conséquences justifiées. La contraposée transforme P ⇒ Q en non Q ⇒ non P ; ces deux implications sont équivalentes. Pour montrer qu’un entier dont le carré est pair est lui-même pair, on peut établir qu’un entier impair a un carré impair : si n = 2k + 1, alors n² = 2(2k² + 2k) + 1. Ce calcul démontre la contraposée et donc l’implication initiale.

Le raisonnement par l’absurde ajoute la négation de la conclusion aux hypothèses et recherche une contradiction. La disjonction des cas traite toutes les possibilités : pour un entier, pair ou impair ; pour un réel, négatif, nul ou positif. Une démonstration ne peut pas oublier un cas frontière. Un raisonnement par équivalence est utile pour résoudre une équation, mais chaque transformation doit être réversible. Élever au carré peut ajouter des solutions qu’il faudra vérifier dans l’équation initiale.

La récurrence sert à établir une propriété P(n) pour tous les entiers à partir d’un rang initial. Il faut vérifier l’initialisation, puis prouver que pour un entier n quelconque du domaine, P(n) entraîne P(n + 1). L’hypothèse de récurrence n’affirme pas déjà la propriété à tous les rangs ; elle est une hypothèse temporaire utilisée dans l’étape d’hérédité. La conclusion réunit les deux étapes et cite le rang de départ.

Exemple résolu

La suite est définie par u₀ = 1 et uₙ₊₁ = (uₙ + 3)/2. Démontrer que uₙ < 3 pour tout entier n ≥ 0, puis étudier ses variations.

  1. Étape 1 : Initialisation : u₀ = 1 < 3.
  2. Étape 2 : Hérédité : si uₙ < 3, alors uₙ + 3 < 6, donc uₙ₊₁ = (uₙ + 3)/2 < 3. La propriété est vraie à tout rang par récurrence.
  3. Étape 3 : La différence uₙ₊₁ − uₙ vaut (3 − uₙ)/2, strictement positive grâce à la propriété précédente.

Résultat : La suite reste strictement inférieure à 3 et elle est strictement croissante. La borne prouvée fournit le signe nécessaire pour les variations.

Piège à éviter : Observer des termes croissants ne prouve pas la croissance à tous les rangs ; le signe de la différence doit être établi pour un rang quelconque.

Les premiers termes augmentent vers 3 ; ce dessin suggère le comportement que la récurrence et le calcul de différence démontrent.

À toi d'essayer

Une preuve par récurrence vérifie P(1) puis démontre P(n) ⇒ P(n + 1) pour tout n ≥ 1. Peut-elle conclure que P(0) est vraie ? Explique.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

3. Programmer et contrôler un seuil

En Python, une variable contient une valeur d’un certain type. Une condition utilise notamment == pour tester une égalité, alors que = affecte une valeur. Les opérateurs and et or traduisent les connecteurs et et ou. Les parenthèses aident à expliciter le regroupement des conditions. On distingue aussi une division ordinaire, qui peut produire un nombre décimal approché, et les calculs entiers exacts. Un résultat affiché en décimal doit toujours être interprété avec la précision de la machine.

Pour la suite précédente, on peut chercher le premier rang dont le terme atteint 2,9. Le code suivant comporte trois lignes ; la mise à jour de la boucle est placée sur la même ligne que sa condition. La virgule dans une affectation simultanée permet de calculer les nouvelles valeurs à partir des anciennes. Les décimaux s’écrivent avec un point en Python, contrairement aux décimaux du texte mathématique français.

u = 1.0
n = 0
while u < 2.9: u, n = (u + 3) / 2, n + 1

Au début de chaque passage dans la boucle, u représente uₙ. C’est un invariant : il est vrai au départ, puis la mise à jour conserve cette correspondance. Lorsque la condition devient fausse, u ≥ 2,9. Comme les termes précédents étaient strictement inférieurs au seuil, le rang obtenu est le premier qui convient. Pour justifier l’arrêt, on peut établir uₙ = 3 − 2 × (1/2)ⁿ ; cette formule tend vers 3, donc un seuil strictement inférieur à 3 est finalement dépassé.

Exemple résolu

Exécuter le programme de recherche du seuil 2,9 et vérifier le rang obtenu.

  1. Étape 1 : Les valeurs successives sont u₀ = 1 ; u₁ = 2 ; u₂ = 2,5 ; u₃ = 2,75 ; u₄ = 2,875.
  2. Étape 2 : La condition est encore vraie au rang 4 ; la mise à jour produit u₅ = 2,9375.
  3. Étape 3 : La condition u < 2,9 est désormais fausse. On vérifie les deux rangs voisins : u₄ < 2,9 ≤ u₅.

Résultat : Le programme se termine avec n = 5 et u = 2,9375 ; le premier rang qui convient est 5.

Piège à éviter : Remplacer le seuil par 3 empêcherait cet algorithme de s’arrêter en arithmétique exacte, puisque tous les termes sont strictement inférieurs à 3.

Un contrôle utile comprend donc un cas ordinaire et un cas limite. Si le seuil vaut 1, la boucle ne s’exécute pas et le rang retourné vaut 0. Un programme qui initialise n à 1 sans adapter u commet un décalage entre le rang et le terme. L’ordre des affectations est également important : une mise à jour simultanée évite d’utiliser involontairement une valeur déjà modifiée.

4. Listes, fonctions et lecture au bac

Une liste rassemble des valeurs ordonnées. Ses indices commencent à 0. L’instruction valeurs = [k * k for k in range(5)] construit les carrés pour k égal à 0, 1, 2, 3 et 4. La borne finale 5 est exclue. La liste contient cinq éléments ; valeurs[2] est le troisième, donc 4. On peut ajouter un élément par append, supprimer un élément par son indice avec del, ou parcourir directement les valeurs avec une boucle.

Les indices commencent à zéro ; la valeur située à l’indice 3 est 9, et non le quatrième entier élevé au carré.

Une fonction permet de séparer une tâche et de la réutiliser. La définition def carre(x): return x * x calcule un carré sans modifier une liste extérieure. L’appel carre(-3), écrit avec le signe moins du clavier dans Python, renvoie 9. Le mot return transmet le résultat au programme appelant ; un affichage avec print ne joue pas le même rôle. Une fonction de calcul peut ainsi servir plusieurs fois dans une simulation ou dans un traitement de liste.

À toi d'essayer

La liste mesures contient les valeurs [2, 5, 3, 8]. Écris une expression Python qui calcule combien de ces valeurs sont strictement supérieures à 4, sans modifier la liste.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

Au bac : expliquer une boucle et sa preuve

  1. Identifie les entrées, les variables, leurs valeurs initiales et le résultat attendu.
  2. Construis une courte table d’exécution avec les premiers passages.
  3. Formule une propriété qui reste vraie au début de chaque passage, puis explique sa conservation.
  4. Justifie l’arrêt et relie la condition de sortie à la question mathématique.
  5. Distingue le résultat expérimental de la propriété démontrée pour tous les rangs.

Bilan du chapitre

SituationRésultat ou mécanisme
Tests numériquesIls explorent des cas et peuvent réfuter une proposition.
Preuve généraleElle justifie tous les cas annoncés.
Boucle de seuilSon invariant explique les valeurs et sa terminaison exige une justification.
Liste PythonSon ordre et ses indices font partie de son sens.

À retenir

  • Une implication et sa réciproque sont deux propositions distinctes.
  • Un seul contre-exemple suffit à réfuter une affirmation universelle.
  • La récurrence associe initialisation, hérédité et conclusion.
  • Une boucle correcte associe une correspondance entre variables et objets mathématiques à une condition d’arrêt justifiée.

Fiche de révision

Avant d’exécuter, préciser le domaine et les comparaisons évite les erreurs de frontière.

Une table de valeurs aide à lire un algorithme ; l’invariant explique pourquoi il fonctionne.

Le dernier rang exclu de range et le premier indice d’une liste sont deux points à contrôler systématiquement.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursReprends l’essentiel avant de passer à la suite.

    Prolonge l’expérience !

    Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

    Ici, tu débloques aussi 2 corrections détaillées.

    Parent ? Suivez les progrès de votre enfant.

    Tous les cours de Mathématiques