90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
# Task 13 — Curriculum module 4 (2 qubits et intrication)
|
|
|
|
> **Index:** [README](README.md). **Spec:** [design](../../specs/2026-04-29-quantum-tutor-design.md).
|
|
|
|
## Goal
|
|
|
|
Append module 4 (3 exercises on Bell state and CNOT semantics) to `curriculum/curriculum.json`.
|
|
|
|
## Prerequisites
|
|
|
|
- Task 12 merged.
|
|
|
|
## Files
|
|
|
|
- Modify: `curriculum/curriculum.json`
|
|
|
|
## Steps
|
|
|
|
- [ ] **Step 1: Insert after module 3**
|
|
|
|
```json
|
|
,
|
|
{
|
|
"id": 4,
|
|
"title": "2 qubits et intrication",
|
|
"lessons": [
|
|
{
|
|
"id": 1,
|
|
"title": "Le circuit de Bell et l'intrication",
|
|
"concept": "Deux qubits peuvent être 'intriqués' : mesurer l'un détermine instantanément le résultat de l'autre. L'état de Bell est le prototype de l'intrication.",
|
|
"example_circuit": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;",
|
|
"what_to_observe": "Lance avec 1000 shots. Tu dois voir uniquement '00' et '11' en quantités égales — jamais '01' ou '10'.",
|
|
"exercises": [
|
|
{
|
|
"id": "4-1-a",
|
|
"prompt": "Crée un état de Bell entre 2 qubits : la mesure doit donner uniquement '00' ou '11'.",
|
|
"hint": "H sur q[0], puis CX q[0]→q[1].",
|
|
"criteria": {
|
|
"required_outcomes": [
|
|
{"bitstring": "00", "min_ratio": 0.4},
|
|
{"bitstring": "11", "min_ratio": 0.4}
|
|
],
|
|
"forbidden_outcomes": ["01", "10"]
|
|
},
|
|
"feedback_pass": "Excellent ! Tu as créé l'état de Bell.",
|
|
"feedback_fail": "Tu dois voir uniquement '00' et '11'. Utilise H q[0] puis CX q[0],q[1]."
|
|
},
|
|
{
|
|
"id": "4-1-b",
|
|
"prompt": "CNOT sans superposition : pars de |00⟩ et applique CX. Que vois-tu ?",
|
|
"hint": "Sans H, q[0] reste |0⟩.",
|
|
"criteria": {
|
|
"required_outcomes": [{"bitstring": "00", "min_ratio": 0.99}],
|
|
"forbidden_outcomes": ["01", "10", "11"]
|
|
},
|
|
"feedback_pass": "Correct ! CNOT avec contrôle=|0⟩ ne change rien.",
|
|
"feedback_fail": "Tu dois obtenir '00' systématiquement."
|
|
},
|
|
{
|
|
"id": "4-1-c",
|
|
"prompt": "Prépare q[0]=|1⟩ avec X, puis applique CX. Que voit-on sur q[1] ?",
|
|
"hint": "CNOT flip la cible quand le contrôle est |1⟩.",
|
|
"criteria": {
|
|
"required_outcomes": [{"bitstring": "11", "min_ratio": 0.99}],
|
|
"forbidden_outcomes": ["00", "01", "10"]
|
|
},
|
|
"feedback_pass": "Parfait ! |10⟩ devient |11⟩ après CX.",
|
|
"feedback_fail": "Avec q[0]=|1⟩, le CNOT doit flipper q[1]."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
- [ ] **Step 2: Verify**
|
|
|
|
```bash
|
|
cargo test tutor::tests::curriculum_json_deserializes_with_module_1 2>&1 | grep "test result"
|
|
```
|
|
|
|
Expected: `test result: ok. 1 passed`.
|
|
|
|
- [ ] **Step 3: Commit**
|
|
|
|
```bash
|
|
git add curriculum/curriculum.json
|
|
git commit -m "feat: add curriculum module 4 (2 qubits et intrication)"
|
|
```
|