Spaces:
Running
v0.6: TAF Card hero+accordion UI + γ_check + Lean+Mathlib badges
Browse files- Hero strip (arch class + meta + 3 pills: count breakdown, γ headline, Anti-Ising) + 4 accordions: Recipes, Diagnostics, Verification, Provenance
- New js/gamma_check.js: Padé closed-form + classifyRegime (normal/fraud/compressed/overpade/swa), browser-only
- New js/lean_badges.js + data/lean_status.json: manifest of 37 theorems in 7 groups + 1 substantive finding (V_derivative_ne_RG_beta factor-2). Sortable theorem table, hero Anti-Ising pill links to Taf/Identities.lean#L188 (beta_chi_closure)
- Verdict aggregation: count breakdown (✅ · ⚠ · ❌) replaces worst-of-N confusion when orthogonal recipes disagree
- ⓘ tooltips inline: hero pills (3), Profile form params (6), Diagnostics keys (6), γ_check results (5)
- Help v0.6 section: TAF Card layout + 5 regime use cases + Cardy ΔH + concrete Lean reverify command + 37/1 count, all 4 langs
- i18n EN/ES/FR/ZH parity: 295+ keys per lang, 0 missing
- gamma_check classifier verified 5/5 regimes via headless Chrome simulation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- data/lean_status.json +506 -0
- index.html +31 -6
- js/gamma_check.js +70 -0
- js/i18n.js +424 -20
- js/lean_badges.js +119 -0
- js/main.js +189 -43
- style.css +179 -0
|
@@ -0,0 +1,506 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"generated_at": "2026-05-06",
|
| 4 |
+
"lean_repo": {
|
| 5 |
+
"name": "karlesmarin/lean-taf",
|
| 6 |
+
"url": "https://github.com/karlesmarin/lean-taf",
|
| 7 |
+
"default_branch": "master",
|
| 8 |
+
"commit": "25c77fd2180b8e0d6bc9a634de36667f11597cae",
|
| 9 |
+
"commit_short": "25c77fd",
|
| 10 |
+
"commit_date": "2026-05-05T22:50:58+02:00",
|
| 11 |
+
"build_status": "ok",
|
| 12 |
+
"build_jobs": 1973,
|
| 13 |
+
"compile_time_seconds": 5,
|
| 14 |
+
"lean_toolchain": "leanprover/lean4:v4.30.0-rc2",
|
| 15 |
+
"mathlib_imports": [
|
| 16 |
+
"Mathlib.Data.Real.Basic",
|
| 17 |
+
"Mathlib.Analysis.SpecialFunctions.Pow.Real",
|
| 18 |
+
"Mathlib.Analysis.Calculus.Deriv.Pow",
|
| 19 |
+
"Mathlib.Analysis.Calculus.Deriv.Add",
|
| 20 |
+
"Mathlib.Tactic"
|
| 21 |
+
],
|
| 22 |
+
"verification_report": "tmp/FORMULAS_LEAN_VERIFICATION_2026-05-05.md"
|
| 23 |
+
},
|
| 24 |
+
"summary": {
|
| 25 |
+
"theorems_total": 37,
|
| 26 |
+
"lean_verified": 37,
|
| 27 |
+
"lean_rejected": 0,
|
| 28 |
+
"skipped_sorry": 0,
|
| 29 |
+
"substantive_findings": 1
|
| 30 |
+
},
|
| 31 |
+
"findings": [
|
| 32 |
+
{
|
| 33 |
+
"id": "F1",
|
| 34 |
+
"title": "V/β factor-of-2 inconsistency in paper formula tables",
|
| 35 |
+
"severity": "substantive",
|
| 36 |
+
"detected_by": "V_derivative_ne_RG_beta",
|
| 37 |
+
"fixed_by": ["V_correct_derivative", "V_correct_matches_RG_beta"],
|
| 38 |
+
"summary": "Paper tables jointly state V(γ)=γ−γ³/3 + β=−V' + β(γ)=−(1−γ²)/2. Lean proves these inconsistent ∀γ∉{−1,+1} (residual factor 2). Corrected V_correct(γ)=γ/2−γ³/6 *does* integrate to the RG β.",
|
| 39 |
+
"recommendation": "Restate V as γ/2 − γ³/6, or rescale β to −(1−γ²), or document the Lagrangian-normalization convention."
|
| 40 |
+
}
|
| 41 |
+
],
|
| 42 |
+
"groups": [
|
| 43 |
+
{
|
| 44 |
+
"id": "pade",
|
| 45 |
+
"title": "Padé approximant identities",
|
| 46 |
+
"theorems": [
|
| 47 |
+
{
|
| 48 |
+
"name": "pade_22_minus_pade_11",
|
| 49 |
+
"kind": "theorem",
|
| 50 |
+
"file": "Taf/RGFlow.lean",
|
| 51 |
+
"line": 31,
|
| 52 |
+
"claim": "Padé[2,2](z) − Padé[1,1](z) = 2z³ / ((z+2)(z²+6z+12))",
|
| 53 |
+
"preconditions": ["z + 2 ≠ 0", "z² + 6z + 12 ≠ 0"],
|
| 54 |
+
"tactic": "field_simp; ring",
|
| 55 |
+
"status": "ok",
|
| 56 |
+
"tags": ["pade", "exact"],
|
| 57 |
+
"source": { "doc": "FORMULA_TABLE.md", "line": 13, "label": "G-15 ★ EXACT" }
|
| 58 |
+
},
|
| 59 |
+
{
|
| 60 |
+
"name": "one_minus_pade_11",
|
| 61 |
+
"kind": "theorem",
|
| 62 |
+
"file": "Taf/RGFlow.lean",
|
| 63 |
+
"line": 50,
|
| 64 |
+
"claim": "1 − (2−z)/(2+z) = 2z/(2+z)",
|
| 65 |
+
"preconditions": ["2 + z ≠ 0"],
|
| 66 |
+
"tactic": "field_simp; ring",
|
| 67 |
+
"status": "ok",
|
| 68 |
+
"tags": ["pade", "exact"],
|
| 69 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "section": "§4.4", "line": 572, "label": "★ EXACT" }
|
| 70 |
+
},
|
| 71 |
+
{
|
| 72 |
+
"name": "pade_z_substitution",
|
| 73 |
+
"kind": "theorem",
|
| 74 |
+
"file": "Taf/RGFlow.lean",
|
| 75 |
+
"line": 207,
|
| 76 |
+
"claim": "γ_Padé canonical form: with z = T√2/θ, (2−z)/(2+z) = (2θ − T√2) / (2θ + T√2)",
|
| 77 |
+
"preconditions": ["θ ≠ 0", "2θ + T√2 ≠ 0"],
|
| 78 |
+
"tactic": "field_simp",
|
| 79 |
+
"status": "ok",
|
| 80 |
+
"tags": ["pade", "exact", "core"],
|
| 81 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "section": "§4.1", "line": 456, "label": "★ EXACT" }
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"name": "theta_eff_pade",
|
| 85 |
+
"kind": "theorem",
|
| 86 |
+
"file": "Taf/RGFlow.lean",
|
| 87 |
+
"line": 61,
|
| 88 |
+
"claim": "θ_eff_Padé: T√2 / (1 − γ_Padé(T√2/θ)) = θ + T/√2",
|
| 89 |
+
"preconditions": ["θ ≠ 0", "T ≠ 0", "2θ + T√2 ≠ 0"],
|
| 90 |
+
"tactic": "field_simp; ring_nf + manual rewrite √2³ = √2·2",
|
| 91 |
+
"status": "ok",
|
| 92 |
+
"tags": ["pade", "exact", "core"],
|
| 93 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 572, "label": "★ EXACT" }
|
| 94 |
+
},
|
| 95 |
+
{
|
| 96 |
+
"name": "pade_saturation_leading_coefficient",
|
| 97 |
+
"kind": "theorem",
|
| 98 |
+
"file": "Taf/AmGmPade.lean",
|
| 99 |
+
"line": 100,
|
| 100 |
+
"claim": "Padé[2,2] − Padé[1,1] leading coefficient at z=0 is 1/12",
|
| 101 |
+
"tactic": "norm_num + field_simp",
|
| 102 |
+
"status": "ok",
|
| 103 |
+
"tags": ["pade", "audit_finding"],
|
| 104 |
+
"source": { "doc": "FORMULA_TABLE.md", "label": "★ EXACT (Padé saturation, paper §sec:gamma_decomposition)" }
|
| 105 |
+
}
|
| 106 |
+
]
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"id": "rg_flow",
|
| 110 |
+
"title": "RG flow / β-function (with V/β factor-2 finding)",
|
| 111 |
+
"theorems": [
|
| 112 |
+
{
|
| 113 |
+
"name": "logistic_to_beta_algebraic",
|
| 114 |
+
"kind": "theorem",
|
| 115 |
+
"file": "Taf/RGFlow.lean",
|
| 116 |
+
"line": 91,
|
| 117 |
+
"claim": "Substitution x = (1−γ)/2 ⇒ x(1−x) = (1−γ²)/4",
|
| 118 |
+
"tactic": "ring",
|
| 119 |
+
"status": "ok",
|
| 120 |
+
"tags": ["rg", "exact"],
|
| 121 |
+
"source": { "doc": "FORMULA_TABLE.md", "line": 90, "label": "§23 ✅ ALGEBRAIC EXACT" }
|
| 122 |
+
},
|
| 123 |
+
{
|
| 124 |
+
"name": "V_derivative",
|
| 125 |
+
"kind": "theorem",
|
| 126 |
+
"file": "Taf/RGFlow.lean",
|
| 127 |
+
"line": 111,
|
| 128 |
+
"claim": "d/dγ (γ − γ³/3) = 1 − γ²",
|
| 129 |
+
"tactic": "HasDerivAt chain (id, pow, div_const, sub)",
|
| 130 |
+
"status": "ok",
|
| 131 |
+
"tags": ["rg", "exact"],
|
| 132 |
+
"source": { "doc": "FORMULA_TABLE.md", "line": 91, "label": "§23 ✅ ALGEBRAIC EXACT" }
|
| 133 |
+
},
|
| 134 |
+
{
|
| 135 |
+
"name": "V_derivative_ne_RG_beta",
|
| 136 |
+
"kind": "theorem",
|
| 137 |
+
"file": "Taf/RGFlow.lean",
|
| 138 |
+
"line": 122,
|
| 139 |
+
"claim": "−V'(γ) ≠ −(1 − γ²)/2 for all γ ∉ {−1, +1}",
|
| 140 |
+
"preconditions": ["γ ≠ 1", "γ ≠ −1"],
|
| 141 |
+
"tactic": "linarith after expanding V'(γ) = 1 − γ²",
|
| 142 |
+
"status": "ok",
|
| 143 |
+
"tags": ["rg", "audit_finding", "substantive"],
|
| 144 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "section": "§19", "line": 191, "label": "FINDING — factor-2 inconsistency" }
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"name": "V_correct_derivative",
|
| 148 |
+
"kind": "theorem",
|
| 149 |
+
"file": "Taf/RGFlow.lean",
|
| 150 |
+
"line": 238,
|
| 151 |
+
"claim": "d/dγ (γ/2 − γ³/6) = (1 − γ²)/2",
|
| 152 |
+
"tactic": "HasDerivAt chain",
|
| 153 |
+
"status": "ok",
|
| 154 |
+
"tags": ["rg", "fix"],
|
| 155 |
+
"source": { "doc": "FORMULAS_LEAN_VERIFICATION_2026-05-05.md", "label": "Corrected V" }
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"name": "V_correct_matches_RG_beta",
|
| 159 |
+
"kind": "theorem",
|
| 160 |
+
"file": "Taf/RGFlow.lean",
|
| 161 |
+
"line": 256,
|
| 162 |
+
"claim": "−d/dγ (γ/2 − γ³/6) = −(1 − γ²)/2 = β(γ)",
|
| 163 |
+
"tactic": "rw [V_correct_derivative]; ring",
|
| 164 |
+
"status": "ok",
|
| 165 |
+
"tags": ["rg", "fix"],
|
| 166 |
+
"source": { "doc": "FORMULAS_LEAN_VERIFICATION_2026-05-05.md", "label": "V_correct integrates to RG β" }
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"name": "trajectory_sign_inversion",
|
| 170 |
+
"kind": "theorem",
|
| 171 |
+
"file": "Taf/RGFlow.lean",
|
| 172 |
+
"line": 344,
|
| 173 |
+
"claim": "Trajectory tanh sign convention check (paper used +t/2; correct is −t/2 from dγ/dt = −(1−γ²)/2)",
|
| 174 |
+
"tactic": "deriv computation + sign analysis",
|
| 175 |
+
"status": "ok",
|
| 176 |
+
"tags": ["rg", "audit_finding"]
|
| 177 |
+
}
|
| 178 |
+
]
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"id": "cayley",
|
| 182 |
+
"title": "Cayley fixed-point + χ susceptibility roots",
|
| 183 |
+
"theorems": [
|
| 184 |
+
{
|
| 185 |
+
"name": "cayley_fixed_point_iff",
|
| 186 |
+
"kind": "theorem",
|
| 187 |
+
"file": "Taf/RGFlow.lean",
|
| 188 |
+
"line": 139,
|
| 189 |
+
"claim": "−(z − 2)/(z + 2) = z ⟺ z² + 3z − 2 = 0",
|
| 190 |
+
"preconditions": ["z + 2 ≠ 0"],
|
| 191 |
+
"tactic": "nlinarith after clearing denominator",
|
| 192 |
+
"status": "ok",
|
| 193 |
+
"tags": ["cayley"],
|
| 194 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 173 }
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"name": "cayley_root",
|
| 198 |
+
"kind": "theorem",
|
| 199 |
+
"file": "Taf/RGFlow.lean",
|
| 200 |
+
"line": 151,
|
| 201 |
+
"claim": "z* = (√17 − 3)/2 satisfies z*² + 3z* − 2 = 0",
|
| 202 |
+
"tactic": "explicit Real.sq_sqrt expansion",
|
| 203 |
+
"status": "ok",
|
| 204 |
+
"tags": ["cayley", "exact"],
|
| 205 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 174, "label": "Physical fixed point z*" }
|
| 206 |
+
},
|
| 207 |
+
{
|
| 208 |
+
"name": "chi_root",
|
| 209 |
+
"kind": "theorem",
|
| 210 |
+
"file": "Taf/RGFlow.lean",
|
| 211 |
+
"line": 170,
|
| 212 |
+
"claim": "χ = (5 + √17)/4 satisfies 2χ² − 5χ + 1 = 0",
|
| 213 |
+
"tactic": "explicit Real.sq_sqrt expansion",
|
| 214 |
+
"status": "ok",
|
| 215 |
+
"tags": ["cayley", "exact"],
|
| 216 |
+
"source": { "doc": "FORMULA_TABLE.md", "line": 92, "label": "§26 ✅ ALGEBRAIC EXACT" }
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"name": "cayley_floquet_form_equivalence",
|
| 220 |
+
"kind": "theorem",
|
| 221 |
+
"file": "Taf/RGFlow.lean",
|
| 222 |
+
"line": 310,
|
| 223 |
+
"claim": "−4(√17+1)/(5√17+13) = (√17 − 9)/8 (equivalent forms; both ≈ −0.6096)",
|
| 224 |
+
"tactic": "nlinarith via div_eq_div_iff",
|
| 225 |
+
"status": "ok",
|
| 226 |
+
"tags": ["cayley", "exact"],
|
| 227 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 177 }
|
| 228 |
+
},
|
| 229 |
+
{
|
| 230 |
+
"name": "cayley_floquet_stable",
|
| 231 |
+
"kind": "theorem",
|
| 232 |
+
"file": "Taf/RGFlow.lean",
|
| 233 |
+
"line": 290,
|
| 234 |
+
"claim": "|(√17 − 9)/8| < 1 (stable attractor, |μ| < 1)",
|
| 235 |
+
"tactic": "abs_of_neg + linarith with √17 < 5",
|
| 236 |
+
"status": "ok",
|
| 237 |
+
"tags": ["cayley", "stability"],
|
| 238 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 178, "label": "STABLE attractor" }
|
| 239 |
+
}
|
| 240 |
+
]
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"id": "dsage",
|
| 244 |
+
"title": "D-SAGE algebraic identities (Sage Groebner + Lean)",
|
| 245 |
+
"theorems": [
|
| 246 |
+
{
|
| 247 |
+
"name": "D_SAGE_1",
|
| 248 |
+
"kind": "theorem",
|
| 249 |
+
"file": "Taf/Identities.lean",
|
| 250 |
+
"line": 47,
|
| 251 |
+
"claim": "2η² + η·γ_χ + 1 = 0 (★★ CORE quadratic identity)",
|
| 252 |
+
"preconditions": ["γ ≠ 1"],
|
| 253 |
+
"tactic": "field_simp; ring",
|
| 254 |
+
"status": "ok",
|
| 255 |
+
"tags": ["dsage", "core"],
|
| 256 |
+
"source": { "doc": "analysis/sage_recursive_sweep_2026-04-30.sage", "label": "Groebner-discovered" }
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"name": "D_SAGE_2",
|
| 260 |
+
"kind": "theorem",
|
| 261 |
+
"file": "Taf/Identities.lean",
|
| 262 |
+
"line": 56,
|
| 263 |
+
"claim": "β·χ = −1 (Phase A signature, Anti-Ising marker)",
|
| 264 |
+
"preconditions": ["γ ≠ 1"],
|
| 265 |
+
"tactic": "field_simp; ring",
|
| 266 |
+
"status": "ok",
|
| 267 |
+
"tags": ["dsage", "anti_ising", "core"]
|
| 268 |
+
},
|
| 269 |
+
{
|
| 270 |
+
"name": "D_SAGE_4",
|
| 271 |
+
"kind": "theorem",
|
| 272 |
+
"file": "Taf/Identities.lean",
|
| 273 |
+
"line": 65,
|
| 274 |
+
"claim": "α + χ = 2 (Josephson hyperscaling consequence)",
|
| 275 |
+
"preconditions": ["γ ≠ 1"],
|
| 276 |
+
"tactic": "field_simp; ring",
|
| 277 |
+
"status": "ok",
|
| 278 |
+
"tags": ["dsage"]
|
| 279 |
+
},
|
| 280 |
+
{
|
| 281 |
+
"name": "D_SAGE_5",
|
| 282 |
+
"kind": "theorem",
|
| 283 |
+
"file": "Taf/Identities.lean",
|
| 284 |
+
"line": 74,
|
| 285 |
+
"claim": "α + γ_χ = 2(2 − γ) (linear sum identity)",
|
| 286 |
+
"preconditions": ["γ ≠ 1"],
|
| 287 |
+
"tactic": "field_simp; ring",
|
| 288 |
+
"status": "ok",
|
| 289 |
+
"tags": ["dsage"]
|
| 290 |
+
},
|
| 291 |
+
{
|
| 292 |
+
"name": "D_SAGE_7",
|
| 293 |
+
"kind": "theorem",
|
| 294 |
+
"file": "Taf/Identities.lean",
|
| 295 |
+
"line": 182,
|
| 296 |
+
"claim": "c · |ν_imprint| · 2π = 3 (CFT central charge × imprint slope dimensional closure)",
|
| 297 |
+
"tactic": "ring",
|
| 298 |
+
"status": "ok",
|
| 299 |
+
"tags": ["dsage", "imprint"]
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"name": "rushbrooke_tautology",
|
| 303 |
+
"kind": "theorem",
|
| 304 |
+
"file": "Taf/Identities.lean",
|
| 305 |
+
"line": 92,
|
| 306 |
+
"claim": "2β + γ_χ = ν · d at d=1 (Rushbrooke hyperscaling, holds as TAUTOLOGY in TAF since γ_χ defined to satisfy)",
|
| 307 |
+
"preconditions": ["γ ≠ 1"],
|
| 308 |
+
"tactic": "field_simp; ring",
|
| 309 |
+
"status": "ok",
|
| 310 |
+
"tags": ["dsage", "tautology"]
|
| 311 |
+
},
|
| 312 |
+
{
|
| 313 |
+
"name": "josephson_tautology",
|
| 314 |
+
"kind": "theorem",
|
| 315 |
+
"file": "Taf/Identities.lean",
|
| 316 |
+
"line": 101,
|
| 317 |
+
"claim": "2 − α = ν · d at d=1 (Josephson hyperscaling, TAUTOLOGY in TAF)",
|
| 318 |
+
"preconditions": ["γ ≠ 1"],
|
| 319 |
+
"tactic": "field_simp; ring",
|
| 320 |
+
"status": "ok",
|
| 321 |
+
"tags": ["dsage", "tautology"]
|
| 322 |
+
},
|
| 323 |
+
{
|
| 324 |
+
"name": "fisher_zero_iff",
|
| 325 |
+
"kind": "theorem",
|
| 326 |
+
"file": "Taf/Identities.lean",
|
| 327 |
+
"line": 119,
|
| 328 |
+
"claim": "Fisher relation γ_χ = (2 − η)·ν holds iff residual γ(2γ−3)/(1−γ) = 0 (i.e. NEVER in Phase A)",
|
| 329 |
+
"preconditions": ["γ ≠ 1"],
|
| 330 |
+
"tactic": "field_simp; ring",
|
| 331 |
+
"status": "ok",
|
| 332 |
+
"tags": ["dsage", "independent"]
|
| 333 |
+
},
|
| 334 |
+
{
|
| 335 |
+
"name": "beta_chi_closure",
|
| 336 |
+
"kind": "theorem",
|
| 337 |
+
"file": "Taf/Identities.lean",
|
| 338 |
+
"line": 188,
|
| 339 |
+
"claim": "β · χ = −1 (Anti-Ising β=γ−1<0 closure, machine-verified)",
|
| 340 |
+
"preconditions": ["γ ≠ 1"],
|
| 341 |
+
"tactic": "field_simp; ring",
|
| 342 |
+
"status": "ok",
|
| 343 |
+
"tags": ["dsage", "anti_ising", "core"],
|
| 344 |
+
"ui_badge": "anti_ising"
|
| 345 |
+
},
|
| 346 |
+
{
|
| 347 |
+
"name": "nu_beta_id",
|
| 348 |
+
"kind": "theorem",
|
| 349 |
+
"file": "Taf/Identities.lean",
|
| 350 |
+
"line": 197,
|
| 351 |
+
"claim": "ν · β = −1 in Phase A (variant of D-SAGE-2)",
|
| 352 |
+
"preconditions": ["γ ≠ 1"],
|
| 353 |
+
"tactic": "field_simp; ring",
|
| 354 |
+
"status": "ok",
|
| 355 |
+
"tags": ["dsage", "anti_ising"]
|
| 356 |
+
}
|
| 357 |
+
]
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"id": "audit_findings",
|
| 361 |
+
"title": "Paper-1 audit findings (refutations + erratums)",
|
| 362 |
+
"theorems": [
|
| 363 |
+
{
|
| 364 |
+
"name": "eta_2gamma_residual",
|
| 365 |
+
"kind": "theorem",
|
| 366 |
+
"file": "Taf/Identities.lean",
|
| 367 |
+
"line": 148,
|
| 368 |
+
"claim": "Paper 1 claim η = 2γ has residual (−4γ³ + 5γ + 1)/(1−γ) — NOT identically zero",
|
| 369 |
+
"preconditions": ["γ ≠ 1"],
|
| 370 |
+
"tactic": "field_simp; ring",
|
| 371 |
+
"status": "ok",
|
| 372 |
+
"tags": ["audit_finding", "refutation"]
|
| 373 |
+
},
|
| 374 |
+
{
|
| 375 |
+
"name": "eta_2gamma_fails_phase_A",
|
| 376 |
+
"kind": "theorem",
|
| 377 |
+
"file": "Taf/Identities.lean",
|
| 378 |
+
"line": 156,
|
| 379 |
+
"claim": "η = 2γ fails throughout Phase A (residual > 0 ∀γ ∈ (0,1)) — paper 1 claim formally refuted",
|
| 380 |
+
"preconditions": ["0 < γ", "γ < 1"],
|
| 381 |
+
"tactic": "nlinarith with Phase A bounds",
|
| 382 |
+
"status": "ok",
|
| 383 |
+
"tags": ["audit_finding", "refutation", "substantive"]
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"name": "AM_GM_gamma_chi",
|
| 387 |
+
"kind": "theorem",
|
| 388 |
+
"file": "Taf/AmGmPade.lean",
|
| 389 |
+
"line": 45,
|
| 390 |
+
"claim": "γ_χ = 1/(1−γ) + 2(1−γ) ≥ 2√2 with minimum at γ = 1 − 1/√2 ≈ 0.293",
|
| 391 |
+
"preconditions": ["0 < γ", "γ < 1"],
|
| 392 |
+
"tactic": "AM-GM on positive reals",
|
| 393 |
+
"status": "ok",
|
| 394 |
+
"tags": ["audit_finding", "amgm"]
|
| 395 |
+
}
|
| 396 |
+
]
|
| 397 |
+
},
|
| 398 |
+
{
|
| 399 |
+
"id": "erratum_cv",
|
| 400 |
+
"title": "C_V coefficient erratum (paper §5.2 — 1/4 → 1/12)",
|
| 401 |
+
"theorems": [
|
| 402 |
+
{
|
| 403 |
+
"name": "log_one_plus_x_coefficient_24",
|
| 404 |
+
"kind": "theorem",
|
| 405 |
+
"file": "Taf/ErratumCV.lean",
|
| 406 |
+
"line": 55,
|
| 407 |
+
"claim": "log(1+x) Taylor coefficient at x²/2: 1/24 in cumulant expansion",
|
| 408 |
+
"tactic": "norm_num",
|
| 409 |
+
"status": "ok",
|
| 410 |
+
"tags": ["erratum"]
|
| 411 |
+
},
|
| 412 |
+
{
|
| 413 |
+
"name": "cv_corrected_at_hagedorn",
|
| 414 |
+
"kind": "theorem",
|
| 415 |
+
"file": "Taf/ErratumCV.lean",
|
| 416 |
+
"line": 93,
|
| 417 |
+
"claim": "C_V at Hagedorn limit = (log L)²/12 (CORRECTED — paper §5.2 had 1/4)",
|
| 418 |
+
"tactic": "field_simp; ring after cumulant identity",
|
| 419 |
+
"status": "ok",
|
| 420 |
+
"tags": ["erratum", "core"]
|
| 421 |
+
},
|
| 422 |
+
{
|
| 423 |
+
"name": "original_is_three_times_corrected",
|
| 424 |
+
"kind": "theorem",
|
| 425 |
+
"file": "Taf/ErratumCV.lean",
|
| 426 |
+
"line": 103,
|
| 427 |
+
"claim": "Paper's original (log L)²/4 = 3 × corrected (log L)²/12 (factor-3 quantification)",
|
| 428 |
+
"tactic": "ring",
|
| 429 |
+
"status": "ok",
|
| 430 |
+
"tags": ["erratum"]
|
| 431 |
+
},
|
| 432 |
+
{
|
| 433 |
+
"name": "original_ne_corrected",
|
| 434 |
+
"kind": "theorem",
|
| 435 |
+
"file": "Taf/ErratumCV.lean",
|
| 436 |
+
"line": 107,
|
| 437 |
+
"claim": "Original ≠ corrected for L ≠ 0 (formal statement of disagreement)",
|
| 438 |
+
"preconditions": ["L ≠ 0"],
|
| 439 |
+
"tactic": "linarith after factor-3 expansion",
|
| 440 |
+
"status": "ok",
|
| 441 |
+
"tags": ["erratum"]
|
| 442 |
+
},
|
| 443 |
+
{
|
| 444 |
+
"name": "cv_hagedorn_correct_coefficient",
|
| 445 |
+
"kind": "theorem",
|
| 446 |
+
"file": "Taf/CvHagedornCorrection.lean",
|
| 447 |
+
"line": 51,
|
| 448 |
+
"claim": "∫(log x)²/x dx from 1 to N = (log N)³ / 3 ⟹ C_V coefficient 1/12 (not 1/4)",
|
| 449 |
+
"preconditions": ["1 ≤ N"],
|
| 450 |
+
"tactic": "integral derivation via log_sq_half + integral_log_div_x",
|
| 451 |
+
"status": "ok",
|
| 452 |
+
"tags": ["erratum", "integral"]
|
| 453 |
+
}
|
| 454 |
+
]
|
| 455 |
+
},
|
| 456 |
+
{
|
| 457 |
+
"id": "misc",
|
| 458 |
+
"title": "Misc identities + dimensional checks",
|
| 459 |
+
"theorems": [
|
| 460 |
+
{
|
| 461 |
+
"name": "rope_beta_form",
|
| 462 |
+
"kind": "theorem",
|
| 463 |
+
"file": "Taf/RGFlow.lean",
|
| 464 |
+
"line": 189,
|
| 465 |
+
"claim": "RoPE β-form: √3/6 = 1/√12",
|
| 466 |
+
"tactic": "field_simp; nlinarith with √12 = 2√3",
|
| 467 |
+
"status": "ok",
|
| 468 |
+
"tags": ["misc"],
|
| 469 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "line": 411 }
|
| 470 |
+
},
|
| 471 |
+
{
|
| 472 |
+
"name": "cft_nu_identity",
|
| 473 |
+
"kind": "theorem",
|
| 474 |
+
"file": "Taf/RGFlow.lean",
|
| 475 |
+
"line": 220,
|
| 476 |
+
"claim": "ν · (1 − γ) = 1 for ν = 1/(1−γ)",
|
| 477 |
+
"preconditions": ["1 − γ ≠ 0"],
|
| 478 |
+
"tactic": "field_simp",
|
| 479 |
+
"status": "ok",
|
| 480 |
+
"tags": ["misc", "cft"],
|
| 481 |
+
"source": { "doc": "FORMULAS_TOOLKIT.md", "section": "§15", "line": 265 }
|
| 482 |
+
},
|
| 483 |
+
{
|
| 484 |
+
"name": "D_14_nu_imprint",
|
| 485 |
+
"kind": "theorem",
|
| 486 |
+
"file": "Taf/Identities.lean",
|
| 487 |
+
"line": 176,
|
| 488 |
+
"claim": "ν_imprint × 2π = −1 (RoPE rotation period × imprint slope dimensional check)",
|
| 489 |
+
"preconditions": ["π > 0"],
|
| 490 |
+
"tactic": "ring",
|
| 491 |
+
"status": "ok",
|
| 492 |
+
"tags": ["imprint", "misc"]
|
| 493 |
+
}
|
| 494 |
+
]
|
| 495 |
+
}
|
| 496 |
+
],
|
| 497 |
+
"ui_bindings": {
|
| 498 |
+
"anti_ising_pill": "beta_chi_closure",
|
| 499 |
+
"gamma_pade_panel": "pade_z_substitution",
|
| 500 |
+
"theta_eff_panel": "theta_eff_pade",
|
| 501 |
+
"cardy_delta_h": null,
|
| 502 |
+
"algebraic_consistency_check": ["D_SAGE_1", "D_SAGE_2", "D_SAGE_4", "D_SAGE_5", "rushbrooke_tautology", "josephson_tautology", "beta_chi_closure", "nu_beta_id"],
|
| 503 |
+
"audit_findings_section": ["V_derivative_ne_RG_beta", "eta_2gamma_fails_phase_A", "cv_corrected_at_hagedorn", "trajectory_sign_inversion"],
|
| 504 |
+
"padé_saturation_diagnose": "pade_saturation_leading_coefficient"
|
| 505 |
+
}
|
| 506 |
+
}
|
|
@@ -162,6 +162,31 @@
|
|
| 162 |
|
| 163 |
<p><strong data-i18n="v05.repro.label">Reproducibility</strong> — <span data-i18n="v05.repro.desc">All 15 theorems machine-proof in Lean Mathlib4 (1973 jobs build success). Sage script: <code>analysis/sage_recursive_sweep_2026-04-30.sage</code>. Lean code: <code>lean_taf/taf/Taf/Identities.lean</code>.</span></p>
|
| 164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
<h3 data-i18n="help.add_models.title">Adding new models (3 ways)</h3>
|
| 166 |
<ul>
|
| 167 |
<li data-i18n="help.add_models.preset"><strong>Preset list</strong>: 11 popular models curated. Just select from dropdown.</li>
|
|
@@ -292,27 +317,27 @@
|
|
| 292 |
<input type="number" id="profile-T_eval" value="32000" />
|
| 293 |
</div>
|
| 294 |
<div class="form-field">
|
| 295 |
-
<label data-i18n="param.n_attn">n_attention_heads</label>
|
| 296 |
<input type="number" id="profile-n_attn" value="32" />
|
| 297 |
</div>
|
| 298 |
<div class="form-field">
|
| 299 |
-
<label data-i18n="param.n_kv">n_kv_heads</label>
|
| 300 |
<input type="number" id="profile-n_kv" value="8" />
|
| 301 |
</div>
|
| 302 |
<div class="form-field">
|
| 303 |
-
<label data-i18n="param.d_head">head_dim</label>
|
| 304 |
<input type="number" id="profile-d_head" value="128" />
|
| 305 |
</div>
|
| 306 |
<div class="form-field">
|
| 307 |
-
<label data-i18n="param.n_layers">n_layers</label>
|
| 308 |
<input type="number" id="profile-n_layers" value="32" />
|
| 309 |
</div>
|
| 310 |
<div class="form-field">
|
| 311 |
-
<label data-i18n="param.n_params">n_params (e.g. 8e9)</label>
|
| 312 |
<input type="text" id="profile-n_params" value="8e9" />
|
| 313 |
</div>
|
| 314 |
<div class="form-field">
|
| 315 |
-
<label data-i18n="param.has_swa">Has SWA?</label>
|
| 316 |
<select id="profile-has_swa">
|
| 317 |
<option value="false" selected data-i18n="common.no">No</option>
|
| 318 |
<option value="true" data-i18n="common.yes">Yes</option>
|
|
|
|
| 162 |
|
| 163 |
<p><strong data-i18n="v05.repro.label">Reproducibility</strong> — <span data-i18n="v05.repro.desc">All 15 theorems machine-proof in Lean Mathlib4 (1973 jobs build success). Sage script: <code>analysis/sage_recursive_sweep_2026-04-30.sage</code>. Lean code: <code>lean_taf/taf/Taf/Identities.lean</code>.</span></p>
|
| 164 |
|
| 165 |
+
<h3 style="margin-top: 1.5em;" data-i18n="help.v06.title">🆕 v0.6 — γ predicted-vs-observed + Cardy ΔH + Lean badges</h3>
|
| 166 |
+
<p style="opacity: 0.85;" data-i18n="help.v06.intro"><em>v0.6 (2026-05-06): three new diagnostics live in the TAF Card under <strong>🔬 Diagnostics</strong>. All run in your browser; γ_observed comes from the Diagnose CLI on real weights.</em></p>
|
| 167 |
+
|
| 168 |
+
<p><strong data-i18n="help.v06.layout.title">TAF Card layout (new in v0.6)</strong></p>
|
| 169 |
+
<p data-i18n="help.v06.layout.body">After clicking <strong>🚀 Generate full profile</strong> the card shows: a <strong>hero strip</strong> on top (architecture class + meta + 3 pills: aggregate verdict ✅/⚠/❌, γ headline, 🧲 Anti-Ising if Phase A) and four <strong>expandable sections</strong>: <strong>📋 Recipes</strong> (open by default — verdict per dimension), <strong>🔬 Diagnostics</strong> (key numbers, γ predicted vs observed, what-if explorer), <strong>✓ Verification</strong> (Sage+Lean algebraic consistency, falsification F1-F23), <strong>📂 Provenance & share</strong> (calibration audit + JSON download / share link / registry submit). Click any header to expand. Every variable has an inline <strong>ⓘ</strong> tooltip.</p>
|
| 170 |
+
|
| 171 |
+
<p><strong data-i18n="help.v06.gamma_check.title">γ predicted vs observed</strong></p>
|
| 172 |
+
<p data-i18n="help.v06.gamma_check.body">Enter the empirically-measured γ from your model and the tool computes <strong>η = θ_eff_obs / θ_eff_Padé</strong> and classifies into one of 5 regimes:</p>
|
| 173 |
+
<ul style="font-size: 0.92em;">
|
| 174 |
+
<li data-i18n="help.v06.case.normal"><strong>Normal</strong> (η ∈ [0.85, 1.15]) — model uses its full nominal context. <em>Use case</em>: validate a new release before adopting it.</li>
|
| 175 |
+
<li data-i18n="help.v06.case.fraud"><strong>Fraud</strong> (η < 0.01) — nominal θ inflated; model behaves as if θ ≪ advertised. <em>Use case</em>: detect YaRN/marketing inflation (CodeLlama / Mistral-Nemo pattern).</li>
|
| 176 |
+
<li data-i18n="help.v06.case.compressed"><strong>Compressed</strong> (η < 0.5) — context compressed; model attends shorter than nominal θ. <em>Use case</em>: spot RLHF/instruction-tuning compression (LLaMA-2 pattern).</li>
|
| 177 |
+
<li data-i18n="help.v06.case.overpade"><strong>Over-Padé</strong> (η > 1.5) — model attends farther than Padé predicts. <em>Use case</em>: identify Lerch-corrected regime or undertrained early checkpoints (pythia-1b pattern).</li>
|
| 178 |
+
<li data-i18n="help.v06.case.swa"><strong>SWA random-corpus</strong> (γ_obs > 1.05 with random_corpus=Yes) — sliding-window attention signature. <em>Use case</em>: confirm Mistral / Gemma SWA on random tokens.</li>
|
| 179 |
+
</ul>
|
| 180 |
+
|
| 181 |
+
<p><strong data-i18n="help.v06.cardy.title">Cardy ΔH diagnostic</strong></p>
|
| 182 |
+
<p data-i18n="help.v06.cardy.body"><strong>ΔH_Cardy = log(θ_eff_obs / θ_nominal)</strong>. Entropy shift between observed effective θ and nominal θ. Strong negative = compression entropy; near zero = nominal match. Complements η for borderline cases.</p>
|
| 183 |
+
|
| 184 |
+
<p><strong data-i18n="help.v06.lean.title">Lean + Mathlib verification badges</strong></p>
|
| 185 |
+
<p data-i18n="help.v06.lean.body">TAF identities (Anti-Ising, D-SAGE-1 quadratic, Padé z-substitution, etc.) are formally machine-proven in Lean Mathlib4. Source: <a href="https://github.com/karlesmarin/lean-taf" target="_blank">github.com/karlesmarin/lean-taf</a>. Anyone can clone + <code>lake build</code> to re-verify. The 🧲 Anti-Ising pill in the hero strip is one such badge.</p>
|
| 186 |
+
|
| 187 |
+
<p><strong data-i18n="help.v06.glossary.title">Variable glossary (also embedded in TAF Card)</strong></p>
|
| 188 |
+
<p data-i18n="help.v06.glossary.body">Every variable in the TAF Card has an inline ⓘ tooltip. The complete list: γ, γ_Padé, γ_decomposed, γ_observed, θ, θ_eff_obs, θ_eff_Padé, η, ΔH_Cardy, χ, d_horizon, L_NIAH, KV memory, regime. Hover any ⓘ for the definition + paper section.</p>
|
| 189 |
+
|
| 190 |
<h3 data-i18n="help.add_models.title">Adding new models (3 ways)</h3>
|
| 191 |
<ul>
|
| 192 |
<li data-i18n="help.add_models.preset"><strong>Preset list</strong>: 11 popular models curated. Just select from dropdown.</li>
|
|
|
|
| 317 |
<input type="number" id="profile-T_eval" value="32000" />
|
| 318 |
</div>
|
| 319 |
<div class="form-field">
|
| 320 |
+
<label><span data-i18n="param.n_attn">n_attention_heads</span> <span class="info"><span class="tooltip" data-i18n="param.n_attn.tip">Number of attention heads per layer. From <code>num_attention_heads</code>.</span></span></label>
|
| 321 |
<input type="number" id="profile-n_attn" value="32" />
|
| 322 |
</div>
|
| 323 |
<div class="form-field">
|
| 324 |
+
<label><span data-i18n="param.n_kv">n_kv_heads</span> <span class="info"><span class="tooltip" data-i18n="param.n_kv.tip">KV heads. If < n_attention_heads → GQA (Grouped Query Attention). Reduces KV memory but pushes γ toward Hagedorn.</span></span></label>
|
| 325 |
<input type="number" id="profile-n_kv" value="8" />
|
| 326 |
</div>
|
| 327 |
<div class="form-field">
|
| 328 |
+
<label><span data-i18n="param.d_head">head_dim</span> <span class="info"><span class="tooltip" data-i18n="param.d_head.tip">Per-head dimension. Typical 64, 96, 128. From <code>head_dim</code> or <code>hidden_size / num_attention_heads</code>.</span></span></label>
|
| 329 |
<input type="number" id="profile-d_head" value="128" />
|
| 330 |
</div>
|
| 331 |
<div class="form-field">
|
| 332 |
+
<label><span data-i18n="param.n_layers">n_layers</span> <span class="info"><span class="tooltip" data-i18n="param.n_layers.tip">Number of transformer blocks. From <code>num_hidden_layers</code>.</span></span></label>
|
| 333 |
<input type="number" id="profile-n_layers" value="32" />
|
| 334 |
</div>
|
| 335 |
<div class="form-field">
|
| 336 |
+
<label><span data-i18n="param.n_params">n_params (e.g. 8e9)</span> <span class="info"><span class="tooltip" data-i18n="param.n_params.tip">Total parameter count. Threshold ~400M for induction-head emergence. Affects KV memory and budget recipes.</span></span></label>
|
| 337 |
<input type="text" id="profile-n_params" value="8e9" />
|
| 338 |
</div>
|
| 339 |
<div class="form-field">
|
| 340 |
+
<label><span data-i18n="param.has_swa">Has SWA?</span> <span class="info"><span class="tooltip" data-i18n="param.has_swa.tip">Sliding Window Attention. <code>true</code> for Mistral, gemma-2, phi-3. Calibration audit (v0.5.3) disabled the historical δ_SWA correction (n=1 fit).</span></span></label>
|
| 341 |
<select id="profile-has_swa">
|
| 342 |
<option value="false" selected data-i18n="common.no">No</option>
|
| 343 |
<option value="true" data-i18n="common.yes">Yes</option>
|
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// γ predicted-vs-observed diagnostic — Padé closed-form + regime classifier.
|
| 2 |
+
// Pure functions ported from tools/taf/diagnose/gamma_check.py.
|
| 3 |
+
// All math is browser-only (no backend, no Python).
|
| 4 |
+
|
| 5 |
+
const SQRT2 = Math.SQRT2;
|
| 6 |
+
|
| 7 |
+
export function gammaPade(theta, T) {
|
| 8 |
+
if (!Number.isFinite(theta) || theta <= 0 || !Number.isFinite(T) || T < 0) return NaN;
|
| 9 |
+
const z = (T * SQRT2) / theta;
|
| 10 |
+
return (2 - z) / (2 + z);
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
export function thetaEffPade(theta, T) {
|
| 14 |
+
if (!Number.isFinite(theta) || !Number.isFinite(T)) return NaN;
|
| 15 |
+
return theta + T / SQRT2;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
export function thetaEffObserved(gObs, T) {
|
| 19 |
+
if (!Number.isFinite(gObs) || !Number.isFinite(T) || T < 0) return NaN;
|
| 20 |
+
if (Math.abs(1 - gObs) < 1e-12) return Infinity;
|
| 21 |
+
return (T * SQRT2) / (1 - gObs);
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
export function efficiency(thEffObs, thEffPade) {
|
| 25 |
+
if (!Number.isFinite(thEffObs) || !Number.isFinite(thEffPade) || thEffPade === 0) return NaN;
|
| 26 |
+
return thEffObs / thEffPade;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
export function deltaHCardy(thEffObs, thetaNominal) {
|
| 30 |
+
if (!Number.isFinite(thEffObs) || thEffObs <= 0) return NaN;
|
| 31 |
+
if (!Number.isFinite(thetaNominal) || thetaNominal <= 0) return NaN;
|
| 32 |
+
return Math.log(thEffObs / thetaNominal);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
export function classifyRegime(eff, gObs, isRandom) {
|
| 36 |
+
if (!Number.isFinite(gObs)) return "unknown";
|
| 37 |
+
if (gObs > 1.05) return isRandom ? "swa" : "unknown";
|
| 38 |
+
if (!Number.isFinite(eff)) return "unknown";
|
| 39 |
+
if (eff < 0.01) return "fraud";
|
| 40 |
+
if (eff < 0.50) return "compressed";
|
| 41 |
+
if (eff > 1.50) return "overpade";
|
| 42 |
+
if (eff >= 0.85 && eff <= 1.15) return "normal";
|
| 43 |
+
return "unknown";
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
export function gammaCheckAll({ theta, T, gObs, isRandom }) {
|
| 47 |
+
const gPade = gammaPade(theta, T);
|
| 48 |
+
const thEffPade = thetaEffPade(theta, T);
|
| 49 |
+
const thEffObs = thetaEffObserved(gObs, T);
|
| 50 |
+
const eff = efficiency(thEffObs, thEffPade);
|
| 51 |
+
const dH = deltaHCardy(thEffObs, theta);
|
| 52 |
+
const regime = classifyRegime(eff, gObs, !!isRandom);
|
| 53 |
+
return {
|
| 54 |
+
gammaPade: gPade,
|
| 55 |
+
thetaEffPade: thEffPade,
|
| 56 |
+
thetaEffObs: thEffObs,
|
| 57 |
+
efficiency: eff,
|
| 58 |
+
deltaHCardy: dH,
|
| 59 |
+
regime,
|
| 60 |
+
};
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
export const REGIME_META = {
|
| 64 |
+
normal: { emoji: "✅", cls: "v-yes" },
|
| 65 |
+
fraud: { emoji: "🚨", cls: "v-no" },
|
| 66 |
+
compressed: { emoji: "📉", cls: "v-deg" },
|
| 67 |
+
overpade: { emoji: "📈", cls: "v-deg" },
|
| 68 |
+
swa: { emoji: "🪟", cls: "v-deg" },
|
| 69 |
+
unknown: { emoji: "❓", cls: "v-deg" },
|
| 70 |
+
};
|
|
@@ -121,9 +121,18 @@ export const TRANSLATIONS = {
|
|
| 121 |
"falsification.col.evidence": "Evidence",
|
| 122 |
|
| 123 |
"tafcard.title": "📇 TAF Card — full model profile",
|
| 124 |
-
"tafcard.recipes_title": "📋 Recipes
|
|
|
|
| 125 |
"tafcard.numbers_title": "🔢 Key numbers (paper §26)",
|
| 126 |
-
"tafcard.fals_title": "🔬 Falsification status (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
|
| 128 |
"compare.title_out": "🆚 Comparison Table",
|
| 129 |
|
|
@@ -147,12 +156,18 @@ export const TRANSLATIONS = {
|
|
| 147 |
"param.T_train.tip": "<strong>Max training context</strong>. From <code>max_position_embeddings</code>. Beyond this is extrapolation.",
|
| 148 |
"param.T_eval": "T_eval (your target)",
|
| 149 |
"param.T_eval.tip": "<strong>Your target inference context</strong>. The whole question is: will the model behave well at THIS length?",
|
| 150 |
-
"param.n_attn": "
|
| 151 |
-
"param.
|
|
|
|
|
|
|
| 152 |
"param.d_head": "head_dim",
|
| 153 |
-
"param.
|
|
|
|
|
|
|
| 154 |
"param.n_params": "n_params (e.g. 8e9)",
|
|
|
|
| 155 |
"param.has_swa": "Has SWA?",
|
|
|
|
| 156 |
"common.yes": "Yes",
|
| 157 |
"common.no": "No",
|
| 158 |
|
|
@@ -272,6 +287,92 @@ export const TRANSLATIONS = {
|
|
| 272 |
"v053.calibration.title": "🔬 v0.5.3 — Calibration audit (2026-05-02)",
|
| 273 |
"v053.calibration.note": "<strong>SWA correction disabled</strong> — original δ_SWA = -0.21 was fit on n=1 model (insufficient data; group-mean +0.355 with single yes-case). <strong>post_IH correction marked exploratory</strong> — group-mean ≈ 0 in re-audit (n=22 panel) does not replicate the OLS fit. <strong>GQA correction replicates</strong> (panel +0.115 vs hardcoded +0.11). <strong>D_f formula corrected for Phase B (γ>1)</strong> — uses discrete cumulative sum instead of continuum approximation. LLaMA-3, Mistral, Gemma now report correct compression values.",
|
| 274 |
"v053.release.banner": "🔧 v0.5.3 — Audit-driven fixes: KV compression D_f now uses discrete sum (correct for all γ); δ_SWA disabled (n=1 calibration); paper §5.2 C_V coefficient erratum (1/4 → 1/12).",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 275 |
},
|
| 276 |
|
| 277 |
// ────────────────────────────────────────────────────────────────────────
|
|
@@ -328,6 +429,92 @@ export const TRANSLATIONS = {
|
|
| 328 |
"v053.calibration.note": "<strong>Corrección SWA desactivada</strong> — δ_SWA = -0.21 original se ajustó con n=1 modelo (datos insuficientes; promedio del único caso +0.355). <strong>Corrección post_IH marcada exploratoria</strong> — promedio de grupo ≈ 0 en re-auditoría (panel n=22) no replica el ajuste OLS. <strong>Corrección GQA replica</strong> (panel +0.115 vs hardcoded +0.11). <strong>Fórmula D_f corregida para Fase B (γ>1)</strong> — usa suma cumulativa discreta en lugar de aproximación continua. LLaMA-3, Mistral, Gemma ahora reportan valores correctos de compresión.",
|
| 329 |
"v053.release.banner": "🔧 v0.5.3 — Correcciones por audit: D_f de compresión KV ahora usa suma discreta (correcto para todo γ); δ_SWA desactivado (calibración n=1); erratum coeficiente C_V paper §5.2 (1/4 → 1/12).",
|
| 330 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 331 |
"hero.title": "🔬 TAF Agent",
|
| 332 |
"hero.tagline": "Prueba <strong>CUALQUIER</strong> LLM transformer antes de gastar GPU/€.",
|
| 333 |
"hero.subtitle": "Todo el cómputo corre localmente en tu navegador. Gratis. Sin límites. Auditable.",
|
|
@@ -438,9 +625,18 @@ export const TRANSLATIONS = {
|
|
| 438 |
"falsification.col.evidence": "Evidencia",
|
| 439 |
|
| 440 |
"tafcard.title": "📇 TAF Card — perfil completo del modelo",
|
| 441 |
-
"tafcard.recipes_title": "📋 Recetas
|
|
|
|
| 442 |
"tafcard.numbers_title": "🔢 Números clave (paper §26)",
|
| 443 |
-
"tafcard.fals_title": "🔬 Estado de falsificación (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 444 |
|
| 445 |
"compare.title_out": "🆚 Tabla comparativa",
|
| 446 |
|
|
@@ -464,12 +660,18 @@ export const TRANSLATIONS = {
|
|
| 464 |
"param.T_train.tip": "<strong>Contexto máximo de entrenamiento</strong>. De <code>max_position_embeddings</code>. Más allá es extrapolación.",
|
| 465 |
"param.T_eval": "T_eval (tu objetivo)",
|
| 466 |
"param.T_eval.tip": "<strong>Tu contexto de inferencia objetivo</strong>. La pregunta clave: ¿se comportará bien el modelo a ESTA longitud?",
|
| 467 |
-
"param.n_attn": "
|
| 468 |
-
"param.
|
|
|
|
|
|
|
| 469 |
"param.d_head": "head_dim",
|
| 470 |
-
"param.
|
|
|
|
|
|
|
| 471 |
"param.n_params": "n_params (ej. 8e9)",
|
|
|
|
| 472 |
"param.has_swa": "¿Tiene SWA?",
|
|
|
|
| 473 |
"common.yes": "Sí",
|
| 474 |
"common.no": "No",
|
| 475 |
|
|
@@ -595,6 +797,92 @@ export const TRANSLATIONS = {
|
|
| 595 |
"v053.calibration.note": "<strong>Correction SWA désactivée</strong> — δ_SWA = -0.21 d'origine était calibrée sur n=1 modèle (données insuffisantes ; moyenne du cas unique +0.355). <strong>Correction post_IH marquée exploratoire</strong> — moyenne de groupe ≈ 0 en ré-audit (panel n=22) ne réplique pas l'ajustement OLS. <strong>Correction GQA réplique</strong> (panel +0.115 vs hardcoded +0.11). <strong>Formule D_f corrigée pour Phase B (γ>1)</strong> — utilise une somme cumulative discrète au lieu d'une approximation continue. LLaMA-3, Mistral, Gemma rapportent maintenant des valeurs de compression correctes.",
|
| 596 |
"v053.release.banner": "🔧 v0.5.3 — Corrections issues d'audit : D_f de compression KV utilise maintenant la somme discrète (correct pour tout γ) ; δ_SWA désactivé (calibrage n=1) ; erratum du coefficient C_V paper §5.2 (1/4 → 1/12).",
|
| 597 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 598 |
"hero.title": "🔬 TAF Agent",
|
| 599 |
"hero.tagline": "Testez <strong>N'IMPORTE QUEL</strong> LLM transformer avant de dépenser du GPU/€.",
|
| 600 |
"hero.subtitle": "Tout le calcul s'exécute localement dans votre navigateur. Gratuit. Illimité. Auditable.",
|
|
@@ -705,9 +993,18 @@ export const TRANSLATIONS = {
|
|
| 705 |
"falsification.col.evidence": "Preuve",
|
| 706 |
|
| 707 |
"tafcard.title": "📇 TAF Card — profil complet du modèle",
|
| 708 |
-
"tafcard.recipes_title": "📋 Recettes
|
|
|
|
| 709 |
"tafcard.numbers_title": "🔢 Nombres clés (paper §26)",
|
| 710 |
-
"tafcard.fals_title": "🔬 État de falsification (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 711 |
|
| 712 |
"compare.title_out": "🆚 Tableau comparatif",
|
| 713 |
|
|
@@ -731,12 +1028,18 @@ export const TRANSLATIONS = {
|
|
| 731 |
"param.T_train.tip": "<strong>Contexte max d'entraînement</strong>. De <code>max_position_embeddings</code>. Au-delà c'est de l'extrapolation.",
|
| 732 |
"param.T_eval": "T_eval (votre cible)",
|
| 733 |
"param.T_eval.tip": "<strong>Votre contexte d'inférence cible</strong>. La question clé : le modèle se comportera-t-il bien à CETTE longueur ?",
|
| 734 |
-
"param.n_attn": "
|
| 735 |
-
"param.
|
|
|
|
|
|
|
| 736 |
"param.d_head": "head_dim",
|
| 737 |
-
"param.
|
|
|
|
|
|
|
| 738 |
"param.n_params": "n_params (ex. 8e9)",
|
|
|
|
| 739 |
"param.has_swa": "A SWA ?",
|
|
|
|
| 740 |
"common.yes": "Oui",
|
| 741 |
"common.no": "Non",
|
| 742 |
|
|
@@ -862,6 +1165,92 @@ export const TRANSLATIONS = {
|
|
| 862 |
"v053.calibration.note": "<strong>SWA 修正已禁用</strong> — 原 δ_SWA = -0.21 基于 n=1 模型拟合(数据不足;唯一案例的均值为 +0.355)。<strong>post_IH 修正标记为探索性</strong> — 重审中组均值 ≈ 0(n=22 面板)未能复现 OLS 拟合。<strong>GQA 修正可复现</strong>(面板 +0.115 vs 硬编码 +0.11)。<strong>D_f 公式修正 Phase B (γ>1)</strong> — 使用离散累积和代替连续近似。LLaMA-3、Mistral、Gemma 现在报告正确的压缩值。",
|
| 863 |
"v053.release.banner": "🔧 v0.5.3 — 审计驱动的修复:KV 压缩 D_f 现使用离散和(适用于所有 γ);δ_SWA 禁用(n=1 校准);论文 §5.2 C_V 系数勘误 (1/4 → 1/12)。",
|
| 864 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 865 |
"hero.title": "🔬 TAF Agent",
|
| 866 |
"hero.tagline": "在花费 GPU/$ 之前,测试<strong>任意</strong> Transformer LLM。",
|
| 867 |
"hero.subtitle": "所有计算在您的浏览器本地运行。免费。无限制。可审计。",
|
|
@@ -972,9 +1361,18 @@ export const TRANSLATIONS = {
|
|
| 972 |
"falsification.col.evidence": "证据",
|
| 973 |
|
| 974 |
"tafcard.title": "📇 TAF 卡 — 完整模型画像",
|
| 975 |
-
"tafcard.recipes_title": "📋 配方
|
|
|
|
| 976 |
"tafcard.numbers_title": "🔢 关键数字 (paper §26)",
|
| 977 |
-
"tafcard.fals_title": "🔬 可证伪状态 (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 978 |
|
| 979 |
"compare.title_out": "🆚 比较表",
|
| 980 |
|
|
@@ -998,12 +1396,18 @@ export const TRANSLATIONS = {
|
|
| 998 |
"param.T_train.tip": "<strong>训练最大上下文</strong>。来自 <code>max_position_embeddings</code>。超出此范围属于外推。",
|
| 999 |
"param.T_eval": "T_eval (您的目标)",
|
| 1000 |
"param.T_eval.tip": "<strong>您的目标推理上下文</strong>。关键问题: 模型在 <em>这个</em> 长度下表现是否良好?",
|
| 1001 |
-
"param.n_attn": "
|
| 1002 |
-
"param.
|
|
|
|
|
|
|
| 1003 |
"param.d_head": "head_dim",
|
| 1004 |
-
"param.
|
|
|
|
|
|
|
| 1005 |
"param.n_params": "n_params (例如 8e9)",
|
|
|
|
| 1006 |
"param.has_swa": "有 SWA 吗?",
|
|
|
|
| 1007 |
"common.yes": "是",
|
| 1008 |
"common.no": "否",
|
| 1009 |
|
|
|
|
| 121 |
"falsification.col.evidence": "Evidence",
|
| 122 |
|
| 123 |
"tafcard.title": "📇 TAF Card — full model profile",
|
| 124 |
+
"tafcard.recipes_title": "📋 Recipes — verdict per dimension",
|
| 125 |
+
"tafcard.recipes_count_label": "dimensions",
|
| 126 |
"tafcard.numbers_title": "🔢 Key numbers (paper §26)",
|
| 127 |
+
"tafcard.fals_title": "🔬 Falsification status (F1-F23)",
|
| 128 |
+
"tafcard.fals_none": "No falsifications applicable.",
|
| 129 |
+
"tafcard.diag_title": "🔬 Diagnostics — numbers · γ check · what-if",
|
| 130 |
+
"tafcard.verify_title": "✓ Verification — Lean + Sage + falsification",
|
| 131 |
+
"tafcard.share_title": "📂 Provenance & share",
|
| 132 |
+
"tafcard.whatif_title": "🎚️ What-if explorer",
|
| 133 |
+
"verdict.go": "GO",
|
| 134 |
+
"verdict.no": "NO",
|
| 135 |
+
"verdict.degraded": "DEGRADED",
|
| 136 |
|
| 137 |
"compare.title_out": "🆚 Comparison Table",
|
| 138 |
|
|
|
|
| 156 |
"param.T_train.tip": "<strong>Max training context</strong>. From <code>max_position_embeddings</code>. Beyond this is extrapolation.",
|
| 157 |
"param.T_eval": "T_eval (your target)",
|
| 158 |
"param.T_eval.tip": "<strong>Your target inference context</strong>. The whole question is: will the model behave well at THIS length?",
|
| 159 |
+
"param.n_attn": "n_attention_heads",
|
| 160 |
+
"param.n_attn.tip": "<strong>Number of attention heads</strong> per layer. From <code>num_attention_heads</code>.",
|
| 161 |
+
"param.n_kv": "n_kv_heads",
|
| 162 |
+
"param.n_kv.tip": "<strong>KV heads</strong>. If < n_attention_heads → GQA (Grouped Query Attention). Reduces KV memory but pushes γ toward Hagedorn.",
|
| 163 |
"param.d_head": "head_dim",
|
| 164 |
+
"param.d_head.tip": "<strong>Per-head dimension</strong>. Typical 64, 96, 128. From <code>head_dim</code> or <code>hidden_size / num_attention_heads</code>.",
|
| 165 |
+
"param.n_layers": "n_layers",
|
| 166 |
+
"param.n_layers.tip": "<strong>Number of transformer blocks</strong>. From <code>num_hidden_layers</code>.",
|
| 167 |
"param.n_params": "n_params (e.g. 8e9)",
|
| 168 |
+
"param.n_params.tip": "<strong>Total parameter count</strong>. Threshold ~400M for induction-head emergence. Affects KV memory and budget recipes.",
|
| 169 |
"param.has_swa": "Has SWA?",
|
| 170 |
+
"param.has_swa.tip": "<strong>Sliding Window Attention</strong>. <code>true</code> for Mistral, gemma-2, phi-3. v0.5.3 calibration audit disabled the historical δ_SWA correction (n=1 fit).",
|
| 171 |
"common.yes": "Yes",
|
| 172 |
"common.no": "No",
|
| 173 |
|
|
|
|
| 287 |
"v053.calibration.title": "🔬 v0.5.3 — Calibration audit (2026-05-02)",
|
| 288 |
"v053.calibration.note": "<strong>SWA correction disabled</strong> — original δ_SWA = -0.21 was fit on n=1 model (insufficient data; group-mean +0.355 with single yes-case). <strong>post_IH correction marked exploratory</strong> — group-mean ≈ 0 in re-audit (n=22 panel) does not replicate the OLS fit. <strong>GQA correction replicates</strong> (panel +0.115 vs hardcoded +0.11). <strong>D_f formula corrected for Phase B (γ>1)</strong> — uses discrete cumulative sum instead of continuum approximation. LLaMA-3, Mistral, Gemma now report correct compression values.",
|
| 289 |
"v053.release.banner": "🔧 v0.5.3 — Audit-driven fixes: KV compression D_f now uses discrete sum (correct for all γ); δ_SWA disabled (n=1 calibration); paper §5.2 C_V coefficient erratum (1/4 → 1/12).",
|
| 290 |
+
|
| 291 |
+
// §35 v0.6 — γ predicted-vs-observed diagnostic
|
| 292 |
+
"gamma_check.title": "🔍 γ predicted vs observed",
|
| 293 |
+
"gamma_check.desc": "Enter your empirically measured γ. Tool detects regime: fraud (θ inflated) / compressed / over-Padé / SWA-random / normal.",
|
| 294 |
+
"gamma_check.gobs_label": "γ_observed",
|
| 295 |
+
"gamma_check.gobs_tip": "Empirically measured γ from your model's attention scores. Use the Diagnose CLI to obtain this from real weights.",
|
| 296 |
+
"gamma_check.random_label": "Random corpus?",
|
| 297 |
+
"gamma_check.random_tip": "Tick if γ_observed was measured on random/unstructured tokens. Distinguishes SWA signature (γ_obs > 1) from anomaly.",
|
| 298 |
+
"gamma_check.regime": "Regime",
|
| 299 |
+
"gamma_check.regime.normal": "Normal",
|
| 300 |
+
"gamma_check.regime.fraud": "Fraud (θ inflated)",
|
| 301 |
+
"gamma_check.regime.compressed": "Compressed context",
|
| 302 |
+
"gamma_check.regime.overpade": "Over-Padé",
|
| 303 |
+
"gamma_check.regime.swa": "SWA random-corpus signature",
|
| 304 |
+
"gamma_check.regime.unknown": "Unknown",
|
| 305 |
+
"gamma_check.regime.normal.desc": "η ∈ [0.85, 1.15]: model uses its full nominal context, no anomaly.",
|
| 306 |
+
"gamma_check.regime.fraud.desc": "η < 0.01: nominal θ inflated. Model behaves as if θ ≪ advertised. Likely YaRN/marketing inflation without true context extension.",
|
| 307 |
+
"gamma_check.regime.compressed.desc":"η ∈ [0.01, 0.5): context is compressed (model attends less far than nominal θ predicts). Common in instruction-tuned / RLHF models.",
|
| 308 |
+
"gamma_check.regime.overpade.desc": "η > 1.5: model attends farther than Padé predicts. Possible Lerch-corrected regime or undertrained early-checkpoint.",
|
| 309 |
+
"gamma_check.regime.swa.desc": "γ_obs > 1.05 on random corpus = sliding-window attention signature (Mistral / Gemma family).",
|
| 310 |
+
"gamma_check.regime.unknown.desc": "Inputs out of range or γ_obs > 1 without random-corpus flag. Verify measurement.",
|
| 311 |
+
"gamma_check.glossary.title": "ⓘ Glossary — what these variables mean",
|
| 312 |
+
"gamma_check.glossary.gamma_pade": "<strong>γ_Padé</strong>: closed-form prediction (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 313 |
+
"gamma_check.glossary.gamma_obs": "<strong>γ_observed</strong>: empirically measured from your model's attention scores (run the Diagnose CLI on real weights).",
|
| 314 |
+
"gamma_check.glossary.theta_eff_obs":"<strong>θ_eff (observed)</strong>: inverted from γ_obs via T√2 / (1 − γ_obs). Effective θ implied by your measurement.",
|
| 315 |
+
"gamma_check.glossary.theta_eff_pade":"<strong>θ_eff (Padé)</strong>: θ + T/√2. Effective θ predicted by closed-form.",
|
| 316 |
+
"gamma_check.glossary.efficiency": "<strong>η</strong>: ratio θ_eff_obs / θ_eff_Padé. ≈1 = normal · <0.01 = fraud · <0.5 = compressed · >1.5 = over-Padé.",
|
| 317 |
+
"gamma_check.glossary.delta_h": "<strong>ΔH_Cardy</strong>: log(θ_eff_obs / θ_nominal). Cardy entropy shift. Negative = compression entropy. ~0 = nominal match.",
|
| 318 |
+
"gamma_check.glossary.regime": "<strong>Regime</strong>: automatic classifier from η + γ_obs + random_corpus flag.",
|
| 319 |
+
|
| 320 |
+
// §36 v0.6 — Tooltips for inline ⓘ icons (per-variable explanations)
|
| 321 |
+
"tooltip.gamma_pade": "<strong>γ_Padé(T_eval)</strong>: closed-form prediction (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 322 |
+
"tooltip.gamma_decomposed": "<strong>γ_decomposed</strong>: γ from full architectural decomposition. Padé baseline + GQA shift + post-IH shift (calibrated audit-replicated subset).",
|
| 323 |
+
"tooltip.d_horizon": "<strong>d_horizon</strong>: effective attention horizon. Beyond this position, scores fall below noise floor (paper §26).",
|
| 324 |
+
"tooltip.L_NIAH": "<strong>L_NIAH ceiling</strong>: predicted ceiling for needle-in-a-haystack retrieval reliability at current d_horizon.",
|
| 325 |
+
"tooltip.chi": "<strong>χ susceptibility</strong>: χ = 1/(1−γ). Diverges at the Hagedorn line γ=1.",
|
| 326 |
+
"tooltip.kv_memory": "<strong>KV memory @ T_eval (BF16)</strong>: per-request KV cache = 2 · n_layers · n_kv_heads · d_head · T_eval bytes.",
|
| 327 |
+
"tooltip.theta_eff_obs": "<strong>θ_eff (observed)</strong>: effective θ implied by your γ_observed: T√2 / (1 − γ_obs).",
|
| 328 |
+
"tooltip.theta_eff_pade": "<strong>θ_eff (Padé)</strong>: effective θ predicted by closed-form: θ + T/√2.",
|
| 329 |
+
"tooltip.efficiency": "<strong>η = θ_eff_obs / θ_eff_Padé</strong>: efficiency ratio. ≈1 = normal · <0.01 = fraud · <0.5 = compressed · >1.5 = over-Padé.",
|
| 330 |
+
"tooltip.delta_h_cardy": "<strong>ΔH_Cardy</strong>: log(θ_eff_obs / θ_nominal). Cardy entropy shift. Negative = compression entropy. ~0 = nominal match.",
|
| 331 |
+
"tooltip.verdict_aggregate": "<strong>Verdict</strong>: worst-of across all recipes. ✅ GO = all green · ⚠ DEGRADED = ≥1 yellow · ❌ NO = ≥1 red.",
|
| 332 |
+
"tooltip.verdict_breakdown": "<strong>Per-recipe breakdown</strong>: each recipe tests an <em>independent</em> decision axis (long-context · budget · hardware · custom-vs-API · KV-compression). A ❌ on X-1 means \"use the API for your volume\" not \"the model fails\" — open the Recipes section for per-axis context.",
|
| 333 |
+
"tooltip.gamma_pill": "<strong>γ headline</strong>: γ_decomposed (or γ_Padé fallback). Range (0,1) = Phase A (anti-Ising). γ ≥ 1 = Hagedorn / Phase B.",
|
| 334 |
+
"tooltip.anti_ising": "<strong>Anti-Ising class</strong>: Phase A → β = γ−1 < 0. Machine-verified (Sage + Lean Mathlib4). See §35 v0.5.",
|
| 335 |
+
|
| 336 |
+
// §37 v0.6 — Lean+Mathlib theorem table
|
| 337 |
+
"lean.table.title": "📑 Lean+Mathlib theorem table",
|
| 338 |
+
"lean.table.desc": "Every entry below is machine-proven against Lean 4 + Mathlib4. Click any L# link to jump to the source line on GitHub. Grouped by topic — click a header to expand.",
|
| 339 |
+
"lean.table.theorem": "Theorem",
|
| 340 |
+
"lean.table.claim": "Claim",
|
| 341 |
+
"lean.table.tactic": "Tactic",
|
| 342 |
+
"lean.table.source": "Source",
|
| 343 |
+
"lean.table.lean": "Lean",
|
| 344 |
+
"lean.findings.title": "🔎 Substantive findings",
|
| 345 |
+
"lean.findings.detected_by": "Detected by",
|
| 346 |
+
"lean.findings.fixed_by": "Fixed by",
|
| 347 |
+
"lean.findings.recommendation":"Recommendation",
|
| 348 |
+
"lean.meta.repo": "Repo",
|
| 349 |
+
"lean.meta.build": "Build",
|
| 350 |
+
"lean.meta.theorems": "Theorems",
|
| 351 |
+
"lean.meta.verified": "verified",
|
| 352 |
+
"lean.meta.rejected": "rejected",
|
| 353 |
+
"lean.meta.sorry": "sorry",
|
| 354 |
+
"lean.meta.findings": "substantive findings",
|
| 355 |
+
"lean.manifest.loading": "Loading Lean manifest…",
|
| 356 |
+
"lean.manifest.error": "Lean manifest unavailable",
|
| 357 |
+
|
| 358 |
+
// Help modal — v0.6 section
|
| 359 |
+
"help.v06.title": "🆕 v0.6 — γ predicted-vs-observed + Cardy ΔH + Lean badges",
|
| 360 |
+
"help.v06.intro": "<em>v0.6 (2026-05-06): three new diagnostics live in the TAF Card under <strong>🔬 Diagnostics</strong>. All run in your browser; γ_observed comes from the Diagnose CLI on real weights.</em>",
|
| 361 |
+
"help.v06.layout.title": "TAF Card layout (new in v0.6)",
|
| 362 |
+
"help.v06.layout.body": "After clicking <strong>🚀 Generate full profile</strong> the card shows: a <strong>hero strip</strong> on top (architecture class + meta + 3 pills: aggregate verdict ✅/⚠/❌, γ headline, 🧲 Anti-Ising if Phase A) and four <strong>expandable sections</strong>: <strong>📋 Recipes</strong> (open by default — verdict per dimension), <strong>🔬 Diagnostics</strong> (key numbers, γ predicted vs observed, what-if explorer), <strong>✓ Verification</strong> (Sage+Lean algebraic consistency, falsification F1-F23), <strong>📂 Provenance & share</strong> (calibration audit + JSON download / share link / registry submit). Click any header to expand. Every variable has an inline <strong>ⓘ</strong> tooltip.",
|
| 363 |
+
"help.v06.gamma_check.title": "γ predicted vs observed",
|
| 364 |
+
"help.v06.gamma_check.body": "Enter the empirically-measured γ from your model and the tool computes <strong>η = θ_eff_obs / θ_eff_Padé</strong> and classifies into one of 5 regimes:",
|
| 365 |
+
"help.v06.case.normal": "<strong>Normal</strong> (η ∈ [0.85, 1.15]) — model uses its full nominal context. <em>Use case</em>: validate a new release before adopting it.",
|
| 366 |
+
"help.v06.case.fraud": "<strong>Fraud</strong> (η < 0.01) — nominal θ inflated; model behaves as if θ ≪ advertised. <em>Use case</em>: detect YaRN/marketing inflation (CodeLlama / Mistral-Nemo pattern).",
|
| 367 |
+
"help.v06.case.compressed": "<strong>Compressed</strong> (η < 0.5) — context compressed; model attends shorter than nominal θ. <em>Use case</em>: spot RLHF/instruction-tuning compression (LLaMA-2 pattern).",
|
| 368 |
+
"help.v06.case.overpade": "<strong>Over-Padé</strong> (η > 1.5) — model attends farther than Padé predicts. <em>Use case</em>: identify Lerch-corrected regime or undertrained early checkpoints (pythia-1b pattern).",
|
| 369 |
+
"help.v06.case.swa": "<strong>SWA random-corpus</strong> (γ_obs > 1.05 with random_corpus=Yes) — sliding-window attention signature. <em>Use case</em>: confirm Mistral / Gemma SWA on random tokens.",
|
| 370 |
+
"help.v06.cardy.title": "Cardy ΔH diagnostic",
|
| 371 |
+
"help.v06.cardy.body": "<strong>ΔH_Cardy = log(θ_eff_obs / θ_nominal)</strong>. Entropy shift between observed effective θ and nominal θ. Strong negative = compression entropy; near zero = nominal match. Complements η for borderline cases.",
|
| 372 |
+
"help.v06.lean.title": "Lean + Mathlib verification badges",
|
| 373 |
+
"help.v06.lean.body": "TAF identities are formally machine-proven in Lean Mathlib4: <strong>37 theorems</strong> in 7 groups (Padé, RG flow, Cayley, D-SAGE, audit findings, erratum CV, misc) + <strong>1 substantive finding</strong> (V-derivative factor-2, theorem <code>V_derivative_ne_RG_beta</code>). Source: <a href=\"https://github.com/karlesmarin/lean-taf\" target=\"_blank\">github.com/karlesmarin/lean-taf</a> (commit 25c77fd). Re-verify locally: <code>git clone --depth=1 https://github.com/karlesmarin/lean-taf && cd lean-taf && lake exe cache get && lake env lean Taf/Identities.lean</code>. The 🧲 Anti-Ising pill in the hero strip and the Verification accordion link to specific source lines.",
|
| 374 |
+
"help.v06.glossary.title": "Variable glossary (also embedded in TAF Card)",
|
| 375 |
+
"help.v06.glossary.body": "Every variable in the TAF Card has an inline ⓘ tooltip. The complete list: γ, γ_Padé, γ_decomposed, γ_observed, θ, θ_eff_obs, θ_eff_Padé, η, ΔH_Cardy, χ, d_horizon, L_NIAH, KV memory, regime. Hover any ⓘ for the definition + paper section.",
|
| 376 |
},
|
| 377 |
|
| 378 |
// ────────────────────────────────────────────────────────────────────────
|
|
|
|
| 429 |
"v053.calibration.note": "<strong>Corrección SWA desactivada</strong> — δ_SWA = -0.21 original se ajustó con n=1 modelo (datos insuficientes; promedio del único caso +0.355). <strong>Corrección post_IH marcada exploratoria</strong> — promedio de grupo ≈ 0 en re-auditoría (panel n=22) no replica el ajuste OLS. <strong>Corrección GQA replica</strong> (panel +0.115 vs hardcoded +0.11). <strong>Fórmula D_f corregida para Fase B (γ>1)</strong> — usa suma cumulativa discreta en lugar de aproximación continua. LLaMA-3, Mistral, Gemma ahora reportan valores correctos de compresión.",
|
| 430 |
"v053.release.banner": "🔧 v0.5.3 — Correcciones por audit: D_f de compresión KV ahora usa suma discreta (correcto para todo γ); δ_SWA desactivado (calibración n=1); erratum coeficiente C_V paper §5.2 (1/4 → 1/12).",
|
| 431 |
|
| 432 |
+
// §35 v0.6 — Diagnóstico γ predicho vs observado
|
| 433 |
+
"gamma_check.title": "🔍 γ predicho vs observado",
|
| 434 |
+
"gamma_check.desc": "Introduce tu γ medido empíricamente. La herramienta detecta el régimen: fraude (θ inflado) / comprimido / sobre-Padé / SWA-aleatorio / normal.",
|
| 435 |
+
"gamma_check.gobs_label": "γ_observado",
|
| 436 |
+
"gamma_check.gobs_tip": "γ medido empíricamente desde los attention scores de tu modelo. Usa la CLI de Diagnose para obtenerlo desde pesos reales.",
|
| 437 |
+
"gamma_check.random_label": "¿Corpus aleatorio?",
|
| 438 |
+
"gamma_check.random_tip": "Marca sí si γ_observado se midió sobre tokens aleatorios/no estructurados. Distingue la firma SWA (γ_obs > 1) de una anomalía.",
|
| 439 |
+
"gamma_check.regime": "Régimen",
|
| 440 |
+
"gamma_check.regime.normal": "Normal",
|
| 441 |
+
"gamma_check.regime.fraud": "Fraude (θ inflado)",
|
| 442 |
+
"gamma_check.regime.compressed": "Contexto comprimido",
|
| 443 |
+
"gamma_check.regime.overpade": "Sobre-Padé",
|
| 444 |
+
"gamma_check.regime.swa": "Firma SWA (corpus aleatorio)",
|
| 445 |
+
"gamma_check.regime.unknown": "Desconocido",
|
| 446 |
+
"gamma_check.regime.normal.desc": "η ∈ [0.85, 1.15]: el modelo usa su contexto nominal completo, sin anomalías.",
|
| 447 |
+
"gamma_check.regime.fraud.desc": "η < 0.01: θ nominal inflado. El modelo se comporta como si θ ≪ del anunciado. Probable inflación tipo YaRN/marketing sin extensión real de contexto.",
|
| 448 |
+
"gamma_check.regime.compressed.desc":"η ∈ [0.01, 0.5): contexto comprimido (el modelo atiende menos lejos de lo que predice θ nominal). Común en modelos instruction-tuned / RLHF.",
|
| 449 |
+
"gamma_check.regime.overpade.desc": "η > 1.5: el modelo atiende más lejos de lo que Padé predice. Posible régimen Lerch-corregido o checkpoint temprano sub-entrenado.",
|
| 450 |
+
"gamma_check.regime.swa.desc": "γ_obs > 1.05 sobre corpus aleatorio = firma de sliding-window attention (familias Mistral / Gemma).",
|
| 451 |
+
"gamma_check.regime.unknown.desc": "Entradas fuera de rango o γ_obs > 1 sin flag de corpus aleatorio. Verifica la medición.",
|
| 452 |
+
"gamma_check.glossary.title": "ⓘ Glosario — significado de las variables",
|
| 453 |
+
"gamma_check.glossary.gamma_pade": "<strong>γ_Padé</strong>: predicción cerrada (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 454 |
+
"gamma_check.glossary.gamma_obs": "<strong>γ_observado</strong>: medido empíricamente desde los attention scores (ejecuta Diagnose CLI sobre pesos reales).",
|
| 455 |
+
"gamma_check.glossary.theta_eff_obs":"<strong>θ_eff (observado)</strong>: invertido desde γ_obs vía T√2 / (1 − γ_obs). θ efectivo implicado por tu medición.",
|
| 456 |
+
"gamma_check.glossary.theta_eff_pade":"<strong>θ_eff (Padé)</strong>: θ + T/√2. θ efectivo predicho por la fórmula cerrada.",
|
| 457 |
+
"gamma_check.glossary.efficiency": "<strong>η</strong>: ratio θ_eff_obs / θ_eff_Padé. ≈1 = normal · <0.01 = fraude · <0.5 = comprimido · >1.5 = sobre-Padé.",
|
| 458 |
+
"gamma_check.glossary.delta_h": "<strong>ΔH_Cardy</strong>: log(θ_eff_obs / θ_nominal). Cambio de entropía de Cardy. Negativo = entropía de compresión. ~0 = coincide con nominal.",
|
| 459 |
+
"gamma_check.glossary.regime": "<strong>Régimen</strong>: clasificador automático a partir de η + γ_obs + flag corpus_aleatorio.",
|
| 460 |
+
|
| 461 |
+
// §36 v0.6 — Tooltips para iconos ⓘ inline
|
| 462 |
+
"tooltip.gamma_pade": "<strong>γ_Padé(T_eval)</strong>: predicción cerrada (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 463 |
+
"tooltip.gamma_decomposed": "<strong>γ_descompuesto</strong>: γ desde descomposición arquitectural completa. Línea base Padé + shift GQA + shift post-IH (subconjunto replicado en audit calibrado).",
|
| 464 |
+
"tooltip.d_horizon": "<strong>d_horizon</strong>: horizonte efectivo de atención. Más allá los scores caen bajo el suelo de ruido (paper §26).",
|
| 465 |
+
"tooltip.L_NIAH": "<strong>Techo L_NIAH</strong>: techo predicho de fiabilidad needle-in-a-haystack al d_horizon actual.",
|
| 466 |
+
"tooltip.chi": "<strong>χ susceptibilidad</strong>: χ = 1/(1−γ). Diverge en la línea Hagedorn γ=1.",
|
| 467 |
+
"tooltip.kv_memory": "<strong>Memoria KV @ T_eval (BF16)</strong>: caché KV por petición = 2 · n_layers · n_kv_heads · d_head · T_eval bytes.",
|
| 468 |
+
"tooltip.theta_eff_obs": "<strong>θ_eff (observado)</strong>: θ efectivo implicado por tu γ_observado: T√2 / (1 − γ_obs).",
|
| 469 |
+
"tooltip.theta_eff_pade": "<strong>θ_eff (Padé)</strong>: θ efectivo predicho por la fórmula cerrada: θ + T/√2.",
|
| 470 |
+
"tooltip.efficiency": "<strong>η = θ_eff_obs / θ_eff_Padé</strong>: ratio de eficiencia. ≈1 = normal · <0.01 = fraude · <0.5 = comprimido · >1.5 = sobre-Padé.",
|
| 471 |
+
"tooltip.delta_h_cardy": "<strong>ΔH_Cardy</strong>: log(θ_eff_obs / θ_nominal). Cambio de entropía de Cardy. Negativo = entropía de compresión. ~0 = coincide con nominal.",
|
| 472 |
+
"tooltip.verdict_aggregate": "<strong>Veredicto</strong>: peor-de entre todas las recipes. ✅ ADELANTE = todo verde · ⚠ DEGRADADO = ≥1 amarillo · ❌ NO = ≥1 rojo.",
|
| 473 |
+
"tooltip.verdict_breakdown": "<strong>Desglose por recipe</strong>: cada recipe evalúa un eje de decisión <em>independiente</em> (contexto-largo · presupuesto · hardware · custom-vs-API · compresión-KV). Un ❌ en X-1 significa «usa la API para tu volumen» no «el modelo falla» — abre la sección Recipes para contexto por eje.",
|
| 474 |
+
"tooltip.gamma_pill": "<strong>γ titular</strong>: γ_descompuesto (o γ_Padé como fallback). Rango (0,1) = Fase A (anti-Ising). γ ≥ 1 = Hagedorn / Fase B.",
|
| 475 |
+
"tooltip.anti_ising": "<strong>Clase Anti-Ising</strong>: Fase A → β = γ−1 < 0. Machine-verified (Sage + Lean Mathlib4). Ver §35 v0.5.",
|
| 476 |
+
|
| 477 |
+
// §37 v0.6 — Tabla de teoremas Lean+Mathlib
|
| 478 |
+
"lean.table.title": "📑 Tabla de teoremas Lean+Mathlib",
|
| 479 |
+
"lean.table.desc": "Cada entrada está machine-proven contra Lean 4 + Mathlib4. Click en cualquier link L# para saltar a la línea fuente en GitHub. Agrupado por tema — click en cabecera para expandir.",
|
| 480 |
+
"lean.table.theorem": "Teorema",
|
| 481 |
+
"lean.table.claim": "Afirmación",
|
| 482 |
+
"lean.table.tactic": "Táctica",
|
| 483 |
+
"lean.table.source": "Fuente",
|
| 484 |
+
"lean.table.lean": "Lean",
|
| 485 |
+
"lean.findings.title": "🔎 Findings sustantivos",
|
| 486 |
+
"lean.findings.detected_by": "Detectado por",
|
| 487 |
+
"lean.findings.fixed_by": "Arreglado por",
|
| 488 |
+
"lean.findings.recommendation":"Recomendación",
|
| 489 |
+
"lean.meta.repo": "Repo",
|
| 490 |
+
"lean.meta.build": "Build",
|
| 491 |
+
"lean.meta.theorems": "Teoremas",
|
| 492 |
+
"lean.meta.verified": "verificados",
|
| 493 |
+
"lean.meta.rejected": "rechazados",
|
| 494 |
+
"lean.meta.sorry": "sorry",
|
| 495 |
+
"lean.meta.findings": "findings sustantivos",
|
| 496 |
+
"lean.manifest.loading": "Cargando manifest Lean…",
|
| 497 |
+
"lean.manifest.error": "Manifest Lean no disponible",
|
| 498 |
+
|
| 499 |
+
// Help modal — sección v0.6
|
| 500 |
+
"help.v06.title": "🆕 v0.6 — γ predicho-vs-observado + Cardy ΔH + badges Lean",
|
| 501 |
+
"help.v06.intro": "<em>v0.6 (2026-05-06): tres diagnósticos nuevos viven en el TAF Card bajo <strong>🔬 Diagnósticos</strong>. Todo corre en tu navegador; γ_observado lo obtienes con la Diagnose CLI sobre pesos reales.</em>",
|
| 502 |
+
"help.v06.layout.title": "Layout del TAF Card (nuevo en v0.6)",
|
| 503 |
+
"help.v06.layout.body": "Tras click en <strong>🚀 Generar perfil completo</strong> la tarjeta muestra: una <strong>tira hero</strong> arriba (clase de arquitectura + meta + 3 pills: veredicto agregado ✅/⚠/❌, γ titular, 🧲 Anti-Ising si Fase A) y cuatro <strong>secciones plegables</strong>: <strong>📋 Recipes</strong> (abierto por defecto — veredicto por dimensión), <strong>🔬 Diagnósticos</strong> (números clave, γ predicho vs observado, explorador what-if), <strong>✓ Verificación</strong> (consistencia algebraica Sage+Lean, falsificación F1-F23), <strong>📂 Procedencia y compartir</strong> (auditoría de calibración + descarga JSON / enlace / submit al registro). Click en cualquier cabecera para expandir. Cada variable tiene tooltip <strong>ⓘ</strong> inline.",
|
| 504 |
+
"help.v06.gamma_check.title": "γ predicho vs observado",
|
| 505 |
+
"help.v06.gamma_check.body": "Introduces el γ medido empíricamente y la herramienta calcula <strong>η = θ_eff_obs / θ_eff_Padé</strong> y clasifica en uno de 5 regímenes:",
|
| 506 |
+
"help.v06.case.normal": "<strong>Normal</strong> (η ∈ [0.85, 1.15]) — el modelo usa su contexto nominal completo. <em>Caso de uso</em>: validar un release nuevo antes de adoptarlo.",
|
| 507 |
+
"help.v06.case.fraud": "<strong>Fraude</strong> (η < 0.01) — θ nominal inflado; el modelo se comporta como si θ ≪ del anunciado. <em>Caso de uso</em>: detectar inflación YaRN/marketing (patrón CodeLlama / Mistral-Nemo).",
|
| 508 |
+
"help.v06.case.compressed": "<strong>Comprimido</strong> (η < 0.5) — contexto comprimido; el modelo atiende menos lejos que θ nominal. <em>Caso de uso</em>: detectar compresión por RLHF/instruction-tuning (patrón LLaMA-2).",
|
| 509 |
+
"help.v06.case.overpade": "<strong>Sobre-Padé</strong> (η > 1.5) — el modelo atiende más lejos que Padé predice. <em>Caso de uso</em>: identificar régimen Lerch-corregido o checkpoints tempranos sub-entrenados (patrón pythia-1b).",
|
| 510 |
+
"help.v06.case.swa": "<strong>SWA corpus aleatorio</strong> (γ_obs > 1.05 con corpus_aleatorio=Sí) — firma de sliding-window attention. <em>Caso de uso</em>: confirmar SWA en Mistral / Gemma sobre tokens random.",
|
| 511 |
+
"help.v06.cardy.title": "Diagnóstico Cardy ΔH",
|
| 512 |
+
"help.v06.cardy.body": "<strong>ΔH_Cardy = log(θ_eff_obs / θ_nominal)</strong>. Cambio de entropía entre el θ efectivo observado y el θ nominal. Negativo fuerte = entropía de compresión; cerca de cero = coincide con nominal. Complementa a η para casos borderline.",
|
| 513 |
+
"help.v06.lean.title": "Badges de verificación Lean + Mathlib",
|
| 514 |
+
"help.v06.lean.body": "Las identidades TAF están formalmente machine-proven en Lean Mathlib4: <strong>37 teoremas</strong> en 7 grupos (Padé, flujo RG, Cayley, D-SAGE, hallazgos de auditoría, erratum CV, misc) + <strong>1 hallazgo sustantivo</strong> (factor 2 en derivada V, teorema <code>V_derivative_ne_RG_beta</code>). Fuente: <a href=\"https://github.com/karlesmarin/lean-taf\" target=\"_blank\">github.com/karlesmarin/lean-taf</a> (commit 25c77fd). Re-verifica localmente: <code>git clone --depth=1 https://github.com/karlesmarin/lean-taf && cd lean-taf && lake exe cache get && lake env lean Taf/Identities.lean</code>. La pill 🧲 Anti-Ising del hero y la sección Verificación enlazan a líneas específicas del código fuente.",
|
| 515 |
+
"help.v06.glossary.title": "Glosario de variables (también embebido en TAF Card)",
|
| 516 |
+
"help.v06.glossary.body": "Cada variable del TAF Card tiene un tooltip ⓘ inline. Lista completa: γ, γ_Padé, γ_descompuesto, γ_observado, θ, θ_eff_obs, θ_eff_Padé, η, ΔH_Cardy, χ, d_horizon, L_NIAH, memoria KV, régimen. Pasa el ratón sobre cualquier ⓘ para la definición + sección del paper.",
|
| 517 |
+
|
| 518 |
"hero.title": "🔬 TAF Agent",
|
| 519 |
"hero.tagline": "Prueba <strong>CUALQUIER</strong> LLM transformer antes de gastar GPU/€.",
|
| 520 |
"hero.subtitle": "Todo el cómputo corre localmente en tu navegador. Gratis. Sin límites. Auditable.",
|
|
|
|
| 625 |
"falsification.col.evidence": "Evidencia",
|
| 626 |
|
| 627 |
"tafcard.title": "📇 TAF Card — perfil completo del modelo",
|
| 628 |
+
"tafcard.recipes_title": "📋 Recetas — veredicto por dimensión",
|
| 629 |
+
"tafcard.recipes_count_label": "dimensiones",
|
| 630 |
"tafcard.numbers_title": "🔢 Números clave (paper §26)",
|
| 631 |
+
"tafcard.fals_title": "🔬 Estado de falsificación (F1-F23)",
|
| 632 |
+
"tafcard.fals_none": "Sin falsificaciones aplicables.",
|
| 633 |
+
"tafcard.diag_title": "🔬 Diagnósticos — números · γ check · what-if",
|
| 634 |
+
"tafcard.verify_title": "✓ Verificación — Lean + Sage + falsificación",
|
| 635 |
+
"tafcard.share_title": "📂 Procedencia y compartir",
|
| 636 |
+
"tafcard.whatif_title": "🎚️ Explorador what-if",
|
| 637 |
+
"verdict.go": "ADELANTE",
|
| 638 |
+
"verdict.no": "NO",
|
| 639 |
+
"verdict.degraded": "DEGRADADO",
|
| 640 |
|
| 641 |
"compare.title_out": "🆚 Tabla comparativa",
|
| 642 |
|
|
|
|
| 660 |
"param.T_train.tip": "<strong>Contexto máximo de entrenamiento</strong>. De <code>max_position_embeddings</code>. Más allá es extrapolación.",
|
| 661 |
"param.T_eval": "T_eval (tu objetivo)",
|
| 662 |
"param.T_eval.tip": "<strong>Tu contexto de inferencia objetivo</strong>. La pregunta clave: ¿se comportará bien el modelo a ESTA longitud?",
|
| 663 |
+
"param.n_attn": "n_attention_heads",
|
| 664 |
+
"param.n_attn.tip": "<strong>Número de attention heads</strong> por capa. De <code>num_attention_heads</code>.",
|
| 665 |
+
"param.n_kv": "n_kv_heads",
|
| 666 |
+
"param.n_kv.tip": "<strong>KV heads</strong>. Si < n_attention_heads → GQA (Grouped Query Attention). Reduce memoria KV pero empuja γ hacia Hagedorn.",
|
| 667 |
"param.d_head": "head_dim",
|
| 668 |
+
"param.d_head.tip": "<strong>Dimensión por head</strong>. Típico 64, 96, 128. De <code>head_dim</code> o <code>hidden_size / num_attention_heads</code>.",
|
| 669 |
+
"param.n_layers": "n_layers",
|
| 670 |
+
"param.n_layers.tip": "<strong>Número de bloques transformer</strong>. De <code>num_hidden_layers</code>.",
|
| 671 |
"param.n_params": "n_params (ej. 8e9)",
|
| 672 |
+
"param.n_params.tip": "<strong>Número total de parámetros</strong>. Umbral ~400M para emergencia de induction heads. Afecta memoria KV y recipes de presupuesto.",
|
| 673 |
"param.has_swa": "¿Tiene SWA?",
|
| 674 |
+
"param.has_swa.tip": "<strong>Sliding Window Attention</strong>. <code>true</code> para Mistral, gemma-2, phi-3. El audit de calibración v0.5.3 desactivó la corrección histórica δ_SWA (ajuste n=1).",
|
| 675 |
"common.yes": "Sí",
|
| 676 |
"common.no": "No",
|
| 677 |
|
|
|
|
| 797 |
"v053.calibration.note": "<strong>Correction SWA désactivée</strong> — δ_SWA = -0.21 d'origine était calibrée sur n=1 modèle (données insuffisantes ; moyenne du cas unique +0.355). <strong>Correction post_IH marquée exploratoire</strong> — moyenne de groupe ≈ 0 en ré-audit (panel n=22) ne réplique pas l'ajustement OLS. <strong>Correction GQA réplique</strong> (panel +0.115 vs hardcoded +0.11). <strong>Formule D_f corrigée pour Phase B (γ>1)</strong> — utilise une somme cumulative discrète au lieu d'une approximation continue. LLaMA-3, Mistral, Gemma rapportent maintenant des valeurs de compression correctes.",
|
| 798 |
"v053.release.banner": "🔧 v0.5.3 — Corrections issues d'audit : D_f de compression KV utilise maintenant la somme discrète (correct pour tout γ) ; δ_SWA désactivé (calibrage n=1) ; erratum du coefficient C_V paper §5.2 (1/4 → 1/12).",
|
| 799 |
|
| 800 |
+
// §35 v0.6 — Diagnostic γ prédit vs observé
|
| 801 |
+
"gamma_check.title": "🔍 γ prédit vs observé",
|
| 802 |
+
"gamma_check.desc": "Saisissez votre γ mesuré empiriquement. L'outil détecte le régime : fraude (θ gonflé) / comprimé / sur-Padé / SWA-aléatoire / normal.",
|
| 803 |
+
"gamma_check.gobs_label": "γ_observé",
|
| 804 |
+
"gamma_check.gobs_tip": "γ mesuré empiriquement à partir des attention scores de votre modèle. Utilisez la CLI Diagnose pour l'obtenir depuis les poids réels.",
|
| 805 |
+
"gamma_check.random_label": "Corpus aléatoire ?",
|
| 806 |
+
"gamma_check.random_tip": "Cochez si γ_observé a été mesuré sur des tokens aléatoires/non structurés. Distingue la signature SWA (γ_obs > 1) d'une anomalie.",
|
| 807 |
+
"gamma_check.regime": "Régime",
|
| 808 |
+
"gamma_check.regime.normal": "Normal",
|
| 809 |
+
"gamma_check.regime.fraud": "Fraude (θ gonflé)",
|
| 810 |
+
"gamma_check.regime.compressed": "Contexte comprimé",
|
| 811 |
+
"gamma_check.regime.overpade": "Sur-Padé",
|
| 812 |
+
"gamma_check.regime.swa": "Signature SWA (corpus aléatoire)",
|
| 813 |
+
"gamma_check.regime.unknown": "Inconnu",
|
| 814 |
+
"gamma_check.regime.normal.desc": "η ∈ [0.85, 1.15] : le modèle utilise son contexte nominal complet, sans anomalie.",
|
| 815 |
+
"gamma_check.regime.fraud.desc": "η < 0.01 : θ nominal gonflé. Le modèle se comporte comme si θ ≪ annoncé. Probable inflation YaRN/marketing sans vraie extension de contexte.",
|
| 816 |
+
"gamma_check.regime.compressed.desc":"η ∈ [0.01, 0.5) : contexte comprimé (le modèle attend moins loin que ne le prédit θ nominal). Fréquent en instruction-tuned / RLHF.",
|
| 817 |
+
"gamma_check.regime.overpade.desc": "η > 1.5 : le modèle attend plus loin que Padé ne le prédit. Régime Lerch-corrigé possible ou checkpoint précoce sous-entraîné.",
|
| 818 |
+
"gamma_check.regime.swa.desc": "γ_obs > 1.05 sur corpus aléatoire = signature de sliding-window attention (familles Mistral / Gemma).",
|
| 819 |
+
"gamma_check.regime.unknown.desc": "Entrées hors plage ou γ_obs > 1 sans flag corpus_aléatoire. Vérifiez la mesure.",
|
| 820 |
+
"gamma_check.glossary.title": "ⓘ Glossaire — signification des variables",
|
| 821 |
+
"gamma_check.glossary.gamma_pade": "<strong>γ_Padé</strong> : prédiction fermée (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 822 |
+
"gamma_check.glossary.gamma_obs": "<strong>γ_observé</strong> : mesuré empiriquement à partir des attention scores (exécutez Diagnose CLI sur poids réels).",
|
| 823 |
+
"gamma_check.glossary.theta_eff_obs":"<strong>θ_eff (observé)</strong> : inversé depuis γ_obs via T√2 / (1 − γ_obs). θ effectif impliqué par votre mesure.",
|
| 824 |
+
"gamma_check.glossary.theta_eff_pade":"<strong>θ_eff (Padé)</strong> : θ + T/√2. θ effectif prédit par la formule fermée.",
|
| 825 |
+
"gamma_check.glossary.efficiency": "<strong>η</strong> : rapport θ_eff_obs / θ_eff_Padé. ≈1 = normal · <0.01 = fraude · <0.5 = comprimé · >1.5 = sur-Padé.",
|
| 826 |
+
"gamma_check.glossary.delta_h": "<strong>ΔH_Cardy</strong> : log(θ_eff_obs / θ_nominal). Variation d'entropie de Cardy. Négatif = entropie de compression. ~0 = correspondance nominale.",
|
| 827 |
+
"gamma_check.glossary.regime": "<strong>Régime</strong> : classifieur automatique à partir de η + γ_obs + flag corpus_aléatoire.",
|
| 828 |
+
|
| 829 |
+
// §36 v0.6 — Tooltips pour icônes ⓘ inline
|
| 830 |
+
"tooltip.gamma_pade": "<strong>γ_Padé(T_eval)</strong> : prédiction fermée (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.",
|
| 831 |
+
"tooltip.gamma_decomposed": "<strong>γ_décomposé</strong> : γ depuis la décomposition architecturale complète. Ligne de base Padé + shift GQA + shift post-IH (sous-ensemble répliqué dans audit calibré).",
|
| 832 |
+
"tooltip.d_horizon": "<strong>d_horizon</strong> : horizon d'attention effectif. Au-delà, les scores tombent sous le plancher de bruit (paper §26).",
|
| 833 |
+
"tooltip.L_NIAH": "<strong>Plafond L_NIAH</strong> : plafond prédit de fiabilité needle-in-a-haystack au d_horizon courant.",
|
| 834 |
+
"tooltip.chi": "<strong>χ susceptibilité</strong> : χ = 1/(1−γ). Diverge à la ligne Hagedorn γ=1.",
|
| 835 |
+
"tooltip.kv_memory": "<strong>Mémoire KV @ T_eval (BF16)</strong> : cache KV par requête = 2 · n_layers · n_kv_heads · d_head · T_eval octets.",
|
| 836 |
+
"tooltip.theta_eff_obs": "<strong>θ_eff (observé)</strong> : θ effectif impliqué par votre γ_observé : T√2 / (1 − γ_obs).",
|
| 837 |
+
"tooltip.theta_eff_pade": "<strong>θ_eff (Padé)</strong> : θ effectif prédit par la formule fermée : θ + T/√2.",
|
| 838 |
+
"tooltip.efficiency": "<strong>η = θ_eff_obs / θ_eff_Padé</strong> : ratio d'efficacité. ≈1 = normal · <0.01 = fraude · <0.5 = comprimé · >1.5 = sur-Padé.",
|
| 839 |
+
"tooltip.delta_h_cardy": "<strong>ΔH_Cardy</strong> : log(θ_eff_obs / θ_nominal). Variation d'entropie de Cardy. Négatif = entropie de compression. ~0 = correspondance nominale.",
|
| 840 |
+
"tooltip.verdict_aggregate": "<strong>Verdict</strong> : pire-de toutes les recettes. ✅ GO = tout vert · ⚠ DÉGRADÉ = ≥1 jaune · ❌ NON = ≥1 rouge.",
|
| 841 |
+
"tooltip.verdict_breakdown": "<strong>Décomposition par recette</strong> : chaque recette teste un axe de décision <em>indépendant</em> (contexte-long · budget · matériel · custom-vs-API · compression-KV). Un ❌ en X-1 signifie « utilisez l'API pour votre volume » et non « le modèle échoue » — ouvrez la section Recettes pour le contexte par axe.",
|
| 842 |
+
"tooltip.gamma_pill": "<strong>γ vedette</strong> : γ_décomposé (ou γ_Padé en fallback). Plage (0,1) = Phase A (anti-Ising). γ ≥ 1 = Hagedorn / Phase B.",
|
| 843 |
+
"tooltip.anti_ising": "<strong>Classe Anti-Ising</strong> : Phase A → β = γ−1 < 0. Machine-verified (Sage + Lean Mathlib4). Voir §35 v0.5.",
|
| 844 |
+
|
| 845 |
+
// §37 v0.6 — Table des théorèmes Lean+Mathlib
|
| 846 |
+
"lean.table.title": "📑 Table des théorèmes Lean+Mathlib",
|
| 847 |
+
"lean.table.desc": "Chaque entrée ci-dessous est machine-proven contre Lean 4 + Mathlib4. Cliquez sur un lien L# pour aller à la ligne source sur GitHub. Groupé par thème — cliquez sur un en-tête pour déplier.",
|
| 848 |
+
"lean.table.theorem": "Théorème",
|
| 849 |
+
"lean.table.claim": "Énoncé",
|
| 850 |
+
"lean.table.tactic": "Tactique",
|
| 851 |
+
"lean.table.source": "Source",
|
| 852 |
+
"lean.table.lean": "Lean",
|
| 853 |
+
"lean.findings.title": "🔎 Findings substantiels",
|
| 854 |
+
"lean.findings.detected_by": "Détecté par",
|
| 855 |
+
"lean.findings.fixed_by": "Corrigé par",
|
| 856 |
+
"lean.findings.recommendation":"Recommandation",
|
| 857 |
+
"lean.meta.repo": "Repo",
|
| 858 |
+
"lean.meta.build": "Build",
|
| 859 |
+
"lean.meta.theorems": "Théorèmes",
|
| 860 |
+
"lean.meta.verified": "vérifiés",
|
| 861 |
+
"lean.meta.rejected": "rejetés",
|
| 862 |
+
"lean.meta.sorry": "sorry",
|
| 863 |
+
"lean.meta.findings": "findings substantiels",
|
| 864 |
+
"lean.manifest.loading": "Chargement du manifeste Lean…",
|
| 865 |
+
"lean.manifest.error": "Manifeste Lean indisponible",
|
| 866 |
+
|
| 867 |
+
// Help modal — section v0.6
|
| 868 |
+
"help.v06.title": "🆕 v0.6 — γ prédit-vs-observé + Cardy ΔH + badges Lean",
|
| 869 |
+
"help.v06.intro": "<em>v0.6 (2026-05-06) : trois nouveaux diagnostics vivent dans la TAF Card sous <strong>🔬 Diagnostics</strong>. Tout tourne dans votre navigateur ; γ_observé provient de la Diagnose CLI sur poids réels.</em>",
|
| 870 |
+
"help.v06.layout.title": "Disposition de la TAF Card (nouveau en v0.6)",
|
| 871 |
+
"help.v06.layout.body": "Après avoir cliqué <strong>🚀 Générer profil complet</strong>, la carte affiche : une <strong>bande hero</strong> en haut (classe d'architecture + méta + 3 pills : verdict agrégé ✅/⚠/❌, γ vedette, 🧲 Anti-Ising si Phase A) et quatre <strong>sections pliables</strong> : <strong>📋 Recettes</strong> (ouverte par défaut — verdict par dimension), <strong>🔬 Diagnostics</strong> (nombres clés, γ prédit vs observé, explorateur what-if), <strong>✓ Vérification</strong> (cohérence algébrique Sage+Lean, falsification F1-F23), <strong>📂 Provenance & partage</strong> (audit de calibration + téléchargement JSON / lien / soumission registre). Cliquez sur n'importe quel en-tête pour déplier. Chaque variable a un tooltip <strong>ⓘ</strong> inline.",
|
| 872 |
+
"help.v06.gamma_check.title": "γ prédit vs observé",
|
| 873 |
+
"help.v06.gamma_check.body": "Saisissez le γ mesuré empiriquement et l'outil calcule <strong>η = θ_eff_obs / θ_eff_Padé</strong> et classe en l'un de 5 régimes :",
|
| 874 |
+
"help.v06.case.normal": "<strong>Normal</strong> (η ∈ [0.85, 1.15]) — le modèle utilise son contexte nominal complet. <em>Cas d'usage</em> : valider une nouvelle release avant adoption.",
|
| 875 |
+
"help.v06.case.fraud": "<strong>Fraude</strong> (η < 0.01) — θ nominal gonflé ; le modèle se comporte comme si θ ≪ annoncé. <em>Cas d'usage</em> : détecter inflation YaRN/marketing (motif CodeLlama / Mistral-Nemo).",
|
| 876 |
+
"help.v06.case.compressed": "<strong>Comprimé</strong> (η < 0.5) — contexte comprimé ; le modèle attend moins loin que θ nominal. <em>Cas d'usage</em> : repérer compression par RLHF/instruction-tuning (motif LLaMA-2).",
|
| 877 |
+
"help.v06.case.overpade": "<strong>Sur-Padé</strong> (η > 1.5) — le modèle attend plus loin que Padé ne le prédit. <em>Cas d'usage</em> : identifier régime Lerch-corrigé ou checkpoints précoces sous-entraînés (motif pythia-1b).",
|
| 878 |
+
"help.v06.case.swa": "<strong>SWA corpus aléatoire</strong> (γ_obs > 1.05 avec corpus_aléatoire=Oui) — signature de sliding-window attention. <em>Cas d'usage</em> : confirmer SWA Mistral / Gemma sur tokens aléatoires.",
|
| 879 |
+
"help.v06.cardy.title": "Diagnostic Cardy ΔH",
|
| 880 |
+
"help.v06.cardy.body": "<strong>ΔH_Cardy = log(θ_eff_obs / θ_nominal)</strong>. Variation d'entropie entre le θ effectif observé et le θ nominal. Fortement négatif = entropie de compression ; proche de zéro = correspondance nominale. Complète η pour les cas borderline.",
|
| 881 |
+
"help.v06.lean.title": "Badges de vérification Lean + Mathlib",
|
| 882 |
+
"help.v06.lean.body": "Les identités TAF sont formellement machine-proven en Lean Mathlib4 : <strong>37 théorèmes</strong> en 7 groupes (Padé, flot RG, Cayley, D-SAGE, résultats d'audit, erratum CV, divers) + <strong>1 résultat substantiel</strong> (facteur 2 dans la dérivée V, théorème <code>V_derivative_ne_RG_beta</code>). Source : <a href=\"https://github.com/karlesmarin/lean-taf\" target=\"_blank\">github.com/karlesmarin/lean-taf</a> (commit 25c77fd). Re-vérifier localement : <code>git clone --depth=1 https://github.com/karlesmarin/lean-taf && cd lean-taf && lake exe cache get && lake env lean Taf/Identities.lean</code>. La pill 🧲 Anti-Ising du hero et la section Vérification renvoient à des lignes sources spécifiques.",
|
| 883 |
+
"help.v06.glossary.title": "Glossaire des variables (également intégré dans la TAF Card)",
|
| 884 |
+
"help.v06.glossary.body": "Chaque variable de la TAF Card a un tooltip ⓘ inline. Liste complète : γ, γ_Padé, γ_décomposé, γ_observé, θ, θ_eff_obs, θ_eff_Padé, η, ΔH_Cardy, χ, d_horizon, L_NIAH, mémoire KV, régime. Survolez n'importe quel ⓘ pour la définition + section du paper.",
|
| 885 |
+
|
| 886 |
"hero.title": "🔬 TAF Agent",
|
| 887 |
"hero.tagline": "Testez <strong>N'IMPORTE QUEL</strong> LLM transformer avant de dépenser du GPU/€.",
|
| 888 |
"hero.subtitle": "Tout le calcul s'exécute localement dans votre navigateur. Gratuit. Illimité. Auditable.",
|
|
|
|
| 993 |
"falsification.col.evidence": "Preuve",
|
| 994 |
|
| 995 |
"tafcard.title": "📇 TAF Card — profil complet du modèle",
|
| 996 |
+
"tafcard.recipes_title": "📋 Recettes — verdict par dimension",
|
| 997 |
+
"tafcard.recipes_count_label": "dimensions",
|
| 998 |
"tafcard.numbers_title": "🔢 Nombres clés (paper §26)",
|
| 999 |
+
"tafcard.fals_title": "🔬 État de falsification (F1-F23)",
|
| 1000 |
+
"tafcard.fals_none": "Aucune falsification applicable.",
|
| 1001 |
+
"tafcard.diag_title": "🔬 Diagnostics — nombres · contrôle γ · what-if",
|
| 1002 |
+
"tafcard.verify_title": "✓ Vérification — Lean + Sage + falsification",
|
| 1003 |
+
"tafcard.share_title": "📂 Provenance & partage",
|
| 1004 |
+
"tafcard.whatif_title": "🎚️ Explorateur what-if",
|
| 1005 |
+
"verdict.go": "GO",
|
| 1006 |
+
"verdict.no": "NON",
|
| 1007 |
+
"verdict.degraded": "DÉGRADÉ",
|
| 1008 |
|
| 1009 |
"compare.title_out": "🆚 Tableau comparatif",
|
| 1010 |
|
|
|
|
| 1028 |
"param.T_train.tip": "<strong>Contexte max d'entraînement</strong>. De <code>max_position_embeddings</code>. Au-delà c'est de l'extrapolation.",
|
| 1029 |
"param.T_eval": "T_eval (votre cible)",
|
| 1030 |
"param.T_eval.tip": "<strong>Votre contexte d'inférence cible</strong>. La question clé : le modèle se comportera-t-il bien à CETTE longueur ?",
|
| 1031 |
+
"param.n_attn": "n_attention_heads",
|
| 1032 |
+
"param.n_attn.tip": "<strong>Nombre d'attention heads</strong> par couche. De <code>num_attention_heads</code>.",
|
| 1033 |
+
"param.n_kv": "n_kv_heads",
|
| 1034 |
+
"param.n_kv.tip": "<strong>KV heads</strong>. Si < n_attention_heads → GQA (Grouped Query Attention). Réduit la mémoire KV mais pousse γ vers Hagedorn.",
|
| 1035 |
"param.d_head": "head_dim",
|
| 1036 |
+
"param.d_head.tip": "<strong>Dimension par head</strong>. Typique 64, 96, 128. De <code>head_dim</code> ou <code>hidden_size / num_attention_heads</code>.",
|
| 1037 |
+
"param.n_layers": "n_layers",
|
| 1038 |
+
"param.n_layers.tip": "<strong>Nombre de blocs transformer</strong>. De <code>num_hidden_layers</code>.",
|
| 1039 |
"param.n_params": "n_params (ex. 8e9)",
|
| 1040 |
+
"param.n_params.tip": "<strong>Nombre total de paramètres</strong>. Seuil ~400M pour l'émergence d'induction heads. Affecte la mémoire KV et les recettes de budget.",
|
| 1041 |
"param.has_swa": "A SWA ?",
|
| 1042 |
+
"param.has_swa.tip": "<strong>Sliding Window Attention</strong>. <code>true</code> pour Mistral, gemma-2, phi-3. L'audit de calibration v0.5.3 a désactivé la correction historique δ_SWA (ajustement n=1).",
|
| 1043 |
"common.yes": "Oui",
|
| 1044 |
"common.no": "Non",
|
| 1045 |
|
|
|
|
| 1165 |
"v053.calibration.note": "<strong>SWA 修正已禁用</strong> — 原 δ_SWA = -0.21 基于 n=1 模型拟合(数据不足;唯一案例的均值为 +0.355)。<strong>post_IH 修正标记为探索性</strong> — 重审中组均值 ≈ 0(n=22 面板)未能复现 OLS 拟合。<strong>GQA 修正可复现</strong>(面板 +0.115 vs 硬编码 +0.11)。<strong>D_f 公式修正 Phase B (γ>1)</strong> — 使用离散累积和代替连续近似。LLaMA-3、Mistral、Gemma 现在报告正确的压缩值。",
|
| 1166 |
"v053.release.banner": "🔧 v0.5.3 — 审计驱动的修复:KV 压缩 D_f 现使用离散和(适用于所有 γ);δ_SWA 禁用(n=1 校准);论文 §5.2 C_V 系数勘误 (1/4 → 1/12)。",
|
| 1167 |
|
| 1168 |
+
// §35 v0.6 — γ 预测 vs 观测 诊断
|
| 1169 |
+
"gamma_check.title": "🔍 γ 预测 vs 观测",
|
| 1170 |
+
"gamma_check.desc": "输入你经验测量的 γ。工具自动检测体制:欺诈 (θ 虚高) / 压缩 / 超 Padé / SWA-随机 / 正常。",
|
| 1171 |
+
"gamma_check.gobs_label": "γ_观测",
|
| 1172 |
+
"gamma_check.gobs_tip": "从模型注意力分数经验测量的 γ。使用 Diagnose CLI 从真实权重获取。",
|
| 1173 |
+
"gamma_check.random_label": "随机语料?",
|
| 1174 |
+
"gamma_check.random_tip": "若 γ_观测在随机/无结构 token 上测得请勾选。区分 SWA 签名 (γ_obs > 1) 与异常。",
|
| 1175 |
+
"gamma_check.regime": "体制",
|
| 1176 |
+
"gamma_check.regime.normal": "正常",
|
| 1177 |
+
"gamma_check.regime.fraud": "欺诈 (θ 虚高)",
|
| 1178 |
+
"gamma_check.regime.compressed": "上下文压缩",
|
| 1179 |
+
"gamma_check.regime.overpade": "超 Padé",
|
| 1180 |
+
"gamma_check.regime.swa": "SWA 签名 (随机语料)",
|
| 1181 |
+
"gamma_check.regime.unknown": "未知",
|
| 1182 |
+
"gamma_check.regime.normal.desc": "η ∈ [0.85, 1.15]:模型完全利用名义上下文,无异常。",
|
| 1183 |
+
"gamma_check.regime.fraud.desc": "η < 0.01:名义 θ 虚高。模型表现如同 θ 远小于宣称值。可能是 YaRN/营销虚标,无真实上下文扩展。",
|
| 1184 |
+
"gamma_check.regime.compressed.desc":"η ∈ [0.01, 0.5):上下文压缩 (模型注意距离比名义 θ 预测更短)。常见于 instruction-tuned / RLHF 模型。",
|
| 1185 |
+
"gamma_check.regime.overpade.desc": "η > 1.5:模型注意距离超过 Padé 预测。可能是 Lerch 修正体制或欠训练早期 checkpoint。",
|
| 1186 |
+
"gamma_check.regime.swa.desc": "随机语料上 γ_obs > 1.05 = 滑动窗口注意力签名 (Mistral / Gemma 系列)。",
|
| 1187 |
+
"gamma_check.regime.unknown.desc": "输入超范围或 γ_obs > 1 但未标记随机语料。请核验测量。",
|
| 1188 |
+
"gamma_check.glossary.title": "ⓘ 词汇表 — 变量含义",
|
| 1189 |
+
"gamma_check.glossary.gamma_pade": "<strong>γ_Padé</strong>:闭式预测 (2−z)/(2+z), z = T√2/θ。论文 §sec:gamma_decomposition。",
|
| 1190 |
+
"gamma_check.glossary.gamma_obs": "<strong>γ_观测</strong>:从注意力分数经验测得 (在真实权重上运行 Diagnose CLI)。",
|
| 1191 |
+
"gamma_check.glossary.theta_eff_obs":"<strong>θ_eff (观测)</strong>:由 γ_obs 反演 T√2 / (1 − γ_obs)。测量隐含的有效 θ。",
|
| 1192 |
+
"gamma_check.glossary.theta_eff_pade":"<strong>θ_eff (Padé)</strong>:θ + T/√2。闭式公式预测的有效 θ。",
|
| 1193 |
+
"gamma_check.glossary.efficiency": "<strong>η</strong>:θ_eff_obs / θ_eff_Padé 比值。≈1 = 正常 · <0.01 = 欺诈 · <0.5 = 压缩 · >1.5 = 超 Padé。",
|
| 1194 |
+
"gamma_check.glossary.delta_h": "<strong>ΔH_Cardy</strong>:log(θ_eff_obs / θ_nominal)。Cardy 熵变。负值 = 压缩熵。~0 = 与名义匹配。",
|
| 1195 |
+
"gamma_check.glossary.regime": "<strong>体制</strong>:基于 η + γ_obs + 随机语料标志的自动分类器。",
|
| 1196 |
+
|
| 1197 |
+
// §36 v0.6 — 内联 ⓘ 图标提示
|
| 1198 |
+
"tooltip.gamma_pade": "<strong>γ_Padé(T_eval)</strong>:闭式预测 (2−z)/(2+z), z = T√2/θ。论文 §sec:gamma_decomposition。",
|
| 1199 |
+
"tooltip.gamma_decomposed": "<strong>γ_分解</strong>:基于完整架构分解的 γ。Padé 基线 + GQA 偏移 + post-IH 偏移 (校准审计已复制子集)。",
|
| 1200 |
+
"tooltip.d_horizon": "<strong>d_horizon</strong>:有效注意力视野。超过此位置分数低于噪声底 (论文 §26)。",
|
| 1201 |
+
"tooltip.L_NIAH": "<strong>L_NIAH 上限</strong>:当前 d_horizon 下针-在-干草堆检索可靠性的预测上限。",
|
| 1202 |
+
"tooltip.chi": "<strong>χ 易感性</strong>:χ = 1/(1−γ)。在 Hagedorn 线 γ=1 处发散。",
|
| 1203 |
+
"tooltip.kv_memory": "<strong>KV 内存 @ T_eval (BF16)</strong>:每请求 KV 缓存 = 2 · n_layers · n_kv_heads · d_head · T_eval 字节。",
|
| 1204 |
+
"tooltip.theta_eff_obs": "<strong>θ_eff (观测)</strong>:由 γ_观测 隐含的有效 θ:T√2 / (1 − γ_obs)。",
|
| 1205 |
+
"tooltip.theta_eff_pade": "<strong>θ_eff (Padé)</strong>:闭式公式预测的有效 θ:θ + T/√2。",
|
| 1206 |
+
"tooltip.efficiency": "<strong>η = θ_eff_obs / θ_eff_Padé</strong>:效率比。≈1 = 正常 · <0.01 = 欺诈 · <0.5 = 压缩 · >1.5 = 超 Padé。",
|
| 1207 |
+
"tooltip.delta_h_cardy": "<strong>ΔH_Cardy</strong>:log(θ_eff_obs / θ_nominal)。Cardy 熵变。负值 = 压缩熵。~0 = 与名义匹配。",
|
| 1208 |
+
"tooltip.verdict_aggregate": "<strong>判定</strong>:所有配方中最差。✅ 通过 = 全绿 · ⚠ 降级 = ≥1 黄 · ❌ 否 = ≥1 红。",
|
| 1209 |
+
"tooltip.verdict_breakdown": "<strong>各配方分解</strong>:每个配方测试一个<em>独立</em>的决策轴 (长上下文 · 预算 · 硬件 · 自训 vs API · KV 压缩)。X-1 上的 ❌ 表示「按你的量级用 API」而非「模型失败」——展开 Recipes 节查看各轴上下文。",
|
| 1210 |
+
"tooltip.gamma_pill": "<strong>γ 头条</strong>:γ_分解 (或 γ_Padé 回退)。范围 (0,1) = 相位 A (反伊辛)。γ ≥ 1 = Hagedorn / 相位 B。",
|
| 1211 |
+
"tooltip.anti_ising": "<strong>反伊辛类</strong>:相位 A → β = γ−1 < 0。机器证明 (Sage + Lean Mathlib4)。见 §35 v0.5。",
|
| 1212 |
+
|
| 1213 |
+
// §37 v0.6 — Lean+Mathlib 定理表
|
| 1214 |
+
"lean.table.title": "📑 Lean+Mathlib 定理表",
|
| 1215 |
+
"lean.table.desc": "下方每一项都已机器证明对 Lean 4 + Mathlib4。点击任意 L# 链接跳转到 GitHub 源码行。按主题分组——点击标题展开。",
|
| 1216 |
+
"lean.table.theorem": "定理",
|
| 1217 |
+
"lean.table.claim": "陈述",
|
| 1218 |
+
"lean.table.tactic": "策略",
|
| 1219 |
+
"lean.table.source": "出处",
|
| 1220 |
+
"lean.table.lean": "Lean",
|
| 1221 |
+
"lean.findings.title": "🔎 实质性发现",
|
| 1222 |
+
"lean.findings.detected_by": "检测于",
|
| 1223 |
+
"lean.findings.fixed_by": "修正于",
|
| 1224 |
+
"lean.findings.recommendation":"建议",
|
| 1225 |
+
"lean.meta.repo": "仓库",
|
| 1226 |
+
"lean.meta.build": "构建",
|
| 1227 |
+
"lean.meta.theorems": "定理",
|
| 1228 |
+
"lean.meta.verified": "已验证",
|
| 1229 |
+
"lean.meta.rejected": "已拒绝",
|
| 1230 |
+
"lean.meta.sorry": "sorry",
|
| 1231 |
+
"lean.meta.findings": "项实质性发现",
|
| 1232 |
+
"lean.manifest.loading": "正在加载 Lean 清单…",
|
| 1233 |
+
"lean.manifest.error": "Lean 清单不可用",
|
| 1234 |
+
|
| 1235 |
+
// 帮助弹窗 — v0.6 节
|
| 1236 |
+
"help.v06.title": "🆕 v0.6 — γ 预测-vs-观测 + Cardy ΔH + Lean 徽章",
|
| 1237 |
+
"help.v06.intro": "<em>v0.6 (2026-05-06):三个新诊断位于 TAF 卡的 <strong>🔬 诊断</strong> 下。全部在浏览器运行;γ_观测来自在真实权重上运行 Diagnose CLI。</em>",
|
| 1238 |
+
"help.v06.layout.title": "TAF 卡布局 (v0.6 新增)",
|
| 1239 |
+
"help.v06.layout.body": "点击 <strong>🚀 生成完整画像</strong> 后,卡片展示:顶部一条 <strong>hero 条</strong> (架构类 + 元信息 + 3 个 pill:聚合判定 ✅/⚠/❌、γ 头条、🧲 反伊辛若处于相位 A) 和四个 <strong>可展开节</strong>:<strong>📋 配方</strong> (默认展开 — 各维度判定)、<strong>🔬 诊断</strong> (关键数字、γ 预测 vs 观测、what-if 浏览器)、<strong>✓ 验证</strong> (Sage+Lean 代数一致性、可证伪 F1-F23)、<strong>📂 来源与分享</strong> (校准审计 + JSON 下载 / 链接 / 注册表提交)。点击任意标题展开。每个变量都有内联 <strong>ⓘ</strong> 提示。",
|
| 1240 |
+
"help.v06.gamma_check.title": "γ 预测 vs 观测",
|
| 1241 |
+
"help.v06.gamma_check.body": "输入经验测量的 γ,工具计算 <strong>η = θ_eff_obs / θ_eff_Padé</strong> 并分类到 5 种体制之一:",
|
| 1242 |
+
"help.v06.case.normal": "<strong>正常</strong> (η ∈ [0.85, 1.15]) — 模型完整使用名义上下文。<em>用例</em>:在采用前验证新发布。",
|
| 1243 |
+
"help.v06.case.fraud": "<strong>欺诈</strong> (η < 0.01) — 名义 θ 虚高;模型表现如同 θ ≪ 宣称值。<em>用例</em>:检测 YaRN/营销虚标 (CodeLlama / Mistral-Nemo 模式)。",
|
| 1244 |
+
"help.v06.case.compressed": "<strong>压缩</strong> (η < 0.5) — 上下文压缩;模型注意距离比名义 θ 短。<em>用例</em>:识别 RLHF/指令调优引起的压缩 (LLaMA-2 模式)。",
|
| 1245 |
+
"help.v06.case.overpade": "<strong>超 Padé</strong> (η > 1.5) — 模型注意距离超过 Padé 预测。<em>用例</em>:识别 Lerch 修正体制或欠训练早期 checkpoint (pythia-1b 模式)。",
|
| 1246 |
+
"help.v06.case.swa": "<strong>SWA 随机语料</strong> (γ_obs > 1.05 且 随机语料=是) — 滑动窗口注意力签名。<em>用例</em>:在随机 token 上确认 Mistral / Gemma SWA。",
|
| 1247 |
+
"help.v06.cardy.title": "Cardy ΔH 诊断",
|
| 1248 |
+
"help.v06.cardy.body": "<strong>ΔH_Cardy = log(θ_eff_obs / θ_nominal)</strong>。观测有效 θ 与名义 θ 之间的熵变。强负值 = 压缩熵;接近零 = 与名义匹配。在边界情况下补充 η。",
|
| 1249 |
+
"help.v06.lean.title": "Lean + Mathlib 验证徽章",
|
| 1250 |
+
"help.v06.lean.body": "TAF 恒等式在 Lean Mathlib4 中形式化机器证明:<strong>37 个定理</strong>分布于 7 组(Padé、RG 流、Cayley、D-SAGE、审计发现、CV 勘误、杂项)+ <strong>1 项实质性发现</strong>(V 导数 2 倍因子,定理 <code>V_derivative_ne_RG_beta</code>)。源:<a href=\"https://github.com/karlesmarin/lean-taf\" target=\"_blank\">github.com/karlesmarin/lean-taf</a>(commit 25c77fd)。本地重新验证:<code>git clone --depth=1 https://github.com/karlesmarin/lean-taf && cd lean-taf && lake exe cache get && lake env lean Taf/Identities.lean</code>。Hero 中的 🧲 反伊辛 pill 与验证手风琴链接到具体源码行。",
|
| 1251 |
+
"help.v06.glossary.title": "变量词汇表 (亦嵌入 TAF 卡)",
|
| 1252 |
+
"help.v06.glossary.body": "TAF 卡中每个变量都有内联 ⓘ 提示。完整列表:γ、γ_Padé、γ_分解、γ_观测、θ、θ_eff_obs、θ_eff_Padé、η、ΔH_Cardy、χ、d_horizon、L_NIAH、KV 内存、体制。鼠标悬停任意 ⓘ 查看定义 + 论文章节。",
|
| 1253 |
+
|
| 1254 |
"hero.title": "🔬 TAF Agent",
|
| 1255 |
"hero.tagline": "在花费 GPU/$ 之前,测试<strong>任意</strong> Transformer LLM。",
|
| 1256 |
"hero.subtitle": "所有计算在您的浏览器本地运行。免费。无限制。可审计。",
|
|
|
|
| 1361 |
"falsification.col.evidence": "证据",
|
| 1362 |
|
| 1363 |
"tafcard.title": "📇 TAF 卡 — 完整模型画像",
|
| 1364 |
+
"tafcard.recipes_title": "📋 配方 — 各维度判定",
|
| 1365 |
+
"tafcard.recipes_count_label": "维度",
|
| 1366 |
"tafcard.numbers_title": "🔢 关键数字 (paper §26)",
|
| 1367 |
+
"tafcard.fals_title": "🔬 可证伪状态 (F1-F23)",
|
| 1368 |
+
"tafcard.fals_none": "无适用的可证伪。",
|
| 1369 |
+
"tafcard.diag_title": "🔬 诊断 — 数字 · γ 检验 · what-if",
|
| 1370 |
+
"tafcard.verify_title": "✓ 验证 — Lean + Sage + 可证伪",
|
| 1371 |
+
"tafcard.share_title": "📂 来源与分享",
|
| 1372 |
+
"tafcard.whatif_title": "🎚️ What-if 浏览器",
|
| 1373 |
+
"verdict.go": "通过",
|
| 1374 |
+
"verdict.no": "否",
|
| 1375 |
+
"verdict.degraded": "降级",
|
| 1376 |
|
| 1377 |
"compare.title_out": "🆚 比较表",
|
| 1378 |
|
|
|
|
| 1396 |
"param.T_train.tip": "<strong>训练最大上下文</strong>。来自 <code>max_position_embeddings</code>。超出此范围属于外推。",
|
| 1397 |
"param.T_eval": "T_eval (您的目标)",
|
| 1398 |
"param.T_eval.tip": "<strong>您的目标推理上下文</strong>。关键问题: 模型在 <em>这个</em> 长度下表现是否良好?",
|
| 1399 |
+
"param.n_attn": "n_attention_heads",
|
| 1400 |
+
"param.n_attn.tip": "<strong>每层 attention heads 数</strong>。来自 <code>num_attention_heads</code>。",
|
| 1401 |
+
"param.n_kv": "n_kv_heads",
|
| 1402 |
+
"param.n_kv.tip": "<strong>KV heads</strong>。若 < n_attention_heads → GQA (Grouped Query Attention)。降低 KV 内存但将 γ 推向 Hagedorn。",
|
| 1403 |
"param.d_head": "head_dim",
|
| 1404 |
+
"param.d_head.tip": "<strong>每 head 维度</strong>。典型 64、96、128。来自 <code>head_dim</code> 或 <code>hidden_size / num_attention_heads</code>。",
|
| 1405 |
+
"param.n_layers": "n_layers",
|
| 1406 |
+
"param.n_layers.tip": "<strong>Transformer 块数</strong>。来自 <code>num_hidden_layers</code>。",
|
| 1407 |
"param.n_params": "n_params (例如 8e9)",
|
| 1408 |
+
"param.n_params.tip": "<strong>总参数量</strong>。约 400M 阈值出现 induction heads。影响 KV 内存和预算配方。",
|
| 1409 |
"param.has_swa": "有 SWA 吗?",
|
| 1410 |
+
"param.has_swa.tip": "<strong>Sliding Window Attention</strong>。Mistral、gemma-2、phi-3 为 <code>true</code>。v0.5.3 校准审计禁用了历史 δ_SWA 校正 (n=1 拟合)。",
|
| 1411 |
"common.yes": "是",
|
| 1412 |
"common.no": "否",
|
| 1413 |
|
|
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Lean+Mathlib provenance — loads `data/lean_status.json`, exposes per-theorem
|
| 2 |
+
// badge HTML + a grouped table renderer for the Verification accordion.
|
| 3 |
+
// Pure browser-only: just fetches a static JSON manifest.
|
| 4 |
+
|
| 5 |
+
let _manifest = null;
|
| 6 |
+
let _byName = null;
|
| 7 |
+
|
| 8 |
+
export async function loadLeanManifest(url = "data/lean_status.json") {
|
| 9 |
+
if (_manifest) return _manifest;
|
| 10 |
+
const res = await fetch(url, { cache: "default" });
|
| 11 |
+
if (!res.ok) throw new Error(`lean manifest fetch failed: ${res.status}`);
|
| 12 |
+
_manifest = await res.json();
|
| 13 |
+
_byName = {};
|
| 14 |
+
for (const g of _manifest.groups) {
|
| 15 |
+
for (const t of g.theorems) {
|
| 16 |
+
t._group = g.id;
|
| 17 |
+
t._url = sourceUrl(_manifest, t);
|
| 18 |
+
_byName[t.name] = t;
|
| 19 |
+
}
|
| 20 |
+
}
|
| 21 |
+
return _manifest;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
export function getManifest() { return _manifest; }
|
| 25 |
+
export function getTheorem(name) { return _byName ? _byName[name] : null; }
|
| 26 |
+
|
| 27 |
+
export function sourceUrl(manifest, theorem) {
|
| 28 |
+
const repo = manifest.lean_repo;
|
| 29 |
+
return `${repo.url}/blob/${repo.default_branch}/${theorem.file}#L${theorem.line}`;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
const escapeHtml = (s) => String(s ?? "").replace(/[&<>"]/g, c => ({"&":"&","<":"<",">":">",'"':"""}[c]));
|
| 33 |
+
const escapeAttr = (s) => String(s ?? "").replace(/"/g, """);
|
| 34 |
+
|
| 35 |
+
export function badgeHtml(theoremName, label = "✓ Lean ↗") {
|
| 36 |
+
const t = getTheorem(theoremName);
|
| 37 |
+
if (!t) return "";
|
| 38 |
+
return `<a href="${escapeAttr(t._url)}" target="_blank" rel="noopener" class="lean-badge" title="Lean theorem: ${escapeAttr(t.name)} — ${escapeAttr(t.claim)} (tactic: ${escapeAttr(t.tactic || "")})">${escapeHtml(label)}</a>`;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
export function badgesForUiBinding(bindingKey) {
|
| 42 |
+
// Returns concatenated badges for a UI binding (single string or array of names).
|
| 43 |
+
const manifest = getManifest();
|
| 44 |
+
if (!manifest || !manifest.ui_bindings) return "";
|
| 45 |
+
const binding = manifest.ui_bindings[bindingKey];
|
| 46 |
+
if (!binding) return "";
|
| 47 |
+
const names = Array.isArray(binding) ? binding : [binding];
|
| 48 |
+
return names.map(n => badgeHtml(n, "✓ Lean")).filter(Boolean).join(" ");
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
export function renderTheoremTable() {
|
| 52 |
+
const manifest = getManifest();
|
| 53 |
+
if (!manifest) return "<div class='subtle'>Lean manifest not loaded.</div>";
|
| 54 |
+
|
| 55 |
+
const repo = manifest.lean_repo;
|
| 56 |
+
const headerHtml = `
|
| 57 |
+
<div class="lean-meta">
|
| 58 |
+
<div><strong data-i18n="lean.meta.repo">Repo</strong>: <a href="${escapeAttr(repo.url)}" target="_blank">${escapeHtml(repo.name)}</a> @ <code>${escapeHtml(repo.commit_short)}</code></div>
|
| 59 |
+
<div class="subtle"><strong data-i18n="lean.meta.build">Build</strong>: ${repo.build_jobs} jobs · ${escapeHtml(repo.lean_toolchain)} · ${repo.compile_time_seconds}s compile (warm)</div>
|
| 60 |
+
<div class="subtle"><strong data-i18n="lean.meta.theorems">Theorems</strong>: ${manifest.summary.theorems_total} <span data-i18n="lean.meta.verified">verified</span> · ${manifest.summary.lean_rejected} <span data-i18n="lean.meta.rejected">rejected</span> · ${manifest.summary.skipped_sorry} <span data-i18n="lean.meta.sorry">sorry</span> · ${manifest.summary.substantive_findings} <span data-i18n="lean.meta.findings">substantive findings</span></div>
|
| 61 |
+
</div>`;
|
| 62 |
+
|
| 63 |
+
const findingsHtml = (manifest.findings && manifest.findings.length)
|
| 64 |
+
? `<details class="lean-findings" open>
|
| 65 |
+
<summary><strong data-i18n="lean.findings.title">🔎 Substantive findings</strong> (${manifest.findings.length})</summary>
|
| 66 |
+
${manifest.findings.map(f => `
|
| 67 |
+
<div class="lean-finding">
|
| 68 |
+
<div><strong>${escapeHtml(f.id)} — ${escapeHtml(f.title)}</strong>
|
| 69 |
+
<span class="lean-pill ${f.severity === "substantive" ? "v-deg" : ""}">${escapeHtml(f.severity)}</span></div>
|
| 70 |
+
<div class="subtle" style="margin-top:0.3em;">${escapeHtml(f.summary)}</div>
|
| 71 |
+
<div style="margin-top:0.3em;">
|
| 72 |
+
<span class="subtle"><span data-i18n="lean.findings.detected_by">Detected by</span>:</span> ${badgeHtml(f.detected_by, f.detected_by + " ↗")}
|
| 73 |
+
${f.fixed_by && f.fixed_by.length ? ` · <span class="subtle"><span data-i18n="lean.findings.fixed_by">Fixed by</span>:</span> ${f.fixed_by.map(n => badgeHtml(n, n + " ↗")).join(" ")}` : ""}
|
| 74 |
+
</div>
|
| 75 |
+
<div class="subtle" style="margin-top:0.3em;"><strong data-i18n="lean.findings.recommendation">Recommendation</strong>: ${escapeHtml(f.recommendation)}</div>
|
| 76 |
+
</div>
|
| 77 |
+
`).join("")}
|
| 78 |
+
</details>`
|
| 79 |
+
: "";
|
| 80 |
+
|
| 81 |
+
const groupsHtml = manifest.groups.map(g => `
|
| 82 |
+
<details class="lean-group">
|
| 83 |
+
<summary><strong>${escapeHtml(g.title)}</strong> <span class="subtle">(${g.theorems.length})</span></summary>
|
| 84 |
+
<div class="lean-table-wrap">
|
| 85 |
+
<table class="lean-table">
|
| 86 |
+
<thead>
|
| 87 |
+
<tr>
|
| 88 |
+
<th data-i18n="lean.table.theorem">Theorem</th>
|
| 89 |
+
<th data-i18n="lean.table.claim">Claim</th>
|
| 90 |
+
<th data-i18n="lean.table.tactic">Tactic</th>
|
| 91 |
+
<th data-i18n="lean.table.source">Source</th>
|
| 92 |
+
<th data-i18n="lean.table.lean">Lean</th>
|
| 93 |
+
</tr>
|
| 94 |
+
</thead>
|
| 95 |
+
<tbody>
|
| 96 |
+
${g.theorems.map(t => `
|
| 97 |
+
<tr>
|
| 98 |
+
<td><code>${escapeHtml(t.name)}</code></td>
|
| 99 |
+
<td>${escapeHtml(t.claim)}</td>
|
| 100 |
+
<td><code class="subtle">${escapeHtml(t.tactic || "")}</code></td>
|
| 101 |
+
<td class="subtle">${t.source ? renderSource(t.source) : "—"}</td>
|
| 102 |
+
<td>${badgeHtml(t.name, "L" + t.line + " ↗")}</td>
|
| 103 |
+
</tr>`).join("")}
|
| 104 |
+
</tbody>
|
| 105 |
+
</table>
|
| 106 |
+
</div>
|
| 107 |
+
</details>`).join("");
|
| 108 |
+
|
| 109 |
+
return `${headerHtml}${findingsHtml}<div class="lean-groups">${groupsHtml}</div>`;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
function renderSource(src) {
|
| 113 |
+
const parts = [];
|
| 114 |
+
if (src.doc) parts.push(`<code>${escapeHtml(src.doc)}</code>`);
|
| 115 |
+
if (src.section) parts.push(escapeHtml(src.section));
|
| 116 |
+
if (src.line) parts.push(`L${src.line}`);
|
| 117 |
+
if (src.label) parts.push(`<em>${escapeHtml(src.label)}</em>`);
|
| 118 |
+
return parts.join(" · ");
|
| 119 |
+
}
|
|
@@ -9,6 +9,8 @@
|
|
| 9 |
|
| 10 |
import { initI18n, setLang, t } from "./i18n.js";
|
| 11 |
import { initPhaseDiagram } from "./phase_diagram.js";
|
|
|
|
|
|
|
| 12 |
|
| 13 |
const TAF_BROWSER_URL = "python/taf_browser.py";
|
| 14 |
const ENABLE_WEBLLM = true;
|
|
@@ -1087,75 +1089,173 @@ function renderProfile(p, params) {
|
|
| 1087 |
</div>
|
| 1088 |
`).join("");
|
| 1089 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1090 |
const numbersHtml = `
|
| 1091 |
-
<div class="num-row"><span class="num-label">γ_Padé(T_eval)</span><span class="num-value">${formatN(kn.gamma_pade)}</span></div>
|
| 1092 |
-
<div class="num-row"><span class="num-label">γ_decomposed</span><span class="num-value">${formatN(kn.gamma_decomposed)}</span></div>
|
| 1093 |
-
<div class="num-row"><span class="num-label">d_horizon</span><span class="num-value">${formatN(kn.d_horizon)}</span></div>
|
| 1094 |
-
<div class="num-row"><span class="num-label">L_NIAH ceiling</span><span class="num-value">${formatN(kn.L_NIAH_ceiling)}</span></div>
|
| 1095 |
-
<div class="num-row"><span class="num-label">χ susceptibility</span><span class="num-value">${formatN(kn.chi_susceptibility)}</span></div>
|
| 1096 |
-
<div class="num-row"><span class="num-label">KV memory @ T_eval (BF16)</span><span class="num-value">${formatN(kn.kv_memory_per_request_GB)} GB</span></div>
|
| 1097 |
`;
|
| 1098 |
|
| 1099 |
const falsHtml = (p.falsification_status || []).map(f =>
|
| 1100 |
`<div class="taf-falsification"><strong>${escapeHtml(f.id)}</strong> — ${escapeHtml(f.claim)}: ${escapeHtml(f.status)}</div>`
|
| 1101 |
).join("");
|
| 1102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1103 |
$("profile-box").innerHTML = `
|
| 1104 |
<div class="taf-card">
|
| 1105 |
-
<div class="taf-
|
| 1106 |
-
<div
|
| 1107 |
-
<div class="
|
| 1108 |
n_params=${formatN(ms.n_params)} ·
|
| 1109 |
T_train=${ms.T_train} · T_eval=${ms.T_eval} ·
|
| 1110 |
θ=${formatN(ms.rope_theta)} ·
|
| 1111 |
${ms.has_GQA ? "GQA" : "MHA"}${ms.has_SWA ? " + SWA" : ""}
|
| 1112 |
</div>
|
| 1113 |
-
|
| 1114 |
-
|
| 1115 |
-
|
| 1116 |
-
</
|
| 1117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1118 |
</div>
|
| 1119 |
|
| 1120 |
-
<
|
| 1121 |
-
|
| 1122 |
-
|
| 1123 |
-
|
| 1124 |
-
|
| 1125 |
-
|
| 1126 |
-
|
| 1127 |
-
<
|
| 1128 |
-
<div style="margin-top:0.5em; line-height:1.45;" data-i18n="v053.calibration.note"></div>
|
| 1129 |
</details>
|
| 1130 |
|
| 1131 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1132 |
|
| 1133 |
-
<
|
| 1134 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1135 |
|
| 1136 |
-
<
|
| 1137 |
-
|
| 1138 |
-
|
| 1139 |
-
|
| 1140 |
-
|
| 1141 |
-
|
| 1142 |
-
|
| 1143 |
-
|
| 1144 |
-
|
| 1145 |
-
|
| 1146 |
-
|
| 1147 |
-
|
| 1148 |
-
|
| 1149 |
-
|
| 1150 |
-
|
| 1151 |
-
|
| 1152 |
-
|
|
|
|
| 1153 |
</div>
|
| 1154 |
`;
|
| 1155 |
|
| 1156 |
// Render the what-if slider for interactive exploration
|
| 1157 |
renderWhatIfSlider(p, params, $("whatif-container"));
|
| 1158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1159 |
// Re-apply translations to dynamically inserted buttons
|
| 1160 |
if (window.__taf_applyTranslations) window.__taf_applyTranslations();
|
| 1161 |
|
|
@@ -1175,6 +1275,49 @@ function renderProfile(p, params) {
|
|
| 1175 |
setTimeout(() => $("profile-share-status").textContent = "", 6000);
|
| 1176 |
});
|
| 1177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1178 |
// v0.5.1: Algebraic consistency check button
|
| 1179 |
$("verify-consistency-btn").addEventListener("click", () => {
|
| 1180 |
const gammaVal = kn.gamma_decomposed ?? kn.gamma_pade;
|
|
@@ -1667,6 +1810,9 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
| 1667 |
if (file) importJSON(file, document.getElementById("import-status"));
|
| 1668 |
});
|
| 1669 |
}
|
|
|
|
|
|
|
|
|
|
| 1670 |
});
|
| 1671 |
|
| 1672 |
// ════════════════════════════════════════════════════════════════════
|
|
|
|
| 9 |
|
| 10 |
import { initI18n, setLang, t } from "./i18n.js";
|
| 11 |
import { initPhaseDiagram } from "./phase_diagram.js";
|
| 12 |
+
import { gammaCheckAll, REGIME_META } from "./gamma_check.js";
|
| 13 |
+
import { loadLeanManifest, badgeHtml, badgesForUiBinding, renderTheoremTable, getManifest } from "./lean_badges.js";
|
| 14 |
|
| 15 |
const TAF_BROWSER_URL = "python/taf_browser.py";
|
| 16 |
const ENABLE_WEBLLM = true;
|
|
|
|
| 1089 |
</div>
|
| 1090 |
`).join("");
|
| 1091 |
|
| 1092 |
+
// Reusable tooltip helper — keeps tooltip pattern uniform across the card
|
| 1093 |
+
const ttip = (key, fallback) =>
|
| 1094 |
+
`<span class="info"><span class="tooltip" data-i18n="${key}">${fallback}</span></span>`;
|
| 1095 |
+
|
| 1096 |
const numbersHtml = `
|
| 1097 |
+
<div class="num-row"><span class="num-label">γ_Padé(T_eval) ${ttip("tooltip.gamma_pade", "Closed-form prediction (2−z)/(2+z), z = T√2/θ. Paper §sec:gamma_decomposition.")}</span><span class="num-value">${formatN(kn.gamma_pade)}</span></div>
|
| 1098 |
+
<div class="num-row"><span class="num-label">γ_decomposed ${ttip("tooltip.gamma_decomposed", "γ from full architectural decomposition: Padé baseline + GQA shift + SWA shift + post-IH shift.")}</span><span class="num-value">${formatN(kn.gamma_decomposed)}</span></div>
|
| 1099 |
+
<div class="num-row"><span class="num-label">d_horizon ${ttip("tooltip.d_horizon", "Effective attention horizon at T_eval. Beyond this, attention scores fall below the noise floor (paper §26).")}</span><span class="num-value">${formatN(kn.d_horizon)}</span></div>
|
| 1100 |
+
<div class="num-row"><span class="num-label">L_NIAH ceiling ${ttip("tooltip.L_NIAH", "Predicted ceiling for needle-in-a-haystack retrieval reliability at the current d_horizon.")}</span><span class="num-value">${formatN(kn.L_NIAH_ceiling)}</span></div>
|
| 1101 |
+
<div class="num-row"><span class="num-label">χ susceptibility ${ttip("tooltip.chi", "Susceptibility exponent χ = 1/(1−γ). Diverges at the Hagedorn line γ=1.")}</span><span class="num-value">${formatN(kn.chi_susceptibility)}</span></div>
|
| 1102 |
+
<div class="num-row"><span class="num-label">KV memory @ T_eval (BF16) ${ttip("tooltip.kv_memory", "Per-request KV cache memory at T_eval in BF16 = 2 · n_layers · n_kv_heads · d_head · T_eval bytes.")}</span><span class="num-value">${formatN(kn.kv_memory_per_request_GB)} GB</span></div>
|
| 1103 |
`;
|
| 1104 |
|
| 1105 |
const falsHtml = (p.falsification_status || []).map(f =>
|
| 1106 |
`<div class="taf-falsification"><strong>${escapeHtml(f.id)}</strong> — ${escapeHtml(f.claim)}: ${escapeHtml(f.status)}</div>`
|
| 1107 |
).join("");
|
| 1108 |
|
| 1109 |
+
// Per-verdict count breakdown — recipes test orthogonal axes (long-context,
|
| 1110 |
+
// budget, hardware, custom-vs-API, KV-compression). Worst-of-N would conflate
|
| 1111 |
+
// a "use API" recommendation with a long-context failure, so we show counts.
|
| 1112 |
+
const verdictCounts = Object.values(p.recipes).reduce((acc, r) => {
|
| 1113 |
+
const c = verdictClass(r.verdict);
|
| 1114 |
+
acc[c] = (acc[c] || 0) + 1;
|
| 1115 |
+
return acc;
|
| 1116 |
+
}, {});
|
| 1117 |
+
const nYes = verdictCounts["v-yes"] || 0;
|
| 1118 |
+
const nDeg = verdictCounts["v-deg"] || 0;
|
| 1119 |
+
const nNo = verdictCounts["v-no"] || 0;
|
| 1120 |
+
const breakdownCls = nNo ? "v-no" : nDeg ? "v-deg" : "v-yes";
|
| 1121 |
+
const gammaForPill = kn.gamma_decomposed ?? kn.gamma_pade;
|
| 1122 |
+
const recipeCount = Object.keys(p.recipes).length;
|
| 1123 |
+
|
| 1124 |
$("profile-box").innerHTML = `
|
| 1125 |
<div class="taf-card">
|
| 1126 |
+
<div class="taf-hero">
|
| 1127 |
+
<div class="hero-arch">${escapeHtml(ms.architecture_class)}</div>
|
| 1128 |
+
<div class="hero-meta">
|
| 1129 |
n_params=${formatN(ms.n_params)} ·
|
| 1130 |
T_train=${ms.T_train} · T_eval=${ms.T_eval} ·
|
| 1131 |
θ=${formatN(ms.rope_theta)} ·
|
| 1132 |
${ms.has_GQA ? "GQA" : "MHA"}${ms.has_SWA ? " + SWA" : ""}
|
| 1133 |
</div>
|
| 1134 |
+
<div class="hero-row">
|
| 1135 |
+
<span class="hero-pill ${breakdownCls}">✅ ${nYes} · ⚠ ${nDeg} · ❌ ${nNo} ${ttip("tooltip.verdict_breakdown", "Per-recipe breakdown across the orthogonal axes (long-context, budget, hardware, custom-vs-API, KV-compression). Recipes are independent decisions — a ❌ on X-1 means \"use API\" not \"model fails\". Open the Recipes section for per-axis verdict.")}</span>
|
| 1136 |
+
${gammaForPill !== null && gammaForPill !== undefined
|
| 1137 |
+
? `<span class="hero-pill">γ = ${formatN(gammaForPill)} ${ttip("tooltip.gamma_pill", "γ_decomposed (full architectural decomposition) or γ_Padé as fallback. Range (0,1) = Phase A (anti-Ising). γ ≥ 1 = Hagedorn / Phase B.")}</span>`
|
| 1138 |
+
: ''}
|
| 1139 |
+
${gammaForPill > 0 && gammaForPill < 1
|
| 1140 |
+
? `<span class="hero-pill" style="background:rgba(110,80,200,0.15); border-color:rgba(110,80,200,0.45);"><span data-i18n="v05.antiising.badge">🧲 Anti-Ising (β=γ−1<0, machine-verified)</span> ${ttip("tooltip.anti_ising", "Phase A class: β = γ−1 < 0 (anti-Ising). Machine-verified by Sage Groebner basis + Lean Mathlib4. See §35 v0.5.")} ${badgesForUiBinding("anti_ising_pill")}</span>`
|
| 1141 |
+
: ''}
|
| 1142 |
+
</div>
|
| 1143 |
</div>
|
| 1144 |
|
| 1145 |
+
<details class="taf-section" open>
|
| 1146 |
+
<summary>
|
| 1147 |
+
<span data-i18n="tafcard.recipes_title">📋 Recipes — verdict per dimension</span>
|
| 1148 |
+
<span class="section-count">${recipeCount} ${t("tafcard.recipes_count_label", "dimensions")}</span>
|
| 1149 |
+
</summary>
|
| 1150 |
+
<div class="taf-section-body">
|
| 1151 |
+
<div class="taf-recipes-grid">${recipesHtml}</div>
|
| 1152 |
+
</div>
|
|
|
|
| 1153 |
</details>
|
| 1154 |
|
| 1155 |
+
<details class="taf-section">
|
| 1156 |
+
<summary>
|
| 1157 |
+
<span data-i18n="tafcard.diag_title">🔬 Diagnostics — numbers + γ check + what-if</span>
|
| 1158 |
+
</summary>
|
| 1159 |
+
<div class="taf-section-body">
|
| 1160 |
+
<h4 style="margin-top:0.3em;" data-i18n="tafcard.numbers_title">🔢 Key numbers (paper §26)</h4>
|
| 1161 |
+
<div class="taf-key-numbers">${numbersHtml}</div>
|
| 1162 |
+
|
| 1163 |
+
<h4 style="margin-top:1.2em;" data-i18n="gamma_check.title">🔍 γ predicted vs observed</h4>
|
| 1164 |
+
<div class="recipe-desc" data-i18n="gamma_check.desc">
|
| 1165 |
+
Enter your empirically measured γ. Tool detects regime: fraud (θ inflated) / compressed / over-Padé / SWA-random / normal.
|
| 1166 |
+
</div>
|
| 1167 |
+
<div class="form-grid" style="margin:0.5em 0 0.6em;">
|
| 1168 |
+
<div class="form-field">
|
| 1169 |
+
<label><span data-i18n="gamma_check.gobs_label">γ_observed</span>
|
| 1170 |
+
<span class="info"><span class="tooltip" data-i18n="gamma_check.gobs_tip">Empirically measured γ from your model's attention scores. Use the Diagnose CLI to obtain this from real weights.</span></span>
|
| 1171 |
+
</label>
|
| 1172 |
+
<input type="number" id="gc-gobs" step="0.0001" value="${formatN(kn.gamma_decomposed ?? kn.gamma_pade)}" />
|
| 1173 |
+
</div>
|
| 1174 |
+
<div class="form-field">
|
| 1175 |
+
<label><span data-i18n="gamma_check.random_label">Random corpus?</span>
|
| 1176 |
+
<span class="info"><span class="tooltip" data-i18n="gamma_check.random_tip">Tick if γ_observed was measured on random/unstructured tokens. Distinguishes SWA signature (γ_obs > 1) from anomaly.</span></span>
|
| 1177 |
+
</label>
|
| 1178 |
+
<select id="gc-random">
|
| 1179 |
+
<option value="false" selected data-i18n="common.no">No</option>
|
| 1180 |
+
<option value="true" data-i18n="common.yes">Yes</option>
|
| 1181 |
+
</select>
|
| 1182 |
+
</div>
|
| 1183 |
+
</div>
|
| 1184 |
+
<div id="gamma-check-results"></div>
|
| 1185 |
+
|
| 1186 |
+
<h4 style="margin-top:1.2em;" data-i18n="tafcard.whatif_title">🎚️ What-if explorer</h4>
|
| 1187 |
+
<div id="whatif-container" class="whatif-box"></div>
|
| 1188 |
+
</div>
|
| 1189 |
+
</details>
|
| 1190 |
|
| 1191 |
+
<details class="taf-section">
|
| 1192 |
+
<summary>
|
| 1193 |
+
<span data-i18n="tafcard.verify_title">✓ Verification — Lean + Sage + falsification</span>
|
| 1194 |
+
</summary>
|
| 1195 |
+
<div class="taf-section-body">
|
| 1196 |
+
<h4 style="margin-top:0.3em;" data-i18n="lean.table.title">📑 Lean+Mathlib theorem table</h4>
|
| 1197 |
+
<div style="margin-bottom: 0.6em; opacity: 0.85; font-size: 0.92em;" data-i18n="lean.table.desc">
|
| 1198 |
+
Every entry below is machine-proven against Lean 4 + Mathlib4. Click any L# link to jump to the source line on GitHub. The table is grouped by topic; click a header to expand.
|
| 1199 |
+
</div>
|
| 1200 |
+
<div id="lean-table-host"></div>
|
| 1201 |
+
|
| 1202 |
+
<h4 style="margin-top:1.2em;" data-i18n="v05.consistency.title">🔬 Algebraic consistency (Sage + Lean v0.5)</h4>
|
| 1203 |
+
<div style="margin-bottom: 0.6em; opacity: 0.85; font-size: 0.92em;" data-i18n="v05.consistency.desc">
|
| 1204 |
+
Verifies 12 D-SAGE algebraic identities of TAF critical exponents (machine-proof Sage Groebner basis + Lean Mathlib4). Pass = framework intact. Fail = bf16 outlier / quantization artifact.
|
| 1205 |
+
</div>
|
| 1206 |
+
<div class="lean-badges-row">${badgesForUiBinding("algebraic_consistency_check")}</div>
|
| 1207 |
+
<button class="secondary" id="verify-consistency-btn" data-i18n="v05.consistency.btn">
|
| 1208 |
+
🔬 Verify algebraic consistency
|
| 1209 |
+
</button>
|
| 1210 |
+
<div id="consistency-result" style="margin-top: 0.8em;"></div>
|
| 1211 |
+
|
| 1212 |
+
<h4 style="margin-top:1.2em;" data-i18n="tafcard.fals_title">🔬 Falsification status (F1-F23)</h4>
|
| 1213 |
+
${falsHtml || '<div class="subtle" data-i18n="tafcard.fals_none">No falsifications applicable.</div>'}
|
| 1214 |
+
</div>
|
| 1215 |
+
</details>
|
| 1216 |
|
| 1217 |
+
<details class="taf-section">
|
| 1218 |
+
<summary>
|
| 1219 |
+
<span data-i18n="tafcard.share_title">📂 Provenance & share</span>
|
| 1220 |
+
</summary>
|
| 1221 |
+
<div class="taf-section-body">
|
| 1222 |
+
<details style="margin:0.4em 0 0.8em; padding:0.6em 0.8em; border:1px solid rgba(241,196,15,0.5); border-radius:6px; background:rgba(241,196,15,0.07); font-size:0.88em;">
|
| 1223 |
+
<summary style="cursor:pointer; font-weight:600;" data-i18n="v053.calibration.title">🔬 v0.5.3 — Calibration audit (2026-05-02)</summary>
|
| 1224 |
+
<div style="margin-top:0.5em; line-height:1.45;" data-i18n="v053.calibration.note"></div>
|
| 1225 |
+
</details>
|
| 1226 |
+
|
| 1227 |
+
<div class="share-bar">
|
| 1228 |
+
<button class="secondary" id="profile-share-btn" data-i18n="share.btn">🔗 Copy share link</button>
|
| 1229 |
+
<button class="secondary" id="profile-download-btn" data-i18n="share.download">💾 Download JSON</button>
|
| 1230 |
+
<button class="secondary" id="profile-submit-btn" data-i18n="share.submit">📤 Submit to registry</button>
|
| 1231 |
+
<span id="profile-share-status" class="subtle"></span>
|
| 1232 |
+
</div>
|
| 1233 |
+
</div>
|
| 1234 |
+
</details>
|
| 1235 |
</div>
|
| 1236 |
`;
|
| 1237 |
|
| 1238 |
// Render the what-if slider for interactive exploration
|
| 1239 |
renderWhatIfSlider(p, params, $("whatif-container"));
|
| 1240 |
|
| 1241 |
+
// Render Lean+Mathlib theorem table (graceful no-op if manifest missed).
|
| 1242 |
+
// Loaded async at bootstrap; if Profile clicked before fetch resolves we
|
| 1243 |
+
// wait once and then render.
|
| 1244 |
+
const renderLeanTable = () => {
|
| 1245 |
+
const host = $("lean-table-host");
|
| 1246 |
+
if (!host) return;
|
| 1247 |
+
if (getManifest()) {
|
| 1248 |
+
host.innerHTML = renderTheoremTable();
|
| 1249 |
+
if (window.__taf_applyTranslations) window.__taf_applyTranslations();
|
| 1250 |
+
} else {
|
| 1251 |
+
host.innerHTML = `<div class="subtle" data-i18n="lean.manifest.loading">Loading Lean manifest…</div>`;
|
| 1252 |
+
loadLeanManifest()
|
| 1253 |
+
.then(() => { host.innerHTML = renderTheoremTable(); if (window.__taf_applyTranslations) window.__taf_applyTranslations(); })
|
| 1254 |
+
.catch(err => { host.innerHTML = `<div class="subtle" data-i18n="lean.manifest.error">Lean manifest unavailable: ${err.message}</div>`; });
|
| 1255 |
+
}
|
| 1256 |
+
};
|
| 1257 |
+
renderLeanTable();
|
| 1258 |
+
|
| 1259 |
// Re-apply translations to dynamically inserted buttons
|
| 1260 |
if (window.__taf_applyTranslations) window.__taf_applyTranslations();
|
| 1261 |
|
|
|
|
| 1275 |
setTimeout(() => $("profile-share-status").textContent = "", 6000);
|
| 1276 |
});
|
| 1277 |
|
| 1278 |
+
// v0.6: γ predicted-vs-observed panel — interactive
|
| 1279 |
+
const updateGammaCheck = () => {
|
| 1280 |
+
const gObs = parseFloat($("gc-gobs").value);
|
| 1281 |
+
const isRandom = $("gc-random").value === "true";
|
| 1282 |
+
const r = gammaCheckAll({ theta: params.theta, T: params.T_eval, gObs, isRandom });
|
| 1283 |
+
const meta = REGIME_META[r.regime] || REGIME_META.unknown;
|
| 1284 |
+
const fmt = (x, d=4) => (x === null || x === undefined || Number.isNaN(x))
|
| 1285 |
+
? "n/a"
|
| 1286 |
+
: (!Number.isFinite(x) ? "∞" : Number(x).toLocaleString(undefined, { maximumFractionDigits: d }));
|
| 1287 |
+
$("gamma-check-results").innerHTML = `
|
| 1288 |
+
<div class="taf-key-numbers">
|
| 1289 |
+
<div class="num-row"><span class="num-label">γ_Padé(T_eval) ${ttip("tooltip.gamma_pade", "Closed-form prediction (2−z)/(2+z), z = T√2/θ.")}</span><span class="num-value">${fmt(r.gammaPade)}</span></div>
|
| 1290 |
+
<div class="num-row"><span class="num-label">θ_eff (observed) ${ttip("tooltip.theta_eff_obs", "Effective θ implied by your γ_observed: T√2 / (1 − γ_obs).")}</span><span class="num-value">${fmt(r.thetaEffObs, 1)}</span></div>
|
| 1291 |
+
<div class="num-row"><span class="num-label">θ_eff (Padé) ${ttip("tooltip.theta_eff_pade", "Effective θ predicted by closed-form: θ + T/√2.")}</span><span class="num-value">${fmt(r.thetaEffPade, 1)}</span></div>
|
| 1292 |
+
<div class="num-row"><span class="num-label">η = θ_eff_obs / θ_eff_Padé ${ttip("tooltip.efficiency", "Efficiency ratio. ≈1 = normal · <0.01 = fraud · <0.5 = compressed · >1.5 = over-Padé.")}</span><span class="num-value">${fmt(r.efficiency)}</span></div>
|
| 1293 |
+
<div class="num-row"><span class="num-label">ΔH_Cardy = log(θ_eff_obs / θ_nominal) ${ttip("tooltip.delta_h_cardy", "Cardy entropy shift. Negative = compression entropy. ~0 = nominal match.")}</span><span class="num-value">${fmt(r.deltaHCardy)}</span></div>
|
| 1294 |
+
</div>
|
| 1295 |
+
<div class="taf-recipe-tile ${meta.cls}" style="margin-top:0.6em;">
|
| 1296 |
+
<div class="tile-header">
|
| 1297 |
+
<span data-i18n="gamma_check.regime">Regime</span>
|
| 1298 |
+
<span class="tile-verdict">${meta.emoji} <span data-i18n="gamma_check.regime.${r.regime}">${r.regime}</span></span>
|
| 1299 |
+
</div>
|
| 1300 |
+
<div class="tile-reason" data-i18n="gamma_check.regime.${r.regime}.desc"></div>
|
| 1301 |
+
</div>
|
| 1302 |
+
<details style="margin-top:0.6em;">
|
| 1303 |
+
<summary style="cursor:pointer; font-weight:600;" data-i18n="gamma_check.glossary.title">ⓘ What do these mean?</summary>
|
| 1304 |
+
<ul class="gc-glossary" style="margin:0.5em 0 0 1.2em; line-height:1.55;">
|
| 1305 |
+
<li data-i18n="gamma_check.glossary.gamma_pade"></li>
|
| 1306 |
+
<li data-i18n="gamma_check.glossary.gamma_obs"></li>
|
| 1307 |
+
<li data-i18n="gamma_check.glossary.theta_eff_obs"></li>
|
| 1308 |
+
<li data-i18n="gamma_check.glossary.theta_eff_pade"></li>
|
| 1309 |
+
<li data-i18n="gamma_check.glossary.efficiency"></li>
|
| 1310 |
+
<li data-i18n="gamma_check.glossary.delta_h"></li>
|
| 1311 |
+
<li data-i18n="gamma_check.glossary.regime"></li>
|
| 1312 |
+
</ul>
|
| 1313 |
+
</details>
|
| 1314 |
+
`;
|
| 1315 |
+
if (window.__taf_applyTranslations) window.__taf_applyTranslations();
|
| 1316 |
+
};
|
| 1317 |
+
$("gc-gobs").addEventListener("input", updateGammaCheck);
|
| 1318 |
+
$("gc-random").addEventListener("change", updateGammaCheck);
|
| 1319 |
+
updateGammaCheck();
|
| 1320 |
+
|
| 1321 |
// v0.5.1: Algebraic consistency check button
|
| 1322 |
$("verify-consistency-btn").addEventListener("click", () => {
|
| 1323 |
const gammaVal = kn.gamma_decomposed ?? kn.gamma_pade;
|
|
|
|
| 1810 |
if (file) importJSON(file, document.getElementById("import-status"));
|
| 1811 |
});
|
| 1812 |
}
|
| 1813 |
+
// Lean+Mathlib manifest — load in parallel with everything else; badges
|
| 1814 |
+
// appear once it resolves, but app stays usable if it fails.
|
| 1815 |
+
loadLeanManifest().catch(err => console.warn("Lean manifest unavailable:", err));
|
| 1816 |
});
|
| 1817 |
|
| 1818 |
// ════════════════════════════════════════════════════════════════════
|
|
@@ -590,3 +590,182 @@ footer a:hover { text-decoration: underline; }
|
|
| 590 |
margin: 0.6em 0;
|
| 591 |
overflow-x: auto;
|
| 592 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 590 |
margin: 0.6em 0;
|
| 591 |
overflow-x: auto;
|
| 592 |
}
|
| 593 |
+
|
| 594 |
+
/* ─── TAF Card accordion sections (v0.6 — UX restructuring) ─── */
|
| 595 |
+
.taf-section {
|
| 596 |
+
margin: 0.7em 0;
|
| 597 |
+
border: 1px solid var(--border);
|
| 598 |
+
border-radius: 6px;
|
| 599 |
+
background: rgba(255,255,255,0.018);
|
| 600 |
+
overflow: hidden;
|
| 601 |
+
}
|
| 602 |
+
.taf-section > summary {
|
| 603 |
+
cursor: pointer;
|
| 604 |
+
list-style: none;
|
| 605 |
+
padding: 0.7em 0.95em;
|
| 606 |
+
font-weight: 600;
|
| 607 |
+
font-size: 1.02em;
|
| 608 |
+
user-select: none;
|
| 609 |
+
display: flex;
|
| 610 |
+
align-items: center;
|
| 611 |
+
gap: 0.5em;
|
| 612 |
+
transition: background 0.12s;
|
| 613 |
+
}
|
| 614 |
+
.taf-section > summary:hover { background: rgba(255,255,255,0.04); }
|
| 615 |
+
.taf-section > summary::-webkit-details-marker { display: none; }
|
| 616 |
+
.taf-section > summary::before {
|
| 617 |
+
content: "▶";
|
| 618 |
+
display: inline-block;
|
| 619 |
+
font-size: 0.7em;
|
| 620 |
+
color: var(--fg-dim);
|
| 621 |
+
transition: transform 0.15s ease;
|
| 622 |
+
width: 0.8em;
|
| 623 |
+
text-align: center;
|
| 624 |
+
}
|
| 625 |
+
.taf-section[open] > summary::before { transform: rotate(90deg); }
|
| 626 |
+
.taf-section > summary .section-count {
|
| 627 |
+
margin-left: auto;
|
| 628 |
+
font-size: 0.82em;
|
| 629 |
+
color: var(--fg-dim);
|
| 630 |
+
font-weight: 500;
|
| 631 |
+
}
|
| 632 |
+
.taf-section-body {
|
| 633 |
+
padding: 0.4em 1em 1em 1em;
|
| 634 |
+
border-top: 1px solid var(--border);
|
| 635 |
+
background: var(--bg);
|
| 636 |
+
}
|
| 637 |
+
/* Hero strip — always-visible top-line summary */
|
| 638 |
+
.taf-hero {
|
| 639 |
+
padding: 0.9em 1em;
|
| 640 |
+
border: 1px solid var(--border);
|
| 641 |
+
border-radius: 6px;
|
| 642 |
+
background: linear-gradient(135deg, rgba(110,80,200,0.06), rgba(255,255,255,0.02));
|
| 643 |
+
margin-bottom: 0.4em;
|
| 644 |
+
}
|
| 645 |
+
.taf-hero .hero-arch { font-size: 1.15rem; font-weight: 700; }
|
| 646 |
+
.taf-hero .hero-meta { color: var(--fg-dim); font-size: 0.88em; margin-top: 0.25em; }
|
| 647 |
+
.taf-hero .hero-row {
|
| 648 |
+
display: flex; flex-wrap: wrap; gap: 0.5em 1em;
|
| 649 |
+
align-items: center; margin-top: 0.5em;
|
| 650 |
+
}
|
| 651 |
+
.taf-hero .hero-pill {
|
| 652 |
+
display: inline-flex; align-items: center; gap: 0.35em;
|
| 653 |
+
padding: 0.2em 0.6em; border-radius: 999px;
|
| 654 |
+
font-size: 0.85em; font-weight: 600;
|
| 655 |
+
background: var(--bg-input);
|
| 656 |
+
border: 1px solid var(--border);
|
| 657 |
+
}
|
| 658 |
+
.taf-hero .hero-pill.v-yes { color: var(--success); border-color: var(--success); }
|
| 659 |
+
.taf-hero .hero-pill.v-no { color: var(--danger); border-color: var(--danger); }
|
| 660 |
+
.taf-hero .hero-pill.v-deg { color: var(--warning); border-color: var(--warning); }
|
| 661 |
+
|
| 662 |
+
/* ─── Lean+Mathlib provenance (v0.6) ─── */
|
| 663 |
+
.lean-badge {
|
| 664 |
+
display: inline-block;
|
| 665 |
+
padding: 0.08em 0.45em;
|
| 666 |
+
margin: 0 0.15em;
|
| 667 |
+
border: 1px solid rgba(110,80,200,0.45);
|
| 668 |
+
background: rgba(110,80,200,0.10);
|
| 669 |
+
border-radius: 4px;
|
| 670 |
+
color: var(--accent, #b48cff);
|
| 671 |
+
text-decoration: none;
|
| 672 |
+
font-size: 0.78em;
|
| 673 |
+
font-family: monospace;
|
| 674 |
+
vertical-align: middle;
|
| 675 |
+
white-space: nowrap;
|
| 676 |
+
}
|
| 677 |
+
.lean-badge:hover {
|
| 678 |
+
background: rgba(110,80,200,0.22);
|
| 679 |
+
text-decoration: none;
|
| 680 |
+
}
|
| 681 |
+
.lean-badges-row {
|
| 682 |
+
margin: 0.4em 0 0.6em;
|
| 683 |
+
line-height: 1.9;
|
| 684 |
+
}
|
| 685 |
+
.lean-meta {
|
| 686 |
+
font-size: 0.88em;
|
| 687 |
+
margin-bottom: 0.6em;
|
| 688 |
+
padding: 0.5em 0.7em;
|
| 689 |
+
background: rgba(255,255,255,0.02);
|
| 690 |
+
border-left: 3px solid var(--accent);
|
| 691 |
+
border-radius: 4px;
|
| 692 |
+
}
|
| 693 |
+
.lean-meta a { color: var(--accent); }
|
| 694 |
+
.lean-findings {
|
| 695 |
+
margin: 0.6em 0 0.8em;
|
| 696 |
+
padding: 0.5em 0.7em;
|
| 697 |
+
border: 1px solid rgba(241,196,15,0.4);
|
| 698 |
+
background: rgba(241,196,15,0.06);
|
| 699 |
+
border-radius: 6px;
|
| 700 |
+
}
|
| 701 |
+
.lean-findings > summary {
|
| 702 |
+
cursor: pointer;
|
| 703 |
+
font-size: 1em;
|
| 704 |
+
}
|
| 705 |
+
.lean-finding {
|
| 706 |
+
margin: 0.6em 0;
|
| 707 |
+
padding: 0.6em 0.7em;
|
| 708 |
+
border-left: 3px solid var(--warning);
|
| 709 |
+
background: rgba(255,255,255,0.025);
|
| 710 |
+
border-radius: 0 4px 4px 0;
|
| 711 |
+
}
|
| 712 |
+
.lean-pill {
|
| 713 |
+
display: inline-block;
|
| 714 |
+
margin-left: 0.4em;
|
| 715 |
+
padding: 0.05em 0.45em;
|
| 716 |
+
font-size: 0.75em;
|
| 717 |
+
border-radius: 999px;
|
| 718 |
+
border: 1px solid var(--border);
|
| 719 |
+
text-transform: uppercase;
|
| 720 |
+
letter-spacing: 0.04em;
|
| 721 |
+
}
|
| 722 |
+
.lean-pill.v-deg { color: var(--warning); border-color: var(--warning); }
|
| 723 |
+
.lean-groups .lean-group {
|
| 724 |
+
margin: 0.4em 0;
|
| 725 |
+
border: 1px solid var(--border);
|
| 726 |
+
border-radius: 4px;
|
| 727 |
+
background: var(--bg);
|
| 728 |
+
}
|
| 729 |
+
.lean-group > summary {
|
| 730 |
+
cursor: pointer;
|
| 731 |
+
padding: 0.5em 0.7em;
|
| 732 |
+
user-select: none;
|
| 733 |
+
font-weight: 600;
|
| 734 |
+
list-style: none;
|
| 735 |
+
}
|
| 736 |
+
.lean-group > summary::-webkit-details-marker { display: none; }
|
| 737 |
+
.lean-group > summary::before {
|
| 738 |
+
content: "▶ ";
|
| 739 |
+
font-size: 0.7em;
|
| 740 |
+
color: var(--fg-dim);
|
| 741 |
+
transition: transform 0.15s;
|
| 742 |
+
}
|
| 743 |
+
.lean-group[open] > summary::before {
|
| 744 |
+
content: "▼ ";
|
| 745 |
+
}
|
| 746 |
+
.lean-table-wrap {
|
| 747 |
+
max-height: 380px;
|
| 748 |
+
overflow: auto;
|
| 749 |
+
border-top: 1px solid var(--border);
|
| 750 |
+
}
|
| 751 |
+
.lean-table {
|
| 752 |
+
width: 100%;
|
| 753 |
+
border-collapse: collapse;
|
| 754 |
+
font-size: 0.85em;
|
| 755 |
+
}
|
| 756 |
+
.lean-table th, .lean-table td {
|
| 757 |
+
padding: 0.4em 0.6em;
|
| 758 |
+
text-align: left;
|
| 759 |
+
vertical-align: top;
|
| 760 |
+
border-bottom: 1px solid var(--border);
|
| 761 |
+
}
|
| 762 |
+
.lean-table th {
|
| 763 |
+
position: sticky;
|
| 764 |
+
top: 0;
|
| 765 |
+
background: var(--bg-input);
|
| 766 |
+
color: var(--accent);
|
| 767 |
+
font-family: monospace;
|
| 768 |
+
z-index: 1;
|
| 769 |
+
}
|
| 770 |
+
.lean-table tbody tr:hover { background: rgba(255,255,255,0.03); }
|
| 771 |
+
.lean-table code { font-size: 0.95em; }
|