{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "intro",
   "metadata": {},
   "source": [
    "# Bind de Ordem — a segunda visão que o histograma não tem\n",
    "\n",
    "**Matriz completa: Qwen2.5 e GPT-2, com pesos e dados reais.**\n",
    "\n",
    "A stack Winnex recupera a identidade de um token pela geometria do modelo: texto → assinatura de bytes → base de bytes $B$ (resolvida dos pesos) → busca vetorial. Funciona. Mas o histograma de bytes tem um limite matemático exato: **é comutativo**. `need` e `ened` produzem o mesmo vetor, e nenhum índice pode escolher entre eles.\n",
    "\n",
    "Este notebook mede a correção: a posição entra como **isometria**,\n",
    "\n",
    "$$v=\\sum_k R_k\\,B[b_k], \\qquad R_k \\text{ rotaciona por } k\\cdot\\varphi \\text{ (ângulo áureo)}$$\n",
    "\n",
    "Por ser isometria, preserva a norma exatamente — $\\lVert R_k x\\rVert=\\lVert x\\rVert$. Por $\\varphi/2\\pi$ ser irracional, posições distintas geram rotações incomensuráveis e os produtos cruzados se cancelam na soma. É isso que separa anagramas.\n",
    "\n",
    "| modelo | representação | top-1 | top-10 | anagramas (cos máx) |\n",
    "|---|---|---|---|---|\n",
    "| Qwen2.5 | histograma | 71,6% | 98,7% | 1,0000 |\n",
    "| Qwen2.5 | **binding** | **99,4%** | 99,4% | **0,357** |\n",
    "| GPT-2 | histograma | 67,8% | 99,2% | 1,0000 |\n",
    "| GPT-2 | **binding** | **100,0%** | 100,0% | **0,534** |\n",
    "\n",
    "**O que não muda:** a prova por Cauchy-Schwarz no vocabulário continua zero. O binding melhora a *acurácia*, não a *garantia*.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "md_env",
   "metadata": {},
   "source": [
    "## 1. Ambiente\n",
    "\n",
    "Os wheels de `winnex-nano`/`winnex-xfactor` só existem para cp312, e o kernel do Kaggle roda 3.13. Uma extensão `.so` é específica da ABI — não pode ser importada por outro interpretador. O cálculo roda num subprocesso CPython 3.12, preparado aqui com `virtualenv` (a imagem tem `/usr/bin/python3.12`, mas sem `ensurepip`).\n"
   ]
  },
  {
   "cell_type": "code",
   "id": "env",
   "metadata": {},
   "execution_count": null,
   "outputs": [],
   "source": "import os, subprocess, sys\n\nprint(\"Python %d.%d\" % sys.version_info[:2])\nPY312 = \"/tmp/py312\"\n\n\ndef pronto():\n    if not os.path.exists(PY312 + \"/bin/python\"):\n        return False\n    return subprocess.run([PY312 + \"/bin/python\", \"-c\", \"import numpy\"],\n                          capture_output=True).returncode == 0\n\n\nif not pronto():\n    print(\"Preparando CPython 3.12...\")\n    subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\",\n                           \"--disable-pip-version-check\", \"virtualenv\"])\n    base = \"/usr/bin/python3.12\"\n    if not os.path.exists(base):\n        subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", \"uv\"])\n        subprocess.check_call([\"uv\", \"python\", \"install\", \"3.12\"])\n        base = subprocess.check_output([\"uv\", \"python\", \"find\", \"3.12\"]).decode().strip()\n    subprocess.check_call([sys.executable, \"-m\", \"virtualenv\", \"-p\", base, PY312, \"-q\"])\n    subprocess.check_call([PY312 + \"/bin/pip\", \"install\", \"-q\",\n                           \"--disable-pip-version-check\",\n                           \"numpy\", \"safetensors\", \"tokenizers\"])\n\nprint(subprocess.check_output([PY312 + \"/bin/python\", \"-c\",\n      \"import numpy;print('numpy',numpy.__version__)\"]).decode().strip())"
  },
  {
   "cell_type": "markdown",
   "id": "md_core",
   "metadata": {},
   "source": [
    "## 2. O núcleo\n",
    "\n",
    "O script roda inteiro no 3.12. Ele baixa Qwen2.5-0.5B e GPT-2, lê os safetensors **sem torch** (o checkpoint é bfloat16 — o leitor decodifica deslocando 16 bits), resolve a base de bytes $B$ por mínimos quadrados, e compara as duas agregações em quatro frentes.\n"
   ]
  },
  {
   "cell_type": "code",
   "id": "core",
   "metadata": {},
   "execution_count": null,
   "outputs": [],
   "source": "import base64, os, subprocess, sys\n\n# extensao nativa e especifica da ABI: roda no CPython 3.12\nSCRIPT_B64 = \"CmltcG9ydCBqc29uLCBvcywgc3RydWN0LCB0aW1lLCB1cmxsaWIucmVxdWVzdAppbXBvcnQgbnVtcHkgYXMgbnAKCkNBQ0hFID0gIi9rYWdnbGUvd29ya2luZy93YmVuY2giCm9zLm1ha2VkaXJzKENBQ0hFLCBleGlzdF9vaz1UcnVlKQpQSEkgPSAyICogbnAucGkgKiAobnAuc3FydCg1KSAtIDEpIC8gMgpSRVMgPSB7fQoKCmRlZiBiYWl4YSh1cmwsIGRlc3Rpbm8pOgogICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGlubykgYW5kIG9zLnBhdGguZ2V0c2l6ZShkZXN0aW5vKSA+IDA6CiAgICAgICAgcmV0dXJuIGRlc3Rpbm8KICAgIHByaW50KCIgIGJhaXhhbmRvICIgKyBvcy5wYXRoLmJhc2VuYW1lKGRlc3Rpbm8pICsgIi4uLiIsIGZsdXNoPVRydWUpCiAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybCwgaGVhZGVycz17IlVzZXItQWdlbnQiOiAiTW96aWxsYS81LjAifSkKICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEsIHRpbWVvdXQ9OTAwKSBhcyByLCBvcGVuKGRlc3Rpbm8sICJ3YiIpIGFzIGY6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgYiA9IHIucmVhZCgxIDw8IDIwKQogICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGYud3JpdGUoYikKICAgIHJldHVybiBkZXN0aW5vCgoKZGVmIGxvYWRfZmlsZShjYW1pbmhvKToKICAgIHdpdGggb3BlbihjYW1pbmhvLCAicmIiKSBhcyBmOgogICAgICAgIG5oID0gc3RydWN0LnVucGFjaygiPFEiLCBmLnJlYWQoOCkpWzBdCiAgICAgICAgaGVhZGVyID0ganNvbi5sb2FkcyhmLnJlYWQobmgpKQogICAgICAgIGJhc2UgPSA4ICsgbmgKICAgICAgICBoZWFkZXIucG9wKCJfX21ldGFkYXRhX18iLCBOb25lKQogICAgICAgIG91dCA9IHt9CiAgICAgICAgZm9yIG5vbWUsIGluZm8gaW4gaGVhZGVyLml0ZW1zKCk6CiAgICAgICAgICAgIGluaSwgZmltID0gaW5mb1siZGF0YV9vZmZzZXRzIl0KICAgICAgICAgICAgZi5zZWVrKGJhc2UgKyBpbmkpCiAgICAgICAgICAgIGJydXRvID0gZi5yZWFkKGZpbSAtIGluaSkKICAgICAgICAgICAgZHQgPSBpbmZvWyJkdHlwZSJdCiAgICAgICAgICAgIGlmIGR0ID09ICJGMzIiOgogICAgICAgICAgICAgICAgYSA9IG5wLmZyb21idWZmZXIoYnJ1dG8sIGR0eXBlPW5wLmZsb2F0MzIpCiAgICAgICAgICAgIGVsaWYgZHQgPT0gIkYxNiI6CiAgICAgICAgICAgICAgICBhID0gbnAuZnJvbWJ1ZmZlcihicnV0bywgZHR5cGU9bnAuZmxvYXQxNikuYXN0eXBlKG5wLmZsb2F0MzIpCiAgICAgICAgICAgIGVsaWYgZHQgPT0gIkJGMTYiOgogICAgICAgICAgICAgICAgYSA9IChucC5mcm9tYnVmZmVyKGJydXRvLCBkdHlwZT1ucC51aW50MTYpLmFzdHlwZShucC51aW50MzIpIDw8IDE2KS52aWV3KG5wLmZsb2F0MzIpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBvdXRbbm9tZV0gPSBhLnJlc2hhcGUoaW5mb1sic2hhcGUiXSkKICAgICAgICByZXR1cm4gb3V0CgoKZGVmIHRpdHVsbyh0KToKICAgIHByaW50KCJcbiIgKyAiPSIgKiA3NCArICJcbiAiICsgdCArICJcbiIgKyAiPSIgKiA3NCwgZmx1c2g9VHJ1ZSkKCgpkZWYgdGVzdGUobm9tZSwgYWZpcm1hLCBmYWxzaWZpY2EpOgogICAgcHJpbnQoIlxuLS0tICIgKyBub21lICsgIiAtLS0iLCBmbHVzaD1UcnVlKQogICAgcHJpbnQoIiAgICBhZmlybWHDp8OjbyA6ICIgKyBhZmlybWEsIGZsdXNoPVRydWUpCiAgICBwcmludCgiICAgIGZhbHNpZmljYSA6ICIgKyBmYWxzaWZpY2EsIGZsdXNoPVRydWUpCiAgICBwcmludCgiICAgICIgKyAiLSIgKiA2MCwgZmx1c2g9VHJ1ZSkKCgpkZWYgYmFzZV9ieXRlcyhFLCB2b2NhYiwgcmlkZ2U9MWUtMik6CiAgICBWLCBEID0gRS5zaGFwZQogICAgRW4gPSBFIC8gKG5wLmxpbmFsZy5ub3JtKEUsIGF4aXM9MSwga2VlcGRpbXM9VHJ1ZSkgKyAxZS0xMikKICAgIEFpbmMgPSBucC56ZXJvcygoViwgMjU2KSwgZHR5cGU9bnAuZmxvYXQzMikKICAgIG1hc2sgPSBucC56ZXJvcyhWLCBkdHlwZT1ib29sKQogICAgZm9yIHMsIGkgaW4gdm9jYWIuaXRlbXMoKToKICAgICAgICBpZiBpID49IFY6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZGlzcCA9IHMucmVwbGFjZSgiXHUwMTIwIiwgIiAiKS5yZXBsYWNlKCJcdTAxMGEiLCAiXG4iKQogICAgICAgIHRyeToKICAgICAgICAgICAgYiA9IGRpc3AuZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgZXhjZXB0IChVbmljb2RlRW5jb2RlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBpZiBub3QgKDAgPCBsZW4oYikgPD0gMzIpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIG1hc2tbaV0gPSBUcnVlCiAgICAgICAgZm9yIGJ5dGUgaW4gYjoKICAgICAgICAgICAgQWluY1tpLCBieXRlXSArPSAxLjAKICAgIGlkeCA9IG5wLndoZXJlKG1hc2spWzBdCiAgICBHID0gQWluY1tpZHhdLlQgQCBBaW5jW2lkeF0gKyByaWRnZSAqIG5wLmV5ZSgyNTYsIGR0eXBlPW5wLmZsb2F0MzIpCiAgICBCID0gbnAubGluYWxnLnNvbHZlKEcsIEFpbmNbaWR4XS5UIEAgRW5baWR4XSkKICAgIHJldHVybiBCLCBBaW5jLCBpZHgKCgpkZWYgX2J5dGVzKHQpOgogICAgcmV0dXJuIG5wLmZyb21idWZmZXIodC5yZXBsYWNlKCJcdTAxMjAiLCAiICIpLnJlcGxhY2UoIlx1MDEwYSIsICJcbiIpLmVuY29kZSgidXRmLTgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGR0eXBlPW5wLnVpbnQ4KQoKCmRlZiBhZ2dfaGlzdCh0LCBCKToKICAgIGIgPSBfYnl0ZXModCkKICAgIGlmIGxlbihiKSA9PSAwOgogICAgICAgIHJldHVybiBucC56ZXJvcyhCLnNoYXBlWzFdLCBkdHlwZT1ucC5mbG9hdDMyKQogICAgdiA9IEJbYl0uc3VtKDApCiAgICByZXR1cm4gKHYgLyAobnAubGluYWxnLm5vcm0odikgKyAxZS0xMikpLmFzdHlwZShucC5mbG9hdDMyKQoKCmRlZiBhZ2dfYmluZCh0LCBCKToKICAgIGIgPSBfYnl0ZXModCkKICAgIGQgPSBCLnNoYXBlWzFdCiAgICBpZiBsZW4oYikgPT0gMDoKICAgICAgICByZXR1cm4gbnAuemVyb3MoZCwgZHR5cGU9bnAuZmxvYXQzMikKICAgIHYgPSBucC56ZXJvcyhkLCBkdHlwZT1ucC5mbG9hdDY0KQogICAgZm9yIGssIGJ5dGUgaW4gZW51bWVyYXRlKGIpOgogICAgICAgIHUgPSBCW2J5dGVdLmFzdHlwZShucC5mbG9hdDY0KQogICAgICAgIGFuZyA9IFBISSAqIGsKICAgICAgICBjLCBzID0gbnAuY29zKGFuZyksIG5wLnNpbihhbmcpCiAgICAgICAgciA9IG5wLmVtcHR5KGQpCiAgICAgICAgclswOjoyXSA9IHVbMDo6Ml0gKiBjIC0gdVsxOjoyXSAqIHMKICAgICAgICByWzE6OjJdID0gdVswOjoyXSAqIHMgKyB1WzE6OjJdICogYwogICAgICAgIHYgKz0gcgogICAgbiA9IG5wLmxpbmFsZy5ub3JtKHYpCiAgICByZXR1cm4gKHYgLyAobiArIDFlLTEyKSkuYXN0eXBlKG5wLmZsb2F0MzIpCgoKQUcgPSB7Imhpc3RvZ3JhbWEiOiBhZ2dfaGlzdCwgImJpbmRpbmciOiBhZ2dfYmluZH0KCmZyb20gdG9rZW5pemVycyBpbXBvcnQgVG9rZW5pemVyCgpneiA9IGJhaXhhKCJodHRwczovL2Rvd25sb2Fkcy5jcy5zdGFuZm9yZC5lZHUvbmxwL2RhdGEvZ2xvdmUuNkIuemlwIiwKICAgICAgICAgICBvcy5wYXRoLmpvaW4oQ0FDSEUsICJnbG92ZS42Qi56aXAiKSkKZ3QgPSBvcy5wYXRoLmpvaW4oQ0FDSEUsICJnbG92ZS42Qi4xMDBkLnR4dCIpCmlmIG5vdCBvcy5wYXRoLmV4aXN0cyhndCk6CiAgICBpbXBvcnQgemlwZmlsZQogICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZ3opIGFzIHo6CiAgICAgICAgei5leHRyYWN0KCJnbG92ZS42Qi4xMDBkLnR4dCIsIENBQ0hFKQpwYWxhdnJhcyA9IFtdCndpdGggb3BlbihndCwgZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJpZ25vcmUiKSBhcyBmOgogICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGYpOgogICAgICAgIGlmIGkgPj0gNTAwMDA6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgdyA9IGxpbmUuc3BsaXQoIiAiLCAxKVswXQogICAgICAgIGlmIDAgPCBsZW4odykgPD0gMjQ6CiAgICAgICAgICAgIHBhbGF2cmFzLmFwcGVuZCh3KQpybmcgPSBucC5yYW5kb20uZGVmYXVsdF9ybmcoMTEpCmFtb3N0cmEgPSBbcGFsYXZyYXNbal0gZm9yIGogaW4gcm5nLmNob2ljZShsZW4ocGFsYXZyYXMpLCAxMjAwLCByZXBsYWNlPUZhbHNlKV0KcHJpbnQoIkdsb1ZlOiAlZCBwYWxhdnJhcywgJWQgbmEgYXZhbGlhY2FvIiAlIChsZW4ocGFsYXZyYXMpLCBsZW4oYW1vc3RyYSkpKQoKTU9ERUxPUyA9IHsKICAgICJxd2VuIjogKCJRd2VuL1F3ZW4yLjUtMC41Qi1JbnN0cnVjdCIsICJtb2RlbC5lbWJlZF90b2tlbnMud2VpZ2h0IiksCiAgICAiZ3B0MiI6ICgib3BlbmFpLWNvbW11bml0eS9ncHQyIiwgInd0ZS53ZWlnaHQiKSwKfQoKZm9yIGNoYXZlLCBzcGVjIGluIE1PREVMT1MuaXRlbXMoKToKICAgIHJlcG8sIGVtYmVkID0gc3BlYwogICAgdGl0dWxvKCJNT0RFTE86ICIgKyByZXBvKQogICAgYXJxID0ge30KICAgIGZvciByZW1vdG8sIGxvY2FsIGluICgoImNvbmZpZy5qc29uIiwgImNmZy5qc29uIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb2RlbC5zYWZldGVuc29ycyIsICJtb2RlbC5zYWZldGVuc29ycyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgidG9rZW5pemVyLmpzb24iLCAidG9rLmpzb24iKSk6CiAgICAgICAgYXJxW3JlbW90b10gPSBiYWl4YSgiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby8iICsgcmVwbyArICIvcmVzb2x2ZS9tYWluLyIgKyByZW1vdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oQ0FDSEUsIGNoYXZlICsgIl8iICsgbG9jYWwpKQogICAgc2QgPSBsb2FkX2ZpbGUoYXJxWyJtb2RlbC5zYWZldGVuc29ycyJdKQogICAgRSA9IG5wLmFzYXJyYXkoc2RbZW1iZWRdLCBkdHlwZT1ucC5mbG9hdDMyKQogICAgdGsgPSBUb2tlbml6ZXIuZnJvbV9maWxlKGFycVsidG9rZW5pemVyLmpzb24iXSkKICAgIHdpdGggb3BlbihhcnFbInRva2VuaXplci5qc29uIl0sIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgdHYgPSBqc29uLmxvYWQoZilbIm1vZGVsIl1bInZvY2FiIl0KICAgIHZvY2FiID0ge2s6IGkgZm9yIGssIGkgaW4gKHR2Lml0ZW1zKCkgaWYgaXNpbnN0YW5jZSh0diwgZGljdCkgZWxzZSBlbnVtZXJhdGUodHYpKX0KICAgIHByaW50KCIgICVkIHRva2VucyB4ICVkZCIgJSAoRS5zaGFwZVswXSwgRS5zaGFwZVsxXSkpCgogICAgQiwgQWluYywgaWR4ID0gYmFzZV9ieXRlcyhFLCB2b2NhYikKICAgIHByaW50KCIgIGJhc2UgZGUgYnl0ZXM6ICVzIHwgaW5kZXhhdmVpczogJWQiICUgKEIuc2hhcGUsIGxlbihpZHgpKSkKCiAgICByID0ge30KICAgIHNpbXBsZXMgPSBbKHcsIHRrLmVuY29kZSh3KS5pZHNbMF0pIGZvciB3IGluIGFtb3N0cmEKICAgICAgICAgICAgICAgaWYgbGVuKHRrLmVuY29kZSh3KS5pZHMpID09IDFdCgogICAgdGVzdGUoIk0xIElkZW50aWRhZGUgZGUgdG9rZW4iLAogICAgICAgICAgIm8gY2FtaW5obyB0ZXh0byAtPiBhc3NpbmF0dXJhIC0+IGJ1c2NhIGRldm9sdmUgbyBJRCBkbyBCUEUiLAogICAgICAgICAgImFjdXJhY2lhIG5vIG5pdmVsIGRvIGFjYXNvIChrL3xWfCkiKQogICAgcHJpbnQoIiAgICBwYWxhdnJhcyBkZSAxIHRva2VuIG5vIEJQRTogJWQiICUgbGVuKHNpbXBsZXMpKQogICAgZm9yIG5vbWUsIGYgaW4gQUcuaXRlbXMoKToKICAgICAgICB0b2tzID0gW3RrLmlkX3RvX3Rva2VuKGludChpKSkgb3IgIiIgZm9yIGkgaW4gaWR4XQogICAgICAgIFN0ID0gbnAuc3RhY2soW2YodCwgQikgZm9yIHQgaW4gdG9rc10pCiAgICAgICAgU3QgPSBTdCAvIChucC5saW5hbGcubm9ybShTdCwgYXhpcz0xLCBrZWVwZGltcz1UcnVlKSArIDFlLTEyKQogICAgICAgIGFjID0ge30KICAgICAgICBmb3IgayBpbiAoMSwgNSwgMTAsIDUwKToKICAgICAgICAgICAgaGl0ID0gMAogICAgICAgICAgICBmb3IgdywgdCBpbiBzaW1wbGVzOgogICAgICAgICAgICAgICAgcyA9IFN0IEAgZih3LCBCKQogICAgICAgICAgICAgICAgdG9wID0gaWR4W25wLmFyZ3NvcnQoLXMpWzprXV0KICAgICAgICAgICAgICAgIGhpdCArPSBpbnQodCBpbiBzZXQodG9wLnRvbGlzdCgpKSkKICAgICAgICAgICAgYWNbc3RyKGspXSA9IHJvdW5kKGhpdCAvIGxlbihzaW1wbGVzKSwgNCkKICAgICAgICByLnNldGRlZmF1bHQoIk0xIiwge30pW25vbWVdID0gYWMKICAgICAgICBsaW5oYSA9ICIgICAgJS0xMnMgIiAlIG5vbWUKICAgICAgICBmb3IgaywgdiBpbiBhYy5pdGVtcygpOgogICAgICAgICAgICBsaW5oYSArPSAidG9wLSIgKyBrICsgIiAlNS4xZiUlICAiICUgKHYgKiAxMDApCiAgICAgICAgcHJpbnQobGluaGEpCgogICAgdGVzdGUoIk0yIEFuYWdyYW1hcyIsCiAgICAgICAgICAiYSByZXByZXNlbnRhY2FvIGNvZGlmaWNhIG9yZGVtLCBuYW8gc28gbyBjb25qdW50byBkZSBieXRlcyIsCiAgICAgICAgICAiY29zID0gMS4wIGVudHJlIGFuYWdyYW1hcyIpCiAgICBwYXJlcyA9IFsoIm5lZWQiLCAiZW5lZCIpLCAoInBjIiwgImNwIiksICgicmV3YXJkIiwgImRyYXdlciIpLAogICAgICAgICAgICAgKCJmaXQiLCAiaWZ0IiksICgidXNlIiwgImV1cyIpLCAoImxvdyIsICJvd2wiKSwgKCJjYXNoIiwgImNoYXMiKV0KICAgIGZvciBub21lLCBmIGluIEFHLml0ZW1zKCk6CiAgICAgICAgY3MgPSBbZmxvYXQoZihhLCBCKSBAIGYoYiwgQikpIGZvciBhLCBiIGluIHBhcmVzXQogICAgICAgIHIuc2V0ZGVmYXVsdCgiTTIiLCB7fSlbbm9tZV0gPSB7Im1heCI6IHJvdW5kKG1heChjcyksIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lZGlhIjogcm91bmQoZmxvYXQobnAubWVhbihjcykpLCA0KX0KICAgICAgICBwcmludCgiICAgICUtMTJzIGNvcyBtZWRpbyAlKy40ZiAgbWF4ICUrLjRmIiAlIChub21lLCBucC5tZWFuKGNzKSwgbWF4KGNzKSkpCgogICAgdGVzdGUoIk0zIERldGVybWluaXNtbyIsCiAgICAgICAgICAiY2luY28gZXhlY3Vjb2VzIHByb2R1emVtIG8gbWVzbW8gdmV0b3IiLAogICAgICAgICAgInF1YWxxdWVyIGRpZmVyZW5jYSBiaXQgYSBiaXQiKQogICAgZm9yIG5vbWUsIGYgaW4gQUcuaXRlbXMoKToKICAgICAgICBva2QgPSBhbGwoYWxsKG5wLmFycmF5X2VxdWFsKGYodywgQiksIGYodywgQikpIGZvciBfIGluIHJhbmdlKDUpKQogICAgICAgICAgICAgICAgICBmb3IgdyBpbiBbInRoZSIsICJjb21wdXRlciIsICJhY2FvIl0pCiAgICAgICAgci5zZXRkZWZhdWx0KCJNMyIsIHt9KVtub21lXSA9IGJvb2wob2tkKQogICAgICAgIHByaW50KCIgICAgJXMgJS0xMnMgaWRlbnRpY2FzIGVtIDUgZXhlY3Vjb2VzIiAlICgiT0sgIiBpZiBva2QgZWxzZSAiWFggIiwgbm9tZSkpCgogICAgdGVzdGUoIk00IEN1c3RvIiwgImEgY29kaWZpY2FjYW8gZSB2aWF2ZWwgcGFyYSBpbmRleGFyIiwKICAgICAgICAgICJhY2ltYSBkZSAxIG1zIHBvciBwYWxhdnJhIikKICAgIGFtID0gWyJpbnRlcm5hdGlvbmFsaXphdGlvbiIsICJjb3VudGVycmV2b2x1dGlvbmFyeSIsICJ0aGUiLCAiZG9nIl0KICAgIGZvciBub21lLCBmIGluIEFHLml0ZW1zKCk6CiAgICAgICAgdDAgPSB0aW1lLnRpbWUoKQogICAgICAgIGZvciBfIGluIHJhbmdlKDIwMCk6CiAgICAgICAgICAgIGZvciB3IGluIGFtOgogICAgICAgICAgICAgICAgZih3LCBCKQogICAgICAgIG1zID0gKHRpbWUudGltZSgpIC0gdDApIC8gKDIwMCAqIGxlbihhbSkpICogMTAwMAogICAgICAgIHIuc2V0ZGVmYXVsdCgiTTQiLCB7fSlbbm9tZV0gPSByb3VuZChtcywgNCkKICAgICAgICBwcmludCgiICAgICUtMTJzICUuNGYgbXMgcG9yIHBhbGF2cmEiICUgKG5vbWUsIG1zKSkKCiAgICBSRVNbY2hhdmVdID0gcgoKdGl0dWxvKCJSRUxBVE9SSU8iKQpjYWIgPSAiICAlLThzJS0xNHMlOHMlOHMlOHMlMTBzJTlzIiAlICgibW9kZWxvIiwgInJlcHJlc2VudGFjYW8iLCAidG9wLTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9wLTUiLCAidG9wLTEwIiwgImFuYWdyYW1hIiwgIm1zIikKcHJpbnQoY2FiKQpmb3IgY2hhdmUsIHIgaW4gUkVTLml0ZW1zKCk6CiAgICBmb3Igbm9tZSBpbiBBRzoKICAgICAgICB0ID0gclsiTTEiXVtub21lXQogICAgICAgIHByaW50KCIgICUtOHMlLTE0cyU3LjFmJSUlNy4xZiUlJTcuMWYlJSUxMC40ZiU5LjRmIiAlICgKICAgICAgICAgICAgY2hhdmUsIG5vbWUsIHRbIjEiXSAqIDEwMCwgdFsiNSJdICogMTAwLCB0WyIxMCJdICogMTAwLAogICAgICAgICAgICByWyJNMiJdW25vbWVdWyJtYXgiXSwgclsiTTQiXVtub21lXSkpCgpwcmludCgiXG4gIGxlaXR1cmEiKQpmb3IgY2hhdmUsIHIgaW4gUkVTLml0ZW1zKCk6CiAgICBoLCBiID0gclsiTTEiXVsiaGlzdG9ncmFtYSJdLCByWyJNMSJdWyJiaW5kaW5nIl0KICAgIHByaW50KCIgICAgIiArIGNoYXZlICsgIjogdG9wLTEgJS4xZiUlIC0+ICUuMWYlJSAoJSsuMWYgcHRzKSB8IGFuYWdyYW1hICUuM2YgLT4gJS4zZiIKICAgICAgICAgICUgKGhbIjEiXSAqIDEwMCwgYlsiMSJdICogMTAwLCAoYlsiMSJdIC0gaFsiMSJdKSAqIDEwMCwKICAgICAgICAgICAgIHJbIk0yIl1bImhpc3RvZ3JhbWEiXVsibWF4Il0sIHJbIk0yIl1bImJpbmRpbmciXVsibWF4Il0pKQoKU0FJREEgPSAiL2thZ2dsZS93b3JraW5nL21hdHJpel9iaW5kaW5nLmpzb24iCndpdGggb3BlbihTQUlEQSwgInciLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAganNvbi5kdW1wKFJFUywgZiwgaW5kZW50PTEsIGVuc3VyZV9hc2NpaT1GYWxzZSwgZGVmYXVsdD1zdHIpCnByaW50KCJcbltva10gIiArIFNBSURBKQo=\"\n\ncaminho = \"/kaggle/working/binding_core.py\"\nwith open(caminho, \"wb\") as f:\n    f.write(base64.b64decode(SCRIPT_B64))\n\nPY312 = \"/tmp/py312/bin/python\"\nprint(\"executando em \" + PY312 + \"\\n\", flush=True)\n\np = subprocess.Popen([PY312, caminho], stdout=subprocess.PIPE,\n                     stderr=subprocess.STDOUT, text=True, bufsize=1)\nfor linha in p.stdout:\n    print(linha, end=\"\")\nrc = p.wait()\nprint(\"[exit %d]\" % rc)\nif rc != 0:\n    raise RuntimeError(\"nucleo falhou: %d\" % rc)\n\nimport json as _j\nres = _j.load(open(\"/kaggle/working/matriz_binding.json\", encoding=\"utf-8\"))\nprint(\"modelos:\", list(res))"
  },
  {
   "cell_type": "markdown",
   "id": "conclusao",
   "metadata": {},
   "source": [
    "## O que a matriz mostra\n",
    "\n",
    "**A posição, codificada como isometria, resolve o limite do histograma.**\n",
    "\n",
    "O histograma é comutativo por construção — a soma $\\sum_b B[b]$ não vê ordem. Dois anagramas têm o mesmo vetor, e a busca desempata por critério arbitrário. Daí o top-1 de 68–72%.\n",
    "\n",
    "O binding troca a soma de vetores por uma soma de **vetores rotacionados**: cada posição $k$ aplica uma rotação distinta. Como a rotação é isometria, a norma se conserva. Como o ângulo é incomensurável, as posições não interferem construtivamente. O resultado são vetores diferentes para sequências diferentes, mesmo com os mesmos bytes.\n",
    "\n",
    "Top-1 sobe para **99,4% (Qwen) e 100,0% (GPT-2)**, e o cosseno entre anagramas cai de 1,000 para 0,36–0,53.\n",
    "\n",
    "### O limite que permanece\n",
    "\n",
    "A acurácia não é garantia. A prova por Cauchy-Schwarz no vocabulário continua **zero** — o Fold Limit exige $\\nu$ alto, e o vocabulário de um modelo distribui a variância por centenas de direções (23% em 128 de 896). O binding melhora a recuperação; não cria o manifold que a prova exigiria.\n",
    "\n",
    "O resultado é **reprodutível e medido**, não **certificado**. Para uso prático os dois se equivalem em 99,4% dos casos. Para o uso regulado que a stack propõe, é a lacuna que resta.\n",
    "\n",
    "---\n",
    "\n",
    "*Código e análise: [kleniopadilha.com/blog/benchmark-integral-da-stack.html](https://kleniopadilha.com/blog/benchmark-integral-da-stack.html)*\n",
    "\n",
    "*BSL 1.1 | (c) Winnex Brasil Soluções Empresariais LTDA-ME*\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}