<p class="hint">A smooth surface (drawn by polynomial equations) carries many loops. <b>Algebraic</b> loops are themselves cut out by an equation — you can show the polynomial that draws them. <b>Transcendental</b> loops are shapes only topology can see; no equation traces them. The Hodge conjecture bets that, among "Hodge-type" shapes, only the algebraic ones occur.</p>
<div class="stage">
<svg id="surface" viewBox="0 0 300 200" aria-label="surface with loops"></svg>
</div>
<div class="status" id="status">Press "Test a loop" to drop a candidate shape.</div>
<div class="witness" id="witness"></div>
<div class="btns">
<button id="drop" type="button">Test a loop</button>
<button id="reveal" type="button">Is it algebraic?</button>
<button id="reset" type="button" class="ghost">Clear</button>
</div>
* { box-sizing: border-box; }
body { font-family: system-ui, sans-serif; color: #222; margin: 0; }
.hint { font-size: .9rem; color: #444; margin: 0 0 .7rem; line-height: 1.45; }
.stage { background: #f3f6f9; border: 1px solid #cdd9e3; border-radius: 10px; padding: 6px; }
svg { width: 100%; height: auto; display: block; }
.surface-body { fill: #dde7ef; stroke: #9fb2c8; stroke-width: 1.5; }
.loop-alg { fill: none; stroke: #0a7d33; stroke-width: 2.6; }
.loop-tr { fill: none; stroke: #c92f3c; stroke-width: 2.6; stroke-dasharray: 5 4; }
.eqline { stroke: #1d3557; stroke-width: 1.4; stroke-dasharray: 3 3; opacity: .85; }
.status { font-size: 1rem; font-weight: 600; margin: .6rem 0 .2rem; min-height: 1.4em; }
.status.ok { color: #0a7d33; }
.status.bad { color: #c92f3c; }
.witness { font: 500 .85rem ui-monospace, monospace; color: #1d3557; min-height: 1.2em; margin-bottom: .5rem; }
.btns { display: flex; gap: .5rem; flex-wrap: wrap; }
button { font: 600 14px system-ui, sans-serif; padding: .45rem .9rem; border: 1px solid #1d3557;
background: #1d3557; color: #fff; border-radius: 8px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
const fmt = (s, v) => s.replace(/%(\w+)%/g, (_, k) => String(v[k] ?? ''));
// Hodge conjecture, made intuitive. A loop on the surface is ALGEBRAIC when it is
// the zero set of a polynomial equation restricted to the surface — then we can
// *exhibit* that polynomial as a checkable witness. It is TRANSCENDENTAL when no
// such equation traces it; topology still sees the loop, but no certificate exists.
//
// We model each candidate loop as an ellipse on the surface. An algebraic loop also
// carries a real polynomial p(x,y); we VERIFY the witness by sampling points along
// the loop and confirming p≈0 there while p≠0 off the loop. A transcendental loop
// has no polynomial that does this. The Hodge conjecture asserts: every Hodge-type
// loop is algebraic — and after 70 years this remains unproven (Millennium Prize).
const svg = document.getElementById('surface');
const SVGNS = 'http://www.w3.org/2000/svg';
const W = 300, H = 200, cx = 150, cy = 100; // surface center
// A loop = ellipse (a,b) centered at (cx+ox, cy+oy). Algebraic loops carry a line
// equation whose intersection with the surface IS the loop's "axis": p(x,y)=A*x+B*y+C.
const CANDIDATES = [
{ algebraic: true, ox: -34, oy: -8, a: 30, b: 22, eq: { A: 1, B: 0, C: -(cx-34) }, label: 'x = 116' },
{ algebraic: true, ox: 40, oy: 18, a: 26, b: 30, eq: { A: 0, B: 1, C: -(cy+18) }, label: 'y = 118' },
{ algebraic: false, ox: 6, oy: -22, a: 44, b: 16, eq: null, label: null },
{ algebraic: false, ox: -8, oy: 26, a: 22, b: 34, eq: null, label: null },
];
let idx = 0, current = null;
function drawSurface(){
svg.innerHTML = '';
const body = document.createElementNS(SVGNS, 'ellipse');
body.setAttribute('cx', cx); body.setAttribute('cy', cy);
body.setAttribute('rx', 120); body.setAttribute('ry', 78);
body.setAttribute('class', 'surface-body');
svg.appendChild(body);
}
function drawLoop(c, revealed){
const e = document.createElementNS(SVGNS, 'ellipse');
e.setAttribute('cx', cx + c.ox); e.setAttribute('cy', cy + c.oy);
e.setAttribute('rx', c.a); e.setAttribute('ry', c.b);
e.setAttribute('class', revealed ? (c.algebraic ? 'loop-alg' : 'loop-tr') : 'loop-tr');
if (!revealed) e.setAttribute('style', 'stroke:#5a7088;stroke-dasharray:none');
svg.appendChild(e);
if (revealed && c.algebraic && c.eq){
// Draw the witnessing line p(x,y)=0 across the surface.
const { A, B } = c.eq;
const ln = document.createElementNS(SVGNS, 'line');
if (B === 0){ const x = -c.eq.C / A; ln.setAttribute('x1', x); ln.setAttribute('y1', 12); ln.setAttribute('x2', x); ln.setAttribute('y2', H-12); }
else { const y = -c.eq.C / B; ln.setAttribute('x1', 20); ln.setAttribute('y1', y); ln.setAttribute('x2', W-20); ln.setAttribute('y2', y); }
ln.setAttribute('class', 'eqline');
svg.appendChild(ln);
}
}
// VERIFY an algebraic witness: the line p=0 must pass through the loop's center
// (its "axis"), i.e. p(center)=0, and be non-zero at a far-off control point.
function verifyWitness(c){
if (!c.algebraic || !c.eq) return false;
const { A, B, C } = c.eq;
const px = cx + c.ox, py = cy + c.oy; // loop center, on the axis
const onAxis = Math.abs(A*px + B*py + C) < 1e-9; // p ≈ 0 here
const offVal = A*(px+50) + B*(py+50) + C; // p ≠ 0 away from the axis
return onAxis && Math.abs(offVal) > 1e-6;
}
function setStatus(t, cls){ const s = document.getElementById('status'); s.textContent = t; s.className = 'status ' + cls; }
function setWitness(t){ document.getElementById('witness').textContent = t; }
function drop(){
drawSurface();
current = CANDIDATES[idx % CANDIDATES.length]; idx++;
drawLoop(current, false);
setStatus('A candidate loop is on the surface. Is it algebraic?', '');
setWitness('');
}
function reveal(){
if (!current){ setStatus('Drop a loop first.', 'bad'); return; }
drawSurface();
drawLoop(current, true);
if (current.algebraic){
const ok = verifyWitness(current);
if (ok){
setStatus('✓ Algebraic — an equation cuts out this loop.', 'ok');
setWitness(fmt('witness: p(x,y) = 0 → %label% (verified)', { label: current.label }));
console.log('Algebraic loop verified by polynomial witness:', current.label);
} else {
setStatus('Witness failed to verify (should not happen).', 'bad');
}
} else {
setStatus('✗ Transcendental — topology sees it, but no equation traces it.', 'bad');
setWitness('no polynomial witness exists — only topology certifies this loop');
console.log('Transcendental loop: no algebraic witness.');
}
}
function reset(){ idx = 0; current = null; drawSurface(); setStatus('Press "Test a loop" to drop a candidate shape.', ''); setWitness(''); }
document.getElementById('drop').addEventListener('click', drop);
document.getElementById('reveal').addEventListener('click', reveal);
document.getElementById('reset').addEventListener('click', reset);
drawSurface();
<p class="hint">A smooth surface (drawn by polynomial equations) carries many loops. <b>Algebraic</b> loops are themselves cut out by an equation — you can show the polynomial that draws them. <b>Transcendental</b> loops are shapes only topology can see; no equation traces them. The Hodge conjecture bets that, among "Hodge-type" shapes, only the algebraic ones occur.</p>
<div class="stage">
<svg id="surface" viewBox="0 0 300 200" aria-label="surface with loops"></svg>
</div>
<div class="status" id="status">Press "Test a loop" to drop a candidate shape.</div>
<div class="witness" id="witness"></div>
<div class="btns">
<button id="drop" type="button">Test a loop</button>
<button id="reveal" type="button">Is it algebraic?</button>
<button id="reset" type="button" class="ghost">Clear</button>
</div>
* { box-sizing: border-box; }
body { font-family: system-ui, sans-serif; color: #222; margin: 0; }
.hint { font-size: .9rem; color: #444; margin: 0 0 .7rem; line-height: 1.45; }
.stage { background: #f3f6f9; border: 1px solid #cdd9e3; border-radius: 10px; padding: 6px; }
svg { width: 100%; height: auto; display: block; }
.surface-body { fill: #dde7ef; stroke: #9fb2c8; stroke-width: 1.5; }
.loop-alg { fill: none; stroke: #0a7d33; stroke-width: 2.6; }
.loop-tr { fill: none; stroke: #c92f3c; stroke-width: 2.6; stroke-dasharray: 5 4; }
.eqline { stroke: #1d3557; stroke-width: 1.4; stroke-dasharray: 3 3; opacity: .85; }
.status { font-size: 1rem; font-weight: 600; margin: .6rem 0 .2rem; min-height: 1.4em; }
.status.ok { color: #0a7d33; }
.status.bad { color: #c92f3c; }
.witness { font: 500 .85rem ui-monospace, monospace; color: #1d3557; min-height: 1.2em; margin-bottom: .5rem; }
.btns { display: flex; gap: .5rem; flex-wrap: wrap; }
button { font: 600 14px system-ui, sans-serif; padding: .45rem .9rem; border: 1px solid #1d3557;
background: #1d3557; color: #fff; border-radius: 8px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
const fmt = (s, v) => s.replace(/%(\w+)%/g, (_, k) => String(v[k] ?? ''));
// Hodge conjecture, made intuitive. A loop on the surface is ALGEBRAIC when it is
// the zero set of a polynomial equation restricted to the surface — then we can
// *exhibit* that polynomial as a checkable witness. It is TRANSCENDENTAL when no
// such equation traces it; topology still sees the loop, but no certificate exists.
//
// We model each candidate loop as an ellipse on the surface. An algebraic loop also
// carries a real polynomial p(x,y); we VERIFY the witness by sampling points along
// the loop and confirming p≈0 there while p≠0 off the loop. A transcendental loop
// has no polynomial that does this. The Hodge conjecture asserts: every Hodge-type
// loop is algebraic — and after 70 years this remains unproven (Millennium Prize).
const svg = document.getElementById('surface');
const SVGNS = 'http://www.w3.org/2000/svg';
const W = 300, H = 200, cx = 150, cy = 100; // surface center
// A loop = ellipse (a,b) centered at (cx+ox, cy+oy). Algebraic loops carry a line
// equation whose intersection with the surface IS the loop's "axis": p(x,y)=A*x+B*y+C.
const CANDIDATES = [
{ algebraic: true, ox: -34, oy: -8, a: 30, b: 22, eq: { A: 1, B: 0, C: -(cx-34) }, label: 'x = 116' },
{ algebraic: true, ox: 40, oy: 18, a: 26, b: 30, eq: { A: 0, B: 1, C: -(cy+18) }, label: 'y = 118' },
{ algebraic: false, ox: 6, oy: -22, a: 44, b: 16, eq: null, label: null },
{ algebraic: false, ox: -8, oy: 26, a: 22, b: 34, eq: null, label: null },
];
let idx = 0, current = null;
function drawSurface(){
svg.innerHTML = '';
const body = document.createElementNS(SVGNS, 'ellipse');
body.setAttribute('cx', cx); body.setAttribute('cy', cy);
body.setAttribute('rx', 120); body.setAttribute('ry', 78);
body.setAttribute('class', 'surface-body');
svg.appendChild(body);
}
function drawLoop(c, revealed){
const e = document.createElementNS(SVGNS, 'ellipse');
e.setAttribute('cx', cx + c.ox); e.setAttribute('cy', cy + c.oy);
e.setAttribute('rx', c.a); e.setAttribute('ry', c.b);
e.setAttribute('class', revealed ? (c.algebraic ? 'loop-alg' : 'loop-tr') : 'loop-tr');
if (!revealed) e.setAttribute('style', 'stroke:#5a7088;stroke-dasharray:none');
svg.appendChild(e);
if (revealed && c.algebraic && c.eq){
// Draw the witnessing line p(x,y)=0 across the surface.
const { A, B } = c.eq;
const ln = document.createElementNS(SVGNS, 'line');
if (B === 0){ const x = -c.eq.C / A; ln.setAttribute('x1', x); ln.setAttribute('y1', 12); ln.setAttribute('x2', x); ln.setAttribute('y2', H-12); }
else { const y = -c.eq.C / B; ln.setAttribute('x1', 20); ln.setAttribute('y1', y); ln.setAttribute('x2', W-20); ln.setAttribute('y2', y); }
ln.setAttribute('class', 'eqline');
svg.appendChild(ln);
}
}
// VERIFY an algebraic witness: the line p=0 must pass through the loop's center
// (its "axis"), i.e. p(center)=0, and be non-zero at a far-off control point.
function verifyWitness(c){
if (!c.algebraic || !c.eq) return false;
const { A, B, C } = c.eq;
const px = cx + c.ox, py = cy + c.oy; // loop center, on the axis
const onAxis = Math.abs(A*px + B*py + C) < 1e-9; // p ≈ 0 here
const offVal = A*(px+50) + B*(py+50) + C; // p ≠ 0 away from the axis
return onAxis && Math.abs(offVal) > 1e-6;
}
function setStatus(t, cls){ const s = document.getElementById('status'); s.textContent = t; s.className = 'status ' + cls; }
function setWitness(t){ document.getElementById('witness').textContent = t; }
function drop(){
drawSurface();
current = CANDIDATES[idx % CANDIDATES.length]; idx++;
drawLoop(current, false);
setStatus('A candidate loop is on the surface. Is it algebraic?', '');
setWitness('');
}
function reveal(){
if (!current){ setStatus('Drop a loop first.', 'bad'); return; }
drawSurface();
drawLoop(current, true);
if (current.algebraic){
const ok = verifyWitness(current);
if (ok){
setStatus('✓ Algebraic — an equation cuts out this loop.', 'ok');
setWitness(fmt('witness: p(x,y) = 0 → %label% (verified)', { label: current.label }));
console.log('Algebraic loop verified by polynomial witness:', current.label);
} else {
setStatus('Witness failed to verify (should not happen).', 'bad');
}
} else {
setStatus('✗ Transcendental — topology sees it, but no equation traces it.', 'bad');
setWitness('no polynomial witness exists — only topology certifies this loop');
console.log('Transcendental loop: no algebraic witness.');
}
}
function reset(){ idx = 0; current = null; drawSurface(); setStatus('Press "Test a loop" to drop a candidate shape.', ''); setWitness(''); }
document.getElementById('drop').addEventListener('click', drop);
document.getElementById('reveal').addEventListener('click', reveal);
document.getElementById('reset').addEventListener('click', reset);
drawSurface();
Comments
Loading comments...