Simplifier not (a and not b) à l'aide des lois de De Morgan
Exercice d'entraînement · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Court-circuit, tables et équivalences
Énoncé
Simplifier not (a and not b) à l'aide des lois de De Morgan. Écrire ensuite une fonction equivalentes(f, g) qui vérifie automatiquement que deux fonctions booléennes à deux variables ont la même table.
Corrigé
La simplification. De Morgan échange and et or en passant la négation à l'intérieur :
On reconnaît l'implication : « si alors » est faux dans le seul cas vrai et faux.
La vérification automatique.
def equivalentes(f, g):
"""Vrai si f et g ont la meme table de verite (2 variables).
Precondition : f et g prennent deux arguments booleens. On teste
les 4 = 2**2 lignes, ce qui est une PREUVE : la table est finie.
"""
return all(f(a, b) == g(a, b)
for a in (False, True) for b in (False, True))
>>> equivalentes(lambda a, b: not (a and not b),
... lambda a, b: (not a) or b)
True
Ce qui rend la logique confortable. Sur variables il y a lignes : un nombre fini. Un test exhaustif n'est donc pas un échantillonnage, c'est une démonstration complète. C'est un luxe rarissime en informatique — on ne peut pas tester une fonction sur tous les entiers.
Prolongement : le luxe a un prix. À variables, dépasse le milliard de lignes : la démonstration exhaustive devient impraticable. C'est le problème SAT, l'un des plus célèbres de l'informatique théorique.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.