Spaces:
Running
Running
Download index.html from Reginaldo5/zyql: direct link, hf CLI and curl.
- Browser
- Download file 13.3 kB
-
https://huggingface.co/spaces/Reginaldo5/zyql/resolve/main/index.html
- Command line
-
hf download hf://spaces/Reginaldo5/zyql/index.html
-
curl -L -o index.html https://huggingface.co/spaces/Reginaldo5/zyql/resolve/main/index.html
13.3 kB
| <html lang="pt-BR"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>ZYQL — Trivalent Quantum Language</title> | |
| <style> | |
| :root{ | |
| --bg:#0b0e14;--card:#121722;--border:#232b3d;--ink:#e6e9f2;--mut:#8b93a8; | |
| --acc:#7c6cff;--ok:#3ddc97;--no:#ff6b6b;--ref:#ffb454;--unk:#8b93a8; | |
| } | |
| *{box-sizing:border-box;margin:0;padding:0} | |
| body{background:var(--bg);color:var(--ink);font:15px/1.55 ui-monospace,'Cascadia Mono',Menlo,Consolas,monospace;padding:28px 18px 60px} | |
| .wrap{max-width:880px;margin:0 auto} | |
| h1{font-size:1.5rem;letter-spacing:.5px} | |
| h1 .sig{color:var(--acc)} | |
| .sub{color:var(--mut);margin:6px 0 22px} | |
| .sub a{color:var(--acc);text-decoration:none} | |
| .katas{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:10px;margin-bottom:18px} | |
| .k{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 14px;text-align:left;color:var(--ink);cursor:pointer;font:inherit;transition:border-color .15s} | |
| .k:hover{border-color:var(--acc)} | |
| .k b{display:block;color:var(--acc);font-size:.82rem;margin-bottom:3px} | |
| .k span{font-size:.78rem;color:var(--mut)} | |
| .panel{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px} | |
| .panel h2{font-size:.8rem;color:var(--mut);font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px} | |
| textarea{width:100%;background:var(--bg);color:var(--ink);border:1px solid var(--border);border-radius:8px;padding:10px;font:12px/1.5 ui-monospace,monospace;min-height:150px;resize:vertical} | |
| textarea:focus{outline:1px solid var(--acc)} | |
| .go{margin-top:10px;background:var(--acc);color:#fff;border:none;border-radius:8px;padding:10px 22px;font:inherit;font-weight:700;cursor:pointer} | |
| .go:hover{filter:brightness(1.1)} | |
| .verdict{display:flex;align-items:center;gap:16px;margin:16px 0 10px} | |
| .badge{font-size:2.2rem;font-weight:800;padding:8px 26px;border-radius:12px;border:2px solid} | |
| .v1{color:var(--ok);border-color:var(--ok);background:rgba(61,220,151,.07)} | |
| .v0{color:var(--no);border-color:var(--no);background:rgba(255,107,107,.07)} | |
| .vREF{color:var(--ref);border-color:var(--ref);background:rgba(255,180,84,.07)} | |
| .vUNK{color:var(--unk);border-color:var(--unk);background:rgba(139,147,168,.07)} | |
| .vmeta{font-size:.85rem;color:var(--mut)} | |
| .vmeta b{color:var(--ink)} | |
| .ev{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;white-space:pre-wrap;font-size:.78rem;color:var(--mut);max-height:340px;overflow:auto} | |
| .ev b{color:var(--ink)} | |
| footer{margin-top:26px;color:var(--mut);font-size:.74rem;line-height:1.7} | |
| footer a{color:var(--acc);text-decoration:none} | |
| .err{color:var(--ref)} | |
| </style> | |
| </head> | |
| <body> | |
| <div class="wrap"> | |
| <h1><span class="sig">ℨ</span> ZYQL — Trivalent Quantum Language</h1> | |
| <p class="sub">O LLM propõe. O conhecimento fundamenta. O <b>ZYQL decide</b>. ASK FIRST. PROVE NEXT. COMPUTE LAST.<br> | |
| Kernel trivalente <b>1 / 0 / REFUSED</b> rodando exato no seu navegador · | |
| <a href="https://github.com/SerenaSolutions/zephirum">repositório</a> · | |
| DOI <a href="https://doi.org/10.5281/zenodo.23330695">10.5281/zenodo.23330695</a> · | |
| jobs reais IBM Quantum <span style="color:var(--ok)">ibm_fez</span></p> | |
| <div class="katas" id="katas"></div> | |
| <div class="panel"> | |
| <h2>Programa ZYQL (JSON) — decida sem executar <span style="color:var(--ref)">(inteiros > 2³³: use aspas, ex. "31557600000000000")</span></h2> | |
| <textarea id="prog" spellcheck="false"></textarea> | |
| <button class="go" id="go">ASK ⟶ DECIDE</button> | |
| <div id="out"></div> | |
| </div> | |
| <footer> | |
| Kernel demo: port JS exato (BigInt) de um subconjunto auditado do núcleo ZEPHIRUM — famílias | |
| threshold_sum (eliminação por cotas), geometric_series (forma fechada) e entanglement sparse(≤64) | |
| (posto-1 por menores 2×2 em todos os cortes, frações exatas). O motor completo (Python + C, | |
| verificador independente, recibos ML-DSA-44) vive no repositório, com a suite científica no CI. | |
| Estados honestos: UNKNOWN não é palpite; REFUSED não é derrota é disciplina (§12). | |
| Autor: Reginaldo Pinezi Uhlmann | |
| (<a href="https://orcid.org/0009-0005-3212-5179">ORCID 0009-0005-3212-5179</a>). | |
| Este certificado de demonstração prova integridade da decisão exibida; a assinatura ML-DSA-44 real está nos recibos do repositório. | |
| </footer> | |
| </div> | |
| <script> | |
| ; | |
| /* ---------- aritmética exata: frações BigInt ---------- */ | |
| const F = (n, d=1n) => (d<0n?[-n,-d]:[n,d]); | |
| const fmul=(a,b)=>[a[0]*b[0], a[1]*b[1]]; | |
| const fsub=(a,b)=>[a[0]*b[1]-b[0]*a[1], a[1]*b[1]]; | |
| const fcmp0=a=>a[0]===0n?0:(a[0]>0?1:-1); | |
| const feq=(a,b)=>a[0]*b[1]===b[0]*a[1]; | |
| const fstr=a=>a[1]===1n?`${a[0]}`:`${a[0]}/${a[1]}`; | |
| /* ---------- famílias do kernel (port do núcleo auditado) ---------- */ | |
| function thresholdSum(m){ | |
| const terms=m.terms.map(t=>F(BigInt(String(t)))); | |
| let k=0n; for(const t of terms) k+=t[0]*t[1]; | |
| const u=(m.unknown_lo!==undefined)?{lo:BigInt(String(m.unknown_lo)),hi:BigInt(String(m.unknown_hi)),n:BigInt(String(m.n_unknown||1))}:null; | |
| const thr=F(BigInt(m.threshold)); | |
| if(u){ | |
| const min=k+u.lo*u.n, max=k+u.hi*u.n; | |
| const units=u.n; | |
| if(min>thr[0]) return {verdict:"1",status:"DECIDED_WITHOUT_EXECUTION",kernel:"BOUNDS_ELIMINATION", | |
| eliminated:units,original:units,ev:{min_sum:`${min}`,max_sum:`${max}`,rule:"min > threshold (nenhum termo executado)"}}; | |
| if(max<thr[0]) return {verdict:"0",status:"DECIDED_WITHOUT_EXECUTION",kernel:"BOUNDS_ELIMINATION", | |
| eliminated:units,original:units,ev:{min_sum:`${min}`,max_sum:`${max}`,rule:"max < threshold (nenhum termo executado)"}}; | |
| return {verdict:"UNKNOWN",status:"UNKNOWN",kernel:"NONE",eliminated:0n,original:units, | |
| ev:{min_sum:`${min}`,max_sum:`${max}`,rule:"cotas não decidem a questão — sem palpite"}}; | |
| } | |
| const s=F(k,1n); | |
| const v=feq(s,thr)?0:(fcmp0(fsub(s,thr))>0?1:-1); | |
| const op=m.op||">"; | |
| const ok=(op===">"&&v>0)||(op==="<="&&v<=0)||(op===">="&&v>=0)||(op==="<"&&v<0); | |
| return {verdict:ok?"1":"0",status:"FULL_EXECUTION_REQUIRED",kernel:"FULL_SUM", | |
| eliminated:0n,original:BigInt(m.terms.length),ev:{full_sum:`${k}`}}; | |
| } | |
| function geometricSeries(m){ | |
| const r=BigInt(String(m.r)), n=BigInt(String(m.n)); | |
| const closed = r===1n ? n+1n : (r**(n+1n)-1n)/(r-1n); // r≠1 exige r pequeno (limite prático do navegador) | |
| const thr=BigInt(String(m.threshold)); | |
| const v = closed>thr?1:-1; | |
| const op=m.op||">"; | |
| const ok=(op===">"&&closed>thr)||(op==="<="&&closed<=thr)||(op===">="&&closed>=thr)||(op==="<"&&closed<thr); | |
| // baseline honesta: 1e9 adicoes/s | |
| const anos=Number(n+1n)/1e9/31557600; | |
| return {verdict:ok?"1":"0",status:"DECIDED_WITHOUT_EXECUTION",kernel:"GEOMETRIC_CLOSED_FORM", | |
| eliminated:n+1n,original:n+1n, | |
| ev:{closed_form:`${closed}`,naive_estimate: anos>=1?`execucao completa ≈ ${anos>=100?Math.round(anos)+" ANOS":anos.toFixed(1)+" anos"}`:`execucao completa ≈ ${(Number(n+1n)/1e9).toFixed(1)} s`, | |
| rule:"forma fechada — nenhuma adicao executada"}}; | |
| } | |
| function entangleSparse(m){ | |
| const N=Number(m.n); | |
| if(!(N>=1&&N<=64)) return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE",eliminated:0n,original:0n, | |
| ev:{reason:"sparse(N): N = 1..64 (espaco declarado)"}}; | |
| if(m.entries.length===0) return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE",eliminated:0n,original:0n, | |
| ev:{reason:"zero state is not a quantum state"}}; | |
| const ents=m.entries.map(e=>[BigInt(String(e[0])),F(BigInt(String(e[1])),e[2]?BigInt(String(e[2])):1n)]); | |
| for(const e of ents) if(e[0]>=(1n<<BigInt(N))) return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE", | |
| eliminated:0n,original:0n,ev:{reason:"indice alem do espaco 2^N"}}; | |
| // posto-1 por menores 2x2 em TODOS os cortes k | N-k (rota independente, exata) | |
| let separable=true, corteGuilty=0; | |
| const M=new Map(ents.map(([i,a])=>[i.toString(),a])); | |
| for(let k=1;k<N&&separable;k++){ | |
| const lo=BigInt(N-k); | |
| for(let x=0;x<ents.length&&separable;x++) | |
| for(let y=x+1;y<ents.length&&separable;y++){ | |
| const [i1,a1]=ents[x],[i2,a2]=ents[y]; | |
| const r1=i1>>lo,c1=i1&((1n<<lo)-1n),r2=i2>>lo,c2=i2&((1n<<lo)-1n); | |
| if(r1===r2||c1===c2) continue; | |
| const key=(r,c)=>((r<<lo)|c).toString(); | |
| const B=M.get(key(r1,c2))||[0n,1n]; // M[r1,c2] ausente => 0 | |
| const C=M.get(key(r2,c1))||[0n,1n]; // M[r2,c1] ausente => 0 | |
| const minor=fsub(fmul(a1,a2),fmul(B,C)); // menor 2x2 das linhas r1,r2 e colunas c1,c2 | |
| if(fcmp0(minor)!==0){separable=false;corteGuilty=k;} | |
| } | |
| } | |
| const ent=!separable; | |
| const naive=(2n**BigInt(N)); // amplitudes | |
| return {verdict:ent?"1":"0",status:"DECIDED_WITHOUT_EXECUTION",kernel:"SPARSE_RANK1_MINORS", | |
| eliminated:naive,original:naive, | |
| ev:{n_qubits:N,support:ents.length,fully_separable:!ent, | |
| cut_found:corteGuilty?("posto 2 no corte q"+corteGuilty+"|"+(N-corteGuilty)):"posto 1 em todos os cortes", | |
| naive_note:`execucao completa = 2^${N} = ${naive.toString().slice(0,15)}${naive>10n**15n?"…":""} amplitudes`}}; | |
| } | |
| function decide(p){ | |
| try{ | |
| if(!p.model||!p.model.type) return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE",eliminated:0n,original:0n,ev:{reason:"programa sem MODEL.type — portã de proposito recusa"}}; | |
| const t=p.model.type; | |
| if(t==="threshold_sum") return thresholdSum(p.model); | |
| if(t==="geometric_series") return geometricSeries(p.model); | |
| if(t==="entanglement") return entangleSparse(p.model); | |
| return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE",eliminated:0n,original:0n, | |
| ev:{reason:`familia '${t}' fora do kernel demo — motor completo no repositorio`}}; | |
| }catch(e){ | |
| return {verdict:"REFUSED",status:"REFUSED",kernel:"NONE",eliminated:0n,original:0n, | |
| ev:{reason:"programa malformado: "+e.message}}; | |
| } | |
| } | |
| /* ---------- certificado sha256 ---------- */ | |
| async function certHash(obj){ | |
| const canon=JSON.stringify(obj); | |
| const buf=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(canon)); | |
| return [...new Uint8Array(buf)].map(b=>b.toString(16).padStart(2,"0")).join(""); | |
| } | |
| /* ---------- katas ---------- */ | |
| const KATAS=[ | |
| {name:"A soma de 100 anos",desc:"31,5 quadrilhões de adições decididas sem somar uma", | |
| prog:{question:"sum > 20.000.000.000.000.000 ?",model:{type:"geometric_series",r:"1",n:"31557600000000000",threshold:"20000000000000000",op:">"}}}, | |
| {name:"Eliminação por cotas",desc:"unknown em faixa 0..9 decidido por eliminação de min/max", | |
| prog:{question:"sum > 50 ?",model:{type:"threshold_sum",terms:[60,30,20,5],unknown_lo:0,unknown_hi:9,n_unknown:1,threshold:50,op:">"}}}, | |
| {name:"UNKNOWN honesto",desc:"as cotas não decidem — o kernel devolve UNKNOWN, não palpite", | |
| prog:{question:"sum > 80 ?",model:{type:"threshold_sum",terms:[60,15],unknown_lo:0,unknown_hi:9,n_unknown:1,threshold:80,op:">"}}}, | |
| {name:"Emaranhado 64 qubits",desc:"2^64 amplitudes = séculos; posto-1 decide em milissegundos", | |
| prog:{question:"entangled == 1 ?",model:{type:"entanglement",n:64,entries:[["0","3"],["18446744073709551615","5"]]}}}, | |
| {name:"Estado produto",desc:"posto 1 em todos os cortes: veredito 0 (separável)", | |
| prog:{question:"entangled == 1 ?",model:{type:"entanglement",n:20,entries:[[0,7],[1,5]]}}}, | |
| {name:"REFUSED (§12)",desc:"índice fora do espaço declarado: recusa com motivo", | |
| prog:{question:"entangled == 1 ?",model:{type:"entanglement",n:4,entries:[[999,1]]}}} | |
| ]; | |
| const $=id=>document.getElementById(id); | |
| function renderKatas(){ | |
| $("katas").innerHTML=KATAS.map((k,i)=> | |
| `<button class="k" data-i="${i}"><b>${k.name}</b><span>${k.desc}</span></button>`).join(""); | |
| [...document.querySelectorAll(".k")].forEach(b=>b.onclick=()=>{ | |
| $("prog").value=JSON.stringify(KATAS[+b.dataset.i].prog,null,2); | |
| run(); | |
| }); | |
| } | |
| async function run(){ | |
| const out=$("out"); | |
| let p; | |
| try{p=JSON.parse($("prog").value);}catch(e){out.innerHTML=`<div class="verdict"><div class="badge vREF">REFUSED</div><div class="vmeta err">JSON malformado: ${e.message}</div></div>`;return;} | |
| const t0=performance.now(); | |
| const r=decide(p); | |
| const dt=(performance.now()-t0).toFixed(2); | |
| const ch=await certHash({program:p,decision:r}); | |
| const cls=r.verdict==="1"?"v1":r.verdict==="0"?"v0":r.verdict==="REFUSED"?"vREF":"vUNK"; | |
| const el=(r.eliminated>0n||r.eliminated>0)?`eliminadas <b>${BigInt(r.eliminated).toLocaleString("pt-BR")}</b> de ${BigInt(r.original).toLocaleString("pt-BR")} unidades (${(100*Number(r.eliminated)/Number(r.original||1)).toFixed(1)}%)`:"eliminação: n/a"; | |
| out.innerHTML=`<div class="verdict"><div class="badge ${cls}">${r.verdict}</div> | |
| <div class="vmeta">status: <b>${r.status}</b><br>kernel: <b>${r.kernel}</b><br>decidido em <b>${dt} ms</b><br>${el}</div></div> | |
| <div class="ev"><b>certificate sha256</b>: ${ch.slice(0,32)}…<br><br>${JSON.stringify(r.ev,null,1)}</div>`; | |
| } | |
| $("go").onclick=run; | |
| renderKatas(); | |
| $("prog").value=JSON.stringify(KATAS[0].prog,null,2); | |
| </script> | |
| </body> | |
| </html> | |