{
  "chapter": {
    "id": "logique-booleenne",
    "level": "premiere",
    "theme": "Représentation des données",
    "title": "Logique booléenne et fonctions logiques",
    "description": "Opérateurs logiques (ET, OU, NON, XOR, NAND), tables de vérité,\npropriétés algébriques de l'algèbre de Boole, lois de De Morgan,\nsimplification d'expressions et lien avec la programmation Python.",
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "definition"
      ],
      "title": "Comportement de l'opérateur OU",
      "statement": "Quelle est la valeur de sortie d'un opérateur OU inclusif ($a + b$)\nsi l'entrée $a$ vaut $1$ et l'entrée $b$ vaut $1$ ?",
      "options": [
        {
          "text": "La sortie vaut $2$",
          "correct": false,
          "feedback": "Erreur : confusion avec une addition arithmétique. La logique\nbooléenne ne manipule que les valeurs $0$ et $1$, jamais $2$.\n"
        },
        {
          "text": "La sortie vaut $0$",
          "correct": false,
          "feedback": "Erreur : confusion avec le OU exclusif (XOR), qui vaut $0$\nlorsque les deux entrées sont identiques. Avec le OU inclusif,\ndès qu'au moins une entrée vaut $1$, la sortie vaut $1$.\n"
        },
        {
          "text": "La sortie est indéterminée",
          "correct": false,
          "feedback": "Erreur : la sortie d'une fonction logique est toujours\ndéterminée par sa table de vérité, sans ambiguïté.\n"
        },
        {
          "text": "La sortie vaut $1$",
          "correct": true,
          "feedback": "Bonne réponse : le OU inclusif renvoie $1$ dès qu'au moins\nune entrée vaut $1$. Sa table de vérité ne contient un $0$\nque pour la combinaison $(0, 0)$.\n"
        }
      ],
      "explanation": "Le OU inclusif est défini par la table de vérité :\n$(0,0)\\to 0$, $(0,1)\\to 1$, $(1,0)\\to 1$, $(1,1)\\to 1$.\nIl s'oppose au OU exclusif (XOR) qui renvoie $0$ pour $(1,1)$."
    },
    {
      "id": "q02",
      "difficulty": 1,
      "skills": [
        "definition",
        "denombrement"
      ],
      "title": "Structure des tables de vérité",
      "statement": "Combien de lignes comporte la table de vérité d'une fonction\nlogique possédant $4$ variables d'entrée ?",
      "options": [
        {
          "text": "Elle comporte $12$ lignes",
          "correct": false,
          "feedback": "Erreur : confusion avec $4 \\times 3$ (produit) au lieu de\n$2^4$ (puissance). Le bon raisonnement est combinatoire :\nchaque variable peut prendre $2$ valeurs indépendamment.\n"
        },
        {
          "text": "Elle comporte $16$ lignes",
          "correct": true,
          "feedback": "Bonne réponse : $2^4 = 16$ combinaisons possibles pour\nquatre variables binaires.\n"
        },
        {
          "text": "Elle comporte $8$ lignes",
          "correct": false,
          "feedback": "Erreur : c'est le nombre de lignes pour $3$ variables ($2^3$).\nAvec $4$ variables, il faut calculer $2^4$.\n"
        },
        {
          "text": "Elle comporte $4$ lignes",
          "correct": false,
          "feedback": "Erreur : confusion entre le nombre de variables et le nombre\nde combinaisons. Avec $n$ variables, on a $2^n$ combinaisons,\npas $n$.\n"
        }
      ],
      "explanation": "Avec $n$ variables booléennes, chacune peut valoir $0$ ou $1$\nindépendamment des autres, donc la table de vérité contient\n$2^n$ lignes. Pour $n = 4$, on obtient $2^4 = 16$."
    },
    {
      "id": "q03",
      "difficulty": 1,
      "skills": [
        "python",
        "syntaxe"
      ],
      "title": "Syntaxe de programmation",
      "statement": "Quel mot-clé Python correspond à l'opérateur de négation\nlogique (NON) ?",
      "options": [
        {
          "text": "Le mot-clé `inv`",
          "correct": false,
          "feedback": "Erreur : `inv` n'existe pas en Python comme mot-clé\nde négation. À ne pas confondre avec `~` qui est\nl'inversion bit à bit (opérateur sur les entiers).\n"
        },
        {
          "text": "Le mot-clé `not`",
          "correct": true,
          "feedback": "Bonne réponse : Python utilise les mots-clés en toutes\nlettres : `not`, `and` et `or`.\n"
        },
        {
          "text": "Le mot-clé `negative`",
          "correct": false,
          "feedback": "Erreur : `negative` n'est pas un mot-clé Python.\nLe mot-clé est `not`.\n"
        },
        {
          "text": "Le symbole `!`",
          "correct": false,
          "feedback": "Erreur : c'est la syntaxe du C, du C++, de Java ou de\nJavaScript, pas celle de Python.\n"
        }
      ],
      "explanation": "Python privilégie une syntaxe en mots anglais lisibles :\n`not`, `and` et `or`. Les opérateurs symboliques `&`, `|`, `~`\nexistent mais opèrent bit à bit sur les entiers, pas sur les\nbooléens."
    },
    {
      "id": "q04",
      "difficulty": 1,
      "skills": [
        "propriete"
      ],
      "title": "Étude de l'élément absorbant",
      "statement": "D'après les propriétés du ET logique ($\\cdot$), que vaut\nsystématiquement l'expression $a \\cdot 0$ ?",
      "options": [
        {
          "text": "Elle vaut $a$",
          "correct": false,
          "feedback": "Erreur : confusion avec l'élément neutre. C'est $a \\cdot 1$\nqui vaut $a$ ; avec $0$ comme second opérande, le résultat\nest forcément $0$ (élément absorbant).\n"
        },
        {
          "text": "Elle vaut $0$",
          "correct": true,
          "feedback": "Bonne réponse : $0$ est l'élément absorbant du ET logique.\nQuelle que soit la valeur de $a$, le produit $a \\cdot 0$ vaut $0$.\n"
        },
        {
          "text": "Elle vaut $\\overline{a}$",
          "correct": false,
          "feedback": "Erreur : il n'y a aucune négation dans l'expression. Le ET\navec $0$ donne toujours $0$, pas le complémentaire de $a$.\n"
        },
        {
          "text": "Elle vaut $1$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec le OU logique. Pour le ET,\nla sortie ne vaut $1$ que si toutes les entrées valent $1$.\n"
        }
      ],
      "explanation": "Dans l'algèbre de Boole, $0$ est l'élément absorbant du ET et\nl'élément neutre du OU. Symétriquement, $1$ est l'élément\nneutre du ET et l'élément absorbant du OU."
    },
    {
      "id": "q05",
      "difficulty": 2,
      "skills": [
        "propriete",
        "identification"
      ],
      "title": "Principes fondamentaux",
      "statement": "Laquelle de ces expressions illustre la propriété dite du\n« tiers exclu » ?",
      "options": [
        {
          "text": "$a \\cdot 1 = a$",
          "correct": false,
          "feedback": "Erreur : c'est l'identité de l'élément neutre du ET.\nSans rapport avec le tiers exclu.\n"
        },
        {
          "text": "$\\overline{\\overline{a}} = a$",
          "correct": false,
          "feedback": "Erreur : c'est la propriété d'involution (ou double\nnégation), qui dit que nier deux fois redonne la valeur\nde départ.\n"
        },
        {
          "text": "$a \\cdot \\overline{a} = 0$",
          "correct": false,
          "feedback": "Erreur : c'est la propriété du « principe de\nnon-contradiction », pas celle du tiers exclu. Une variable\net son complément ne peuvent pas être vraies en même temps.\n"
        },
        {
          "text": "$a + \\overline{a} = 1$",
          "correct": true,
          "feedback": "Bonne réponse : « entre une proposition et sa négation,\nil n'y a pas de troisième possibilité ». L'union des deux\nest toujours vraie.\n"
        }
      ],
      "explanation": "Le tiers exclu affirme qu'une proposition est soit vraie,\nsoit fausse, sans tierce alternative : $a + \\overline{a} = 1$.\nSa propriété duale, le principe de non-contradiction, s'écrit\n$a \\cdot \\overline{a} = 0$."
    },
    {
      "id": "q06",
      "difficulty": 2,
      "skills": [
        "propriete",
        "demorgan"
      ],
      "title": "Transformation d'expressions",
      "statement": "Quelle est la seconde loi de De Morgan, relative au\ncomplément d'un produit ($\\overline{a \\cdot b}$) ?",
      "options": [
        {
          "text": "$\\overline{a \\cdot b} = a + b$",
          "correct": false,
          "feedback": "Erreur : on a bien transformé le ET en OU, mais on a\noublié de complémenter chaque variable.\n"
        },
        {
          "text": "$\\overline{a + b} = \\overline{a} \\cdot \\overline{b}$",
          "correct": false,
          "feedback": "Erreur : c'est la première loi de De Morgan (complément\nd'une somme), pas la seconde demandée.\n"
        },
        {
          "text": "$\\overline{a \\cdot b} = \\overline{a} \\cdot \\overline{b}$",
          "correct": false,
          "feedback": "Erreur : on a bien complémenté chaque variable, mais on a\noublié de changer l'opérateur. De Morgan transforme un\nproduit en somme et réciproquement.\n"
        },
        {
          "text": "$\\overline{a \\cdot b} = \\overline{a} + \\overline{b}$",
          "correct": true,
          "feedback": "Bonne réponse : on complémente chaque variable et on\nremplace le ET par un OU. C'est bien la seconde loi de\nDe Morgan.\n"
        }
      ],
      "explanation": "Les lois de De Morgan permettent de transformer le complément\nd'une opération binaire :\n$\\overline{a + b} = \\overline{a} \\cdot \\overline{b}$ et\n$\\overline{a \\cdot b} = \\overline{a} + \\overline{b}$.\nMémo : « on inverse chaque variable et on échange les opérateurs »."
    },
    {
      "id": "q07",
      "difficulty": 2,
      "skills": [
        "simplification"
      ],
      "title": "Simplification algébrique",
      "statement": "Que vaut l'expression simplifiée $a + a \\cdot b$ d'après les\nlois d'absorption ?",
      "options": [
        {
          "text": "Elle vaut $1$",
          "correct": false,
          "feedback": "Erreur : si $a = 0$ et $b = 0$, l'expression vaut $0$,\ndonc elle ne peut pas être identiquement égale à $1$.\n"
        },
        {
          "text": "Elle vaut $b$",
          "correct": false,
          "feedback": "Erreur : oubli de la variable dominante. Si $a = 1$,\nl'expression vaut $1$ même quand $b = 0$ : elle ne peut\ndonc pas se réduire à $b$.\n"
        },
        {
          "text": "Elle vaut $a + b$",
          "correct": false,
          "feedback": "Erreur : c'est la simplification d'une autre absorption,\n$a + \\overline{a} \\cdot b = a + b$. Ici, le facteur est $b$\n(sans complément), donc la simplification est plus forte.\n"
        },
        {
          "text": "Elle vaut $a$",
          "correct": true,
          "feedback": "Bonne réponse : on factorise par $a$ pour obtenir\n$a \\cdot (1 + b) = a \\cdot 1 = a$. La présence de $b$\nn'apporte rien quand $a$ est déjà vrai.\n"
        }
      ],
      "explanation": "Loi d'absorption : $a + a \\cdot b = a \\cdot (1 + b) = a \\cdot 1 = a$.\nSa duale s'écrit $a \\cdot (a + b) = a$. À distinguer de\n$a + \\overline{a} \\cdot b = a + b$ qui est une autre identité."
    },
    {
      "id": "q08",
      "difficulty": 2,
      "skills": [
        "definition",
        "xor"
      ],
      "title": "Étude du OU exclusif",
      "statement": "Dans quel cas précis la fonction XOR ($a \\oplus b$) renvoie-t-elle\nla valeur $1$ ?",
      "options": [
        {
          "text": "Lorsque les deux entrées sont identiques",
          "correct": false,
          "feedback": "Erreur : c'est exactement le contraire. Le XOR renvoie $0$\n(et non $1$) lorsque les deux entrées sont identiques.\nCette condition décrit plutôt la fonction NXOR (équivalence).\n"
        },
        {
          "text": "Lorsque exactement une des deux entrées vaut $1$",
          "correct": true,
          "feedback": "Bonne réponse : le XOR détecte la différence entre les\nentrées. Il renvoie $1$ si et seulement si exactement\nune seule des deux entrées vaut $1$.\n"
        },
        {
          "text": "Lorsque les deux entrées valent $1$",
          "correct": false,
          "feedback": "Erreur : pour $(1, 1)$, le XOR renvoie $0$ et non $1$.\nC'est précisément ce qui le différencie du OU inclusif.\n"
        },
        {
          "text": "Lorsque au moins une entrée vaut $0$",
          "correct": false,
          "feedback": "Erreur : pour $(0, 0)$, au moins une entrée vaut $0$\nmais le XOR renvoie $0$, pas $1$. La condition n'est\ndonc pas suffisante.\n"
        }
      ],
      "explanation": "Table de vérité du XOR : $(0,0)\\to 0$, $(0,1)\\to 1$,\n$(1,0)\\to 1$, $(1,1)\\to 0$. C'est l'opérateur de\n« différence » ou « non-équivalence »."
    },
    {
      "id": "q09",
      "difficulty": 3,
      "skills": [
        "propriete",
        "universalite"
      ],
      "title": "Propriétés des portes logiques",
      "statement": "Pourquoi la fonction NAND ($a \\uparrow b$) est-elle qualifiée\nd'universelle ?",
      "options": [
        {
          "text": "Elle est la seule à posséder $2$ entrées",
          "correct": false,
          "feedback": "Erreur : la plupart des opérateurs binaires (ET, OU, XOR,\nNAND, NOR) ont $2$ entrées. Ce n'est pas une caractéristique\npropre au NAND.\n"
        },
        {
          "text": "Elle permet de reconstruire toutes les autres fonctions logiques",
          "correct": true,
          "feedback": "Bonne réponse : avec uniquement des portes NAND, on peut\nréaliser le NON, le ET, le OU et toutes les fonctions\nlogiques composées. La fonction NOR a la même propriété.\n"
        },
        {
          "text": "Elle renvoie toujours la valeur $1$ en sortie",
          "correct": false,
          "feedback": "Erreur : la table de vérité du NAND donne $0$ pour $(1,1)$.\nSa sortie n'est donc pas constante.\n"
        },
        {
          "text": "Elle est compatible avec tous les processeurs",
          "correct": false,
          "feedback": "Erreur : « universelle » est un qualificatif d'algèbre\nbooléenne, pas de matériel. Il signifie que toute autre\nfonction logique peut être exprimée à partir d'elle seule.\n"
        }
      ],
      "explanation": "Une porte est dite universelle si elle permet à elle seule\nde construire toutes les autres fonctions logiques. Le NAND\net le NOR sont les deux portes universelles classiques, ce qui\nexplique leur importance en conception de circuits intégrés."
    },
    {
      "id": "q10",
      "difficulty": 3,
      "skills": [
        "analyse-circuit",
        "multiplexeur"
      ],
      "title": "Analyse d'un circuit",
      "statement": "Dans un multiplexeur défini par $(\\overline{x} \\cdot y) + (x \\cdot z)$,\nque vaut la sortie si $x = 1$ ?",
      "options": [
        {
          "text": "La sortie prend la valeur de l'entrée $z$",
          "correct": true,
          "feedback": "Bonne réponse : avec $x = 1$, on a $\\overline{x} = 0$,\ndonc le terme $\\overline{x} \\cdot y$ vaut $0$ et il reste\n$x \\cdot z = z$. Le multiplexeur sélectionne bien $z$.\n"
        },
        {
          "text": "La sortie est forcée à $0$",
          "correct": false,
          "feedback": "Erreur : la sortie n'est pas constante, elle dépend de la\nvaleur de $z$. Pour $z = 1$ par exemple, la sortie vaut $1$.\n"
        },
        {
          "text": "La sortie est forcée à $1$",
          "correct": false,
          "feedback": "Erreur : la valeur de sortie dépend encore de $z$, donc\nelle n'est pas forcée. Si $z = 0$, la sortie vaut $0$.\n"
        },
        {
          "text": "La sortie prend la valeur de l'entrée $y$",
          "correct": false,
          "feedback": "Erreur : c'est la valeur prise par la sortie quand $x = 0$,\npas quand $x = 1$. Quand $x = 0$, on a $\\overline{x} = 1$\net c'est la branche $y$ qui est sélectionnée.\n"
        }
      ],
      "explanation": "Un multiplexeur $2$ vers $1$ d'expression\n$s = (\\overline{x} \\cdot y) + (x \\cdot z)$ utilise $x$ comme\nsélecteur : si $x = 0$, la sortie reproduit $y$ ; si $x = 1$,\nelle reproduit $z$."
    },
    {
      "id": "q11",
      "difficulty": 1,
      "skills": [
        "definition",
        "ou"
      ],
      "title": "Comportement du OU avec deux entrées à $0$",
      "statement": "Quelle est la valeur de l'expression $a + b$ lorsque $a = 0$ et $b = 0$ ?",
      "options": [
        {
          "text": "Elle vaut $2$",
          "correct": false,
          "feedback": "Erreur : confusion avec une addition arithmétique. La logique\nbooléenne ne manipule que les valeurs $0$ et $1$.\n"
        },
        {
          "text": "Elle vaut $0$",
          "correct": true,
          "feedback": "Bonne réponse : le OU vaut $0$ uniquement quand toutes ses\nentrées valent $0$. C'est le seul cas qui donne $0$ pour le\nOU inclusif.\n"
        },
        {
          "text": "Elle vaut $1$",
          "correct": false,
          "feedback": "Erreur : confusion possible avec l'élément absorbant du OU\n($a + 1 = 1$). Avec deux entrées à $0$, la sortie vaut $0$.\n"
        },
        {
          "text": "Elle est indéterminée",
          "correct": false,
          "feedback": "Erreur : la sortie d'une fonction logique est entièrement\ndéterminée par sa table de vérité.\n"
        }
      ],
      "explanation": "Le OU inclusif vaut $0$ uniquement pour la combinaison $(0, 0)$.\nPour toutes les autres combinaisons, au moins une entrée vaut $1$\net la sortie vaut $1$."
    },
    {
      "id": "q12",
      "difficulty": 1,
      "skills": [
        "propriete",
        "idempotence"
      ],
      "title": "Loi d'idempotence du ET",
      "statement": "D'après la propriété d'idempotence, à quoi est égale l'expression\n$a \\cdot a$ ?",
      "options": [
        {
          "text": "Elle vaut $a$",
          "correct": true,
          "feedback": "Bonne réponse : c'est la loi d'idempotence du ET. Le ET d'un\nbooléen avec lui-même donne ce booléen.\n"
        },
        {
          "text": "Elle vaut $0$",
          "correct": false,
          "feedback": "Erreur : c'est $a \\cdot \\overline{a}$ qui vaut $0$ (principe\nde non-contradiction), pas $a \\cdot a$.\n"
        },
        {
          "text": "Elle vaut $a^2$",
          "correct": false,
          "feedback": "Erreur : confusion avec l'arithmétique. En algèbre de Boole,\n$1 \\cdot 1 = 1$ et $0 \\cdot 0 = 0$, donc le résultat est\nsimplement $a$.\n"
        },
        {
          "text": "Elle vaut $\\overline{a}$",
          "correct": false,
          "feedback": "Erreur : il n'y a pas de complémentation dans l'expression.\n"
        }
      ],
      "explanation": "L'idempotence est valable pour les deux opérateurs :\n$a \\cdot a = a$ et $a + a = a$. C'est une particularité de\nl'algèbre de Boole que l'on n'a pas en arithmétique classique."
    },
    {
      "id": "q13",
      "difficulty": 1,
      "skills": [
        "propriete",
        "element-neutre"
      ],
      "title": "Élément neutre du OU",
      "statement": "Que vaut systématiquement l'expression $a + 0$ ?",
      "options": [
        {
          "text": "Elle vaut $a$",
          "correct": true,
          "feedback": "Bonne réponse : $0$ est l'élément neutre du OU. Ajouter $0$\nne change pas la valeur de $a$.\n"
        },
        {
          "text": "Elle vaut $1$",
          "correct": false,
          "feedback": "Erreur : c'est $a + 1$ qui vaut $1$ (élément absorbant du OU).\n"
        },
        {
          "text": "Elle vaut $0$",
          "correct": false,
          "feedback": "Erreur : confusion avec l'élément absorbant du ET ($a \\cdot 0 = 0$).\nPour le OU, $0$ est l'élément neutre, pas absorbant.\n"
        },
        {
          "text": "Elle vaut $\\overline{a}$",
          "correct": false,
          "feedback": "Erreur : il n'y a pas de complémentation dans l'expression.\n"
        }
      ],
      "explanation": "Mémo : pour le OU, $0$ est neutre et $1$ est absorbant. Pour le\nET, c'est l'inverse : $1$ est neutre et $0$ est absorbant."
    },
    {
      "id": "q14",
      "difficulty": 1,
      "skills": [
        "definition",
        "nor"
      ],
      "title": "Évaluation de la fonction NOR",
      "statement": "La fonction NOR (NON-OU) est définie par $\\overline{a + b}$.\nQuelle est sa valeur pour $a = 0$ et $b = 0$ ?",
      "options": [
        {
          "text": "Elle est indéterminée",
          "correct": false,
          "feedback": "Erreur : la NOR a une table de vérité parfaitement définie.\n"
        },
        {
          "text": "Elle vaut $\\overline{a}$",
          "correct": false,
          "feedback": "Erreur : la NOR ne dépend pas que de $a$ ; elle dépend des\ndeux entrées.\n"
        },
        {
          "text": "Elle vaut $0$",
          "correct": false,
          "feedback": "Erreur : oubli de la négation finale. $a + b = 0$ pour $(0, 0)$,\ndonc $\\overline{a + b} = \\overline{0} = 1$.\n"
        },
        {
          "text": "Elle vaut $1$",
          "correct": true,
          "feedback": "Bonne réponse : $0 + 0 = 0$, et $\\overline{0} = 1$. La NOR vaut\n$1$ uniquement pour cette combinaison.\n"
        }
      ],
      "explanation": "La NOR ne vaut $1$ que pour $(0, 0)$ et vaut $0$ pour toutes les\nautres combinaisons. Comme la NAND, elle est universelle :\ntout circuit logique peut être réalisé avec uniquement des NOR."
    },
    {
      "id": "q15",
      "difficulty": 1,
      "skills": [
        "python",
        "comparaison"
      ],
      "title": "Comparaison et affectation en Python",
      "statement": "Quel symbole utilise-t-on en Python pour tester l'égalité de deux\nvaleurs ?",
      "options": [
        {
          "text": "Le symbole `:=`",
          "correct": false,
          "feedback": "Erreur : `:=` est l'opérateur d'affectation dans une expression\n(« walrus operator »), introduit en Python 3.8. Il n'est pas\nun test d'égalité.\n"
        },
        {
          "text": "Le symbole `=`",
          "correct": false,
          "feedback": "Erreur : `=` est l'opérateur d'affectation, pas de comparaison.\nC'est l'erreur classique en Python : `a = 5` affecte $5$ à $a$,\nalors que `a == 5` teste si $a$ vaut $5$.\n"
        },
        {
          "text": "Le symbole `==`",
          "correct": true,
          "feedback": "Bonne réponse : `==` est le test d'égalité. Il renvoie un\nbooléen (`True` ou `False`).\n"
        },
        {
          "text": "Le symbole `!=`",
          "correct": false,
          "feedback": "Erreur : `!=` teste la différence (l'opposé de `==`).\n"
        }
      ],
      "explanation": "Python utilise `=` pour affecter et `==` pour comparer. Confondre\nles deux est une source classique de bugs : `if a = 5:` produit\nune erreur de syntaxe (à dessein, pour éviter les confusions\ninvolontaires)."
    },
    {
      "id": "q16",
      "difficulty": 1,
      "skills": [
        "circuit",
        "analogie"
      ],
      "title": "Analogie circuit série / porte logique",
      "statement": "Dans l'analogie entre circuits électriques et fonctions logiques,\nquelle disposition de deux interrupteurs réalise la fonction ET ?",
      "options": [
        {
          "text": "En boucle fermée",
          "correct": false,
          "feedback": "Erreur : ce n'est pas une disposition standard. Les analogies\nétudiées sont la série (ET) et le parallèle (OU).\n"
        },
        {
          "text": "En série",
          "correct": true,
          "feedback": "Bonne réponse : pour qu'un voyant s'allume avec deux\ninterrupteurs en série, il faut que les deux soient fermés\nsimultanément. C'est exactement la définition du ET.\n"
        },
        {
          "text": "En parallèle",
          "correct": false,
          "feedback": "Erreur : la disposition en parallèle réalise le OU. Le voyant\ns'allume dès que l'un des interrupteurs est fermé.\n"
        },
        {
          "text": "En court-circuit",
          "correct": false,
          "feedback": "Erreur : un court-circuit ne réalise pas une fonction logique\nmais provoque un comportement non maîtrisé du circuit.\n"
        }
      ],
      "explanation": "Cette analogie a été formalisée par Claude Shannon en $1937$ et\na permis de relier l'algèbre de Boole à la conception de circuits\nélectroniques. Aujourd'hui, les transistors jouent le rôle des\ninterrupteurs commandés."
    },
    {
      "id": "q17",
      "difficulty": 2,
      "skills": [
        "propriete",
        "demorgan"
      ],
      "title": "Première loi de De Morgan",
      "statement": "Quelle est la première loi de De Morgan, relative au complément\nd'une somme ($\\overline{a + b}$) ?",
      "options": [
        {
          "text": "$\\overline{a + b} = \\overline{a} + \\overline{b}$",
          "correct": false,
          "feedback": "Erreur : on a complémenté chaque variable, mais on a oublié de\nchanger l'opérateur. De Morgan transforme une somme en produit\n(et inversement).\n"
        },
        {
          "text": "$\\overline{a + b} = a + b$",
          "correct": false,
          "feedback": "Erreur : aucune transformation appliquée. Le complément d'une\nexpression n'est pas l'expression elle-même.\n"
        },
        {
          "text": "$\\overline{a + b} = \\overline{a} \\cdot \\overline{b}$",
          "correct": true,
          "feedback": "Bonne réponse : « ne pas (A ou B) » revient à « ne pas A ET\nne pas B ». On complémente chaque variable et on échange les\nopérateurs.\n"
        },
        {
          "text": "$\\overline{a + b} = a \\cdot b$",
          "correct": false,
          "feedback": "Erreur : on a bien échangé l'opérateur ($+$ devient $\\cdot$),\nmais on a oublié de complémenter chaque variable.\n"
        }
      ],
      "explanation": "Les deux lois de De Morgan permettent de transformer le complément\nd'une opération binaire :\n$\\overline{a + b} = \\overline{a} \\cdot \\overline{b}$ et\n$\\overline{a \\cdot b} = \\overline{a} + \\overline{b}$.\nMémo : « on complémente chaque variable et on échange les\nopérateurs »."
    },
    {
      "id": "q18",
      "difficulty": 2,
      "skills": [
        "propriete",
        "distributivite"
      ],
      "title": "Distributivité du ET sur le OU",
      "statement": "Quelle est la forme développée de l'expression $a \\cdot (b + c)$ ?",
      "options": [
        {
          "text": "$a \\cdot b \\cdot c$",
          "correct": false,
          "feedback": "Erreur : confusion entre distributivité et associativité. La\ndistributivité du ET sur le OU produit une somme de produits.\n"
        },
        {
          "text": "$a \\cdot b + a \\cdot c$",
          "correct": true,
          "feedback": "Bonne réponse : exactement comme la distributivité de la\nmultiplication sur l'addition en arithmétique, $a(b+c) = ab+ac$.\n"
        },
        {
          "text": "$a + b + c$",
          "correct": false,
          "feedback": "Erreur : on a perdu le ET et créé une somme à trois termes.\nLa distributivité ne supprime pas les opérateurs, elle les\nrépartit.\n"
        },
        {
          "text": "$a \\cdot b + c$",
          "correct": false,
          "feedback": "Erreur : oubli du facteur $a$ devant le second terme. La\ndistributivité s'applique à chaque terme entre parenthèses.\n"
        }
      ],
      "explanation": "$a \\cdot (b + c) = a \\cdot b + a \\cdot c$. L'algèbre de Boole\npossède aussi la distributivité duale, sans équivalent en\narithmétique : $a + (b \\cdot c) = (a + b) \\cdot (a + c)$."
    },
    {
      "id": "q19",
      "difficulty": 2,
      "skills": [
        "propriete",
        "complementarite"
      ],
      "title": "Principe de non-contradiction",
      "statement": "Que vaut systématiquement l'expression $a \\cdot \\overline{a}$ ?",
      "options": [
        {
          "text": "$\\overline{a}$",
          "correct": false,
          "feedback": "Erreur : par symétrie avec le distracteur précédent, le\nrésultat ne peut pas être $\\overline{a}$ non plus.\n"
        },
        {
          "text": "$0$",
          "correct": true,
          "feedback": "Bonne réponse : c'est le principe de non-contradiction. Une\nvariable et son complément ne peuvent jamais valoir $1$\nsimultanément, donc leur ET vaut toujours $0$.\n"
        },
        {
          "text": "$a$",
          "correct": false,
          "feedback": "Erreur : si $a = 1$, alors $\\overline{a} = 0$ et le produit\nvaut $0$, pas $1$. Le résultat ne peut donc pas être $a$.\n"
        },
        {
          "text": "$1$",
          "correct": false,
          "feedback": "Erreur : confusion avec le tiers exclu, qui s'écrit\n$a + \\overline{a} = 1$ (avec un OU, pas un ET).\n"
        }
      ],
      "explanation": "Le principe de non-contradiction $a \\cdot \\overline{a} = 0$ et le\ntiers exclu $a + \\overline{a} = 1$ sont les deux propriétés duales\nde complémentarité en algèbre de Boole."
    },
    {
      "id": "q20",
      "difficulty": 2,
      "skills": [
        "xor",
        "expression"
      ],
      "title": "Expression algébrique du OU exclusif",
      "statement": "À quelle expression algébrique correspond la fonction XOR\n($a \\oplus b$), exprimée à l'aide des opérateurs fondamentaux ET,\nOU et NON ?",
      "options": [
        {
          "text": "$a \\cdot b$",
          "correct": false,
          "feedback": "Erreur : c'est la définition du ET, qui ne vaut $1$ que pour\n$(1, 1)$. Le XOR vaut justement $0$ dans ce cas.\n"
        },
        {
          "text": "$\\overline{a + b}$",
          "correct": false,
          "feedback": "Erreur : c'est la définition de la NOR (NON-OU), qui vaut $1$\nuniquement pour $(0, 0)$. Le XOR vaut $0$ dans ce cas.\n"
        },
        {
          "text": "$a + b$",
          "correct": false,
          "feedback": "Erreur : c'est le OU inclusif. Il diffère du XOR uniquement\nen $(1, 1)$ : OU vaut $1$, XOR vaut $0$.\n"
        },
        {
          "text": "$\\overline{a} \\cdot b + a \\cdot \\overline{b}$",
          "correct": true,
          "feedback": "Bonne réponse : le XOR vaut $1$ quand exactement une entrée\nvaut $1$ : soit « $a$ faux et $b$ vrai » ($\\overline{a} \\cdot b$),\nsoit « $a$ vrai et $b$ faux » ($a \\cdot \\overline{b}$).\n"
        }
      ],
      "explanation": "L'expression $\\overline{a} \\cdot b + a \\cdot \\overline{b}$ se lit\ndirectement sur la table de vérité : on prend les lignes où le\nrésultat vaut $1$ (ici $(0, 1)$ et $(1, 0)$) et on les exprime\nsous forme de produits des variables ou de leurs compléments\n(forme canonique disjonctive)."
    },
    {
      "id": "q21",
      "difficulty": 2,
      "skills": [
        "python",
        "demorgan",
        "application"
      ],
      "title": "Simplification d'une condition Python",
      "statement": "D'après les lois de De Morgan, à quelle condition Python est\néquivalente l'expression `not (x > 0 and y > 0)` ?",
      "options": [
        {
          "text": "`not x > 0 or not y > 0`",
          "correct": false,
          "feedback": "Erreur : la syntaxe est valable mais peu lisible (problèmes\nde priorités). Surtout, on n'a pas exploité que la négation\nde `> 0` se simplifie en `<= 0`.\n"
        },
        {
          "text": "`x > 0 or y > 0`",
          "correct": false,
          "feedback": "Erreur : on a juste retiré le `not` et changé `and` en `or`,\nsans complémenter les comparaisons. Pour appliquer De Morgan,\nil faut **complémenter chaque condition**.\n"
        },
        {
          "text": "`x <= 0 and y <= 0`",
          "correct": false,
          "feedback": "Erreur : on a bien complémenté chaque comparaison, mais on a\noublié d'échanger `and` et `or`. De Morgan transforme un ET\nen OU et inversement.\n"
        },
        {
          "text": "`x <= 0 or y <= 0`",
          "correct": true,
          "feedback": "Bonne réponse : par la 2ème loi de De Morgan,\n$\\overline{a \\cdot b} = \\overline{a} + \\overline{b}$, donc\n`not (A and B) = (not A) or (not B)`. La négation de `> 0`\nest `<= 0`.\n"
        }
      ],
      "explanation": "Cette équivalence est très utile pour rendre les conditions\nPython plus lisibles : on évite ainsi les négations imbriquées\nqui obligent à un effort mental supplémentaire à la lecture."
    },
    {
      "id": "q22",
      "difficulty": 2,
      "skills": [
        "simplification",
        "absorption"
      ],
      "title": "Loi d'absorption duale",
      "statement": "D'après les lois d'absorption, à quoi est égale l'expression\n$a \\cdot (a + b)$ ?",
      "options": [
        {
          "text": "$a \\cdot b$",
          "correct": false,
          "feedback": "Erreur : si $a = 1$ et $b = 0$, l'expression vaut $1$ alors\nque $a \\cdot b = 0$. Donc l'égalité ne tient pas.\n"
        },
        {
          "text": "$b$",
          "correct": false,
          "feedback": "Erreur : la variable $a$ ne peut pas disparaître. Si $a = 0$,\nl'expression vaut $0$ quelle que soit la valeur de $b$.\n"
        },
        {
          "text": "$a$",
          "correct": true,
          "feedback": "Bonne réponse : c'est la duale de $a + a \\cdot b = a$. On peut\nla prouver en développant : $a \\cdot (a + b) = a \\cdot a + a \\cdot b = a + a \\cdot b = a$.\n"
        },
        {
          "text": "$a + b$",
          "correct": false,
          "feedback": "Erreur : oubli de la dominance de $a$. Si $a = 0$,\nl'expression vaut $0$, ce qui n'est pas le cas de $a + b$\nquand $b = 1$.\n"
        }
      ],
      "explanation": "Les deux lois d'absorption sont duales :\n$a + a \\cdot b = a$ et $a \\cdot (a + b) = a$.\nDans les deux cas, la variable « extérieure » domine et absorbe\nla sous-expression dans laquelle elle apparaît."
    },
    {
      "id": "q23",
      "difficulty": 3,
      "skills": [
        "nand",
        "universalite",
        "construction"
      ],
      "title": "Construction de la fonction NON avec des NAND",
      "statement": "Quelle expression utilisant uniquement la fonction NAND (notée\n$\\uparrow$) et la variable $a$ permet d'obtenir $\\overline{a}$ ?",
      "options": [
        {
          "text": "$a \\uparrow \\overline{a}$",
          "correct": false,
          "feedback": "Erreur : cette expression suppose que l'on dispose déjà de\n$\\overline{a}$, qui est précisément ce que l'on cherche à\nconstruire. C'est un raisonnement circulaire.\n"
        },
        {
          "text": "$a + \\overline{a}$",
          "correct": false,
          "feedback": "Erreur : cette expression utilise les opérateurs OU et NON,\npas uniquement NAND. De plus, elle vaut toujours $1$ (tiers\nexclu).\n"
        },
        {
          "text": "$a \\uparrow a$",
          "correct": true,
          "feedback": "Bonne réponse : $a \\uparrow a = \\overline{a \\cdot a} = \\overline{a}$\n(par idempotence). En reliant les deux entrées d'une porte\nNAND, on obtient une porte NON.\n"
        },
        {
          "text": "$\\overline{a \\uparrow a}$",
          "correct": false,
          "feedback": "Erreur : on ajoute une négation supplémentaire, qui annule la\nprécédente. Cela donne $\\overline{\\overline{a}} = a$, et non\n$\\overline{a}$.\n"
        }
      ],
      "explanation": "La porte NAND est dite universelle : avec uniquement des NAND, on\npeut construire le NON ($a \\uparrow a$), le ET\n($(a \\uparrow b) \\uparrow (a \\uparrow b)$) et le OU\n($(a \\uparrow a) \\uparrow (b \\uparrow b)$). Cette propriété\nexplique pourquoi les circuits intégrés industriels utilisent\nsouvent la NAND comme brique de base."
    },
    {
      "id": "q24",
      "difficulty": 3,
      "skills": [
        "analyse",
        "synthese",
        "table"
      ],
      "title": "Synthèse à partir d'une table de vérité",
      "statement": "Une fonction logique $f(a, b)$ a la table de vérité suivante :\n$f(0, 0) = 0$, $f(0, 1) = 1$, $f(1, 0) = 0$, $f(1, 1) = 1$.\nQuelle est l'expression la plus simple de $f$ ?",
      "options": [
        {
          "text": "$f = a \\cdot b$",
          "correct": false,
          "feedback": "Erreur : pour $(0, 1)$, on a $a \\cdot b = 0$ alors que $f = 1$.\nLa fonction ET ne convient pas.\n"
        },
        {
          "text": "$f = a \\oplus b$",
          "correct": false,
          "feedback": "Erreur : pour $(1, 1)$, on a $a \\oplus b = 0$ alors que $f = 1$.\nLe XOR ne convient pas.\n"
        },
        {
          "text": "$f = b$",
          "correct": true,
          "feedback": "Bonne réponse : la sortie est égale à $b$ dans toutes les\ncombinaisons, indépendamment de $a$. La fonction est\ndégénérée : elle ne dépend en réalité que de $b$.\n"
        },
        {
          "text": "$f = a + b$",
          "correct": false,
          "feedback": "Erreur : pour $(1, 0)$, on a $a + b = 1$ alors que $f = 0$.\nLa fonction OU ne convient pas.\n"
        }
      ],
      "explanation": "Lire systématiquement la table : ici $f$ vaut $0$ quand $b = 0$\net $f$ vaut $1$ quand $b = 1$, quelle que soit la valeur de $a$.\nL'expression minimale est donc $f = b$. C'est un piège classique :\navant de chercher une combinaison complexe, vérifier si la sortie\nne dépend pas en réalité d'une seule entrée."
    },
    {
      "id": "q25",
      "difficulty": 3,
      "skills": [
        "circuit",
        "panne",
        "application"
      ],
      "title": "Panne d'un interrupteur sur un circuit série",
      "statement": "Sur un circuit électrique, deux interrupteurs sont disposés en\nsérie pour réaliser une fonction ET. Le premier interrupteur est\ncassé, bloqué en position ouverte. Que peut-on dire du voyant ?",
      "options": [
        {
          "text": "Il s'allume normalement, l'autre interrupteur compense",
          "correct": false,
          "feedback": "Erreur : en série, les deux interrupteurs doivent être fermés\nsimultanément pour que le courant passe. Si l'un est bloqué\nouvert, le circuit est rompu.\n"
        },
        {
          "text": "Il clignote au rythme de l'autre interrupteur",
          "correct": false,
          "feedback": "Erreur : un circuit ouvert ne laisse pas passer le courant\ndu tout, indépendamment de l'autre interrupteur. Aucun\nclignotement n'est possible.\n"
        },
        {
          "text": "Il reste toujours allumé",
          "correct": false,
          "feedback": "Erreur : c'est l'opposé. Un interrupteur bloqué ouvert\nempêche le courant de passer ; le voyant ne peut plus\ns'allumer.\n"
        },
        {
          "text": "Il reste toujours éteint",
          "correct": true,
          "feedback": "Bonne réponse : un interrupteur ouvert correspond à une\nentrée bloquée à $0$ pour le ET. Or $a \\cdot 0 = 0$ pour\ntout $a$ (élément absorbant). Le voyant reste éteint.\n"
        }
      ],
      "explanation": "Cette panne illustre concrètement la propriété de l'élément\nabsorbant : $a \\cdot 0 = 0$. Sur un circuit série (ET), une\nentrée à $0$ « absorbe » toute information venant de l'autre\nentrée. Sur un circuit parallèle (OU), c'est l'inverse : une\nentrée à $1$ allume le voyant indépendamment de l'autre."
    }
  ]
}