"source": "## META | difficulty 1 | Objectives\n\nThis bundle introduces the transform itself in its negacyclic form.\n\nFocus:\n\n- the difference between `\u03c9` and `\u03c8`\n- direct NTT\u03c8 and INTT\u03c8\n- the direct convolution theorem in the negacyclic setting\n- why this is still too slow at `O(n^2)` without butterflies\n"
},
{
"cell_type": "markdown",
"metadata": {
"pedagogy": {
"role": "mandatory",
"difficulty": 2,
"kind": "explanation",
"title": "Why \u03c8 Shows Up"
}
},
"source": "## MANDATORY | difficulty 2 | Why \u03c8 Shows Up\n\nFor negative-wrapped convolution, the clean transform formula uses a `2n`-th root `\u03c8` with:\n\n- `\u03c8^2 = \u03c9`\n- `\u03c8^n = -1`\n\nThat is what bakes the negacyclic sign rule into the transform itself.\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pedagogy": {
"role": "mandatory",
"difficulty": 2,
"kind": "demo",
"title": "Inspect \u03c9, \u03c8, And The Direct Transform Matrix"
"title": "Direct NTT\u03c8 Is Mechanically Clear But Still Quadratic"
}
},
"source": "## MANDATORY | difficulty 2 | Direct NTT\u03c8 Is Mechanically Clear But Still Quadratic\n\nThe direct transform is useful because every coefficient and every exponent is visible.\nIt is not yet efficient. It still performs the full matrix multiplication.\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pedagogy": {
"role": "mandatory",
"difficulty": 2,
"kind": "demo",
"title": "Run A Direct NTT\u03c8 / INTT\u03c8 Round Trip"
"source": "## MANDATORY | difficulty 2 | Retrieval Check\n\n1. Why is `\u03c8` stronger than `\u03c9` in the negacyclic story?\n2. What exact property does the inverse add that the forward transform does not?\n3. Why are we still dissatisfied after seeing the direct transform work correctly?\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pedagogy": {
"role": "facultative",
"difficulty": 4,
"kind": "exploration",
"title": "Optional: Compare Positive And Negative Wrapped Transforms"