files / problems / simon-ionization-excess / compute / q2 / geometric_alpha.py

4.4 KB · on GitHub

#!/usr/bin/env python3
"""Elementary lower bounds on alpha_{N,s} that do not use a search.

s=1: triangle, alpha_{N,1} >= 1/2 (Lieb). Equality along opposite rays.
s=2, N=2: alpha_2,2 = 1/2 (HPS/Nam).
s=2, N=3: the underestimate (a^2+b^2)/(a+b) recovers only 1/2.
Nam's √5/4 is cited as a published lower bound for N>=3, s=2; we replay
the arithmetic  √5/4 ≈ 0.559, and check it against structured configs.
We do not re-prove √5/4.

For N=4, Z=2, even √5/4 is too small: (√5/4)*3 ≈ 1.677 < 2.
A lemma that alpha_4,2 > 2/3 would be the geometric half of a dent if
the kinetic remainder were also controlled. This file records that the
published elementary lowers do not reach 2/3.

Replay: python3 geometric_alpha.py
"""

from __future__ import annotations

import json
import math
from fractions import Fraction
from pathlib import Path

HERE = Path(__file__).resolve().parent
CERTS = HERE / "certs"


def main() -> None:
    CERTS.mkdir(parents=True, exist_ok=True)
    sqrt5_4 = math.sqrt(5.0) / 4.0
    two_thirds = 2.0 / 3.0
    blob = {
        "not_a_certificate": True,
        "is_new_bound": False,
        "lieb_s1": {
            "alpha_N_1_ge": 0.5,
            "gives": "N < 2Z+1",
            "at_Z2": "N < 5, so Nc(2) <= 4",
        },
        "nam_s2_N2": {"alpha_2_2": 0.5},
        "nam_sqrt5_over_4": {
            "value": sqrt5_4,
            "exact": "sqrt(5)/4",
            "applies": "Nam text: alpha_N >= sqrt(5)/4 when N>=3 (s=2)",
            "invoked_not_reproved": True,
            "N4_times_3": 3.0 * sqrt5_4,
            "below_Z2": 3.0 * sqrt5_4 < 2.0,
        },
        "threshold_N4_Z2_kinetic_dropped": {
            "need_alpha_4": two_thirds,
            "sqrt5_over_4_minus_need": sqrt5_4 - two_thirds,
        },
        "equilateral_centred_s2": {
            "alpha": math.sqrt(3.0) / 3.0,
            "exact": "sqrt(3)/3",
            "N3_times_2": 2.0 * math.sqrt(3.0) / 3.0,
            "below_Z2": True,
            "note": "configuration, hence an upper bound on inf alpha_3",
        },
        "tetrahedron_centred_s2": {
            "alpha": math.sqrt(6.0) / 4.0,
            "exact": "sqrt(6)/4",
            "N4_times_3": 3.0 * math.sqrt(6.0) / 4.0,
            "below_Z2": True,
            "integer_form": "3*sqrt(6) < 8  <=>  54 < 64",
            "note": (
                "Regular tetrahedron centred at the origin. Evaluates "
                "alpha_4,2 exactly. So alpha_4,2 <= sqrt(6)/4 < 2/3, and "
                "alpha_4,2 * 3 <= 3*sqrt(6)/4 < 2. The s=2 pair geometry "
                "cannot exclude N=4 at Z=2 even if the kinetic remainder "
                "is dropped. Independent integer check: 9*6 = 54 < 64."
            ),
        },
        "one_at_origin_opposite_s2": {
            "alpha": 0.75,
            "exact": "3/4",
            "note": "configuration; not the infimum",
        },
        "note": (
            "Published elementary lowers on alpha_4 stop at 1/2 or at "
            "sqrt(5)/4. The tetrahedron gives a certified *upper* on "
            "alpha_4,2 below the 2/3 threshold. No geometric dent for "
            "Nc(2)<4 from the |x|^s pair ratio."
        ),
    }
    # Integer check: 3 sqrt(5) < 8  <=>  (sqrt(5)/4)*3 < 2.
    if not (3.0 * sqrt5_4 < 2.0):
        raise RuntimeError("arithmetic of sqrt(5)/4 * 3 vs 2 drifted")
    if Fraction(3, 4) <= Fraction(2, 3):
        raise RuntimeError("3/4 should exceed 2/3")
    # 3 sqrt(6) < 8  <=>  9*6 < 64.
    if 54 >= 64:
        raise RuntimeError("54 < 64 failed")
    if 3 * 3 * 6 >= 8 * 8:
        raise RuntimeError("tetrahedron 3*sqrt(6) < 8 failed")
    # Cross-check the closed form on the tetrahedron vertices.
    tet = (
        (1.0, 1.0, 1.0),
        (1.0, -1.0, -1.0),
        (-1.0, 1.0, -1.0),
        (-1.0, -1.0, 1.0),
    )
    r = math.sqrt(3.0)
    d = math.sqrt(8.0)
    num = 6.0 * (r**2 + r**2) / d
    den = 3.0 * 4.0 * r
    a_tet = num / den
    if abs(a_tet - math.sqrt(6.0) / 4.0) > 1e-12:
        raise RuntimeError(f"tetrahedron alpha drifted: {a_tet}")
    path = CERTS / "geometric_alpha.json"
    path.write_text(json.dumps(blob, indent=2) + "\n")
    print("Lieb s=1: alpha >= 1/2, N < 2Z+1, Nc(2)<=4")
    print(f"Nam √5/4 = {sqrt5_4:.12f};  3*(√5/4) = {3*sqrt5_4:.12f} < 2")
    print(f"need alpha_4 > 2/3 = {two_thirds:.12f} if kinetic dropped")
    print(f"√5/4 - 2/3 = {sqrt5_4 - two_thirds:.12f}  (short)")
    print("equilateral centred s=2:", math.sqrt(3) / 3)
    print("wrote", path)


if __name__ == "__main__":
    main()