The Theory of Persistence

PT chemistry / executable derivation

First robust demonstration

Why does the periodic table have this shape?

In PT, the table of elements is not an empirical catalogue: its shape follows from a short chain. Spin gives the factor 2, orientations give 1, 3, 5, 7, and capacities become 2, 6, 10, 14. From there, the blocks, periods, and several configuration anomalies fall into place together.

THM DER PTC code No g-shell
block
s
1 orientations
capacity 2
block
p
3 orientations
capacity 6
block
d
5 orientations
capacity 10
block
f
7 orientations
capacity 14
T1 01

Exclusion

Two electrons cannot occupy exactly the same state.

T1 forbids self-transitions mod 3: a state cannot copy itself onto itself. The only allowed doubling is the spin involution, hence the factor 2.

C1 02

Orientations

Each orbital family has a determined number of directions.

For an orbital index ℓ, magnetic values run from -ℓ to +ℓ. This gives 2ℓ+1 discrete positions: 1, 3, 5, 7 for s, p, d, f.

DER 03

Capacities

Directions are multiplied by the two spin states.

Each position can host two opposite spins. The capacity is therefore Cap(ℓ)=2(2ℓ+1), directly producing 2, 6, 10, 14.

THM 04

Four blocks

The table stops at s, p, d, f for an arithmetic reason.

Depth D=2 gives four orbital types, the V4 group. The next step would require 9 or p=11, but 9 is composite and p=11 remains in echo.

Why this is a good first demonstration

The periodic table is familiar, visual, and highly constrained. That is exactly what a theory needs for an early test: PT cannot freely choose the blocks, capacities, or period lengths.

The strength of this page is therefore rigidity: the numbers 2, 6, 10, 14 come from 2(2ℓ+1), the periods 2, 8, 8, 18, 18, 32, 32 come from L(k)=2⌈k/2⌉², and then d5/d10 anomalies and the absence of a g block become secondary tests.

Step What is forced Chemical result
Orientations 2ℓ+1 = 1,3,5,7 s, p, d, f blocks
Spin 2(2ℓ+1) capacities 2, 6, 10, 14
Depth s → p → d → f periods 2, 8, 18, 32
Stabilities d5 and d10 Cr, Cu, Pd, Ag, Au...

From known rules to structural causes

This page does not introduce a new nomenclature to memorize. It starts from the usual objects of quantum chemistry and shows how PT turns empirical rules into structural consequences.

Chemical object Usual formulation PT reading
Pauli A quantum principle imposed on electrons. Exclusion derived from T1: the spin involution gives the factor 2.
Capacities Subshells contain 2, 6, 10, or 14 electrons. Capacity forced by 2(2ℓ+1), with 2ℓ+1 = 1, 3, 5, 7.
Madelung Empirical n+l rule, then n. Filling order motivated by the decreasing master function of the sieve.
Cr, Cu, Pd, Au Anomalous configurations memorized as exceptions. d5/d10 informational stabilities of the Z/10Z pentagon.
Lanthanides / actinides Rows separated below the table for readability. Buried f channel: s -> f -> d -> p when P3 = 7 opens.
No g block Observed absence beyond the known stable domain. 9 = 3^2 is composite and p=11 remains in echo below threshold.

Seeing channels as polygons

The drawing is not a picture of an orbital in space. It is a discrete map of the PT channel: the circle marks the channel, each vertex represents an available orientation, and spin doubles each vertex.

Technical reading: the channels live on the circles Z/(2P_l)Z. The active primes 3, 5, 7 give the triangle, pentagon, and heptagon; the s case is the minimal channel, one orientation doubled by spin.

block s

1 orientation x 2 spins = 2

block p

3 orientations x 2 spins = 6

block d

5 orientations x 2 spins = 10

block f

7 orientations x 2 spins = 14

Why the pentagon explains d anomalies

In the d channel, five orientations form the Z/10Z pentagon after spin doubling. The d5 and d10 configurations then become two special positions: half filling and closure. That is why Cr, Cu, Mo, Pd, Ag, or Au are not merely exceptions to memorize.

d5
d10

The formula that makes periods

The length of period number $k$ is given by $L(k) = 2\lceil k/2\rceil^2$. It directly produces the observed sequence up to 118 elements.

Monograph source: chapters_fr/ch22_chemistry.tex, period-length section. PTC implements it in period(Z) as cap = 2 * k * k with k = per // 2 + 1.
k=1
2 / 1-2
k=2
8 / 3-10
k=3
8 / 11-18
k=4
18 / 19-36
k=5
18 / 37-54
k=6
32 / 55-86
k=7
32 / 87-118
s block d block f block p block

Blue marks the s opening of each period; green marks the p closure; orange and violet mark the internal d and f channels once the period becomes deep enough.

PT reading of internal channels

Periods 2-3 only have the s -> p pattern. In periods 4-5, depth permits the pentagonal d channel: capacity 2 x 5 = 10, with d5 and d10 stabilities driving the Madelung promotions. In periods 6-7, the heptagonal f channel is inserted before the return to d: s -> f -> d -> p, namely 2 + 14 + 10 + 6 = 32.

This buried internal layer is precisely what makes lanthanides and actinides structurally natural in PT: they are not an appendix to the table, but the opening of the last active prime P3 = 7. The next step would require a g channel, but 2ℓ+1 = 9 is composite and p = 11 remains an echo prime (gamma_11 < 1/2).

The shell ladder

The same derivation can be read as a succession of closure configurations: s2, then s2 p6, then s2 d10 p6, then s2 f14 d10 p6.

periods 1
s2
2 elements

The minimal shell closes only the spin-orbital s channel.

periods 2-3
s2p6
8 elements

First complete chemical motif: s opening, p closure.

periods 4-5
s2d10p6
18 elements

The d pentagon appears between the s opening and the p closure.

periods 6-7
s2f14d10p6
32 elements

The f channel is buried before the d return, then the p closure.

The compact demonstration

block s

ℓ=0 -> 2ℓ+1=1

One orientation, two possible spin states.

spin involution derived from T1. The capacity is therefore 2 x 1 = 2.

block p

ℓ=1 -> 2ℓ+1=3

Three spatial directions, filled by spin pairs.

first active prime P1 = 3. The capacity is therefore 2 x 3 = 6.

block d

ℓ=2 -> 2ℓ+1=5

Five positions, with half-filled and closed-shell stabilities.

first active prime P2 = 5. The capacity is therefore 2 x 5 = 10.

block f

ℓ=3 -> 2ℓ+1=7

Seven positions, the last active channel in PT geometry.

first active prime P3 = 7. The capacity is therefore 2 x 7 = 14.

Anomalies are no longer exceptions

The $s \to d$ promotions appear at the stability points of the pentagon: half filling $d^5$ and closure $d^10$. PTC keeps two readings separate: radial Aufbau filling for shielding, and informational Madelung filling for fine structure.

In ptc/periodic.py, _n_fill_aufbau() remains radial, while n_fill() applies _MADELUNG_PROMOTIONS. This separation matters: it prevents spatial geometry and informational stability from being conflated.
Element Aufbau PT / Madelung Cause
Cr Z=24 d4s2 d5s1 half filling
Cu Z=29 d9s2 d10s1 closure
Nb Z=41 d3s2 d4s1 near half filling
Mo Z=42 d4s2 d5s1 half filling
Ru Z=44 d6s2 d7s1 post half filling
Rh Z=45 d7s2 d8s1 post half filling
Pd Z=46 d8s2 d10s0 double closure
Ag Z=47 d9s2 d10s1 closure
Pt Z=78 d8s2 d9s1 near closure
Au Z=79 d9s2 d10s1 closure
Rg Z=111 d9s2 d10s1 relativistic closure

Query an element

The calculator follows the logic of periodic.py: it converts an atomic number into period, block, capacity, radial Aufbau filling, and PT/Madelung filling.

Useful example: enter Z=79. Gold moves from d9s2 to d10s1 because closure of the d channel compensates the cost of the s -> d promotion.

Au
Z=79
Period
6
Block
d
Capacity
10
Radial Aufbau
d9s2
PT / Madelung
d10s1
Reading
closure

What the PTC code verifies

period(Z)

recovers the period from L(k) = 2 ceil(k/2)^2

PT_PROJECTS/PTC/ptc/periodic.py:13

l_of(Z)

assigns the s, p, d, or f block from the position in the period

PT_PROJECTS/PTC/ptc/periodic.py:31

capacity(Z)

returns 2, 6, 10, or 14 from 2(2ℓ+1)

PT_PROJECTS/PTC/ptc/periodic.py:115

n_fill(Z)

adds the d5/d10 informational promotions

PT_PROJECTS/PTC/ptc/periodic.py:75

Minimal reproducible test

cd PT_PROJECTS/PTC
PYTHONPATH=. python -m pytest ptc/tests/test_periodic.py -v

The assertions cover period boundaries, s/p/d/f blocks, capacities 2/6/10/14, Aufbau fillings, and the Cr, Cu, Mo, Pd, Ag, and Au promotions.

Executable source: periodic.py

public/scripts-source/ptc/periodic.py · 185 lines · copy bundled with the site and embedded into the HTML at build time.

PTC

This file is the operational translation of the derivation: periods by 2k², s/p/d/f blocks, capacities 2, 6, 10, 14, and an explicit separation between radial Aufbau filling and informational Madelung promotions. The raw copy is also served as a static file at /scripts-source/ptc/periodic.py.

Show the full code
"""
Periodic table structure functions.

Derived from PT first principles: period boundaries follow 2k² shells
where k = per // 2 + 1 (prime-indexed shells P1=3, P2=5, P3=7).
Zero adjustable parameters.
"""
from ptc.constants import P1, P2, P3

_BLOCK_MAP = {0: 's', 1: 'p', 2: 'd', 3: 'f'}
_CAP_MAP   = {0: 2, 1: 2 * P1, 2: 2 * P2, 3: 2 * P3}  # 2, 6, 10, 14


def period(Z: int) -> int:
    """Return the period number for atomic number Z."""
    cumul, per = 0, 1
    while True:
        k = per // 2 + 1
        cap = 2 * k * k
        if Z <= cumul + cap:
            return per
        cumul += cap
        per += 1


def period_start(per: int) -> int:
    """Return the first Z of period per."""
    z0 = 1
    for p in range(1, per):
        k = p // 2 + 1
        z0 += 2 * k * k
    return z0


def l_of(Z: int) -> int:
    """Angular momentum of the valence sub-shell: s=0, p=1, d=2, f=3."""
    per = period(Z)
    z0 = period_start(per)
    pos = Z - z0
    if pos < 2:
        return 0
    if per <= 3:
        return 1
    if per <= 5:
        return 2 if pos < 12 else 1
    if pos == 2:
        return 2
    if pos < 16:
        return 3
    if pos < 26:
        return 2
    return 1


def _n_fill_aufbau(Z: int) -> int:
    """Number of electrons in the valence sub-shell (Aufbau, no promotions).

    This is the RADIAL filling — used for screening (geometric γ₅ decay).
    The screening is a spatial phenomenon and follows the standard Aufbau
    ordering regardless of Madelung promotions.
    """
    per = period(Z)
    z0 = period_start(per)
    pos = Z - z0
    l = l_of(Z)
    if l == 0:
        return min(pos + 1, 2)
    cap = 2 * (per // 2 + 1) ** 2
    if l == 1:
        return Z - (z0 + cap - 6) + 1
    if l == 2:
        nd = max(0, pos + 1 - 2)
        if per >= 6:
            nd = max(0, nd - 14)
        return min(nd, 2 * P2)
    if l == 3:
        return min(max(0, pos + 1 - 2), 2 * P3)
    return 1


# ── Madelung anomalies: PT predictions from the pentagon ──────────────
# d5 = half-fill = D_KL maximum on Z/10Z (persistence peak)
# d10 = closure = H minimum on Z/10Z (entropy floor)
# These are INFORMATIONAL, not radial — the polygon structure demands them.

# Z → (nd_madelung, ns_madelung) for elements with s→d promotions
_MADELUNG_PROMOTIONS: dict[int, tuple[int, int]] = {
    24: (5, 1),   # Cr: d4s2 → d5s1  (half-fill)
    29: (10, 1),  # Cu: d9s2 → d10s1 (closure)
    41: (4, 1),   # Nb: d3s2 → d4s1  (quasi-half)
    42: (5, 1),   # Mo: d4s2 → d5s1  (half-fill)
    44: (7, 1),   # Ru: d6s2 → d7s1  (post-half)
    45: (8, 1),   # Rh: d7s2 → d8s1  (post-half)
    46: (10, 0),  # Pd: d8s2 → d10s0 (double closure)
    47: (10, 1),  # Ag: d9s2 → d10s1 (closure)
    78: (9, 1),   # Pt: d8s2 → d9s1  (quasi-closure)
    79: (10, 1),  # Au: d9s2 → d10s1 (closure)
    111: (10, 1), # Rg: d9s2 → d10s1 (closure, relativistic)
}


def n_fill(Z: int) -> int:
    """Number of electrons in the valence sub-shell (Madelung).

    Returns the INFORMATIONAL filling — includes d5/d10 promotions
    predicted by the pentagon Z/(2×5)Z structure.  Used for polygon
    construction (structure fine = harmonique).

    For screening (radial, geometric), use _n_fill_aufbau().
    """
    if Z in _MADELUNG_PROMOTIONS and l_of(Z) == 2:
        return _MADELUNG_PROMOTIONS[Z][0]
    return _n_fill_aufbau(Z)


def ns_config(Z: int) -> int:
    """Number of s-electrons, detecting s→d promotions.

    In PT: promotion occurs when Hund half-filling stability or d-shell
    closure exceeds the s→d promotion cost (gap decreases with period).

    Uses _n_fill_aufbau for the detection logic (avoids recursion with
    the Madelung n_fill).
    """
    if Z in _MADELUNG_PROMOTIONS and l_of(Z) == 2:
        return _MADELUNG_PROMOTIONS[Z][1]
    l = l_of(Z)
    if l == 0:
        return min(_n_fill_aufbau(Z), 2)
    if l != 2:
        return 2
    return 2


def block_of(Z: int) -> str:
    """Return the block letter ('s', 'p', 'd', or 'f') for element Z."""
    return _BLOCK_MAP[l_of(Z)]


def capacity(Z: int) -> int:
    """Return the capacity (2(2l+1)) of the valence sub-shell for element Z."""
    return _CAP_MAP[l_of(Z)]


def _np_of(Z: int) -> int:
    """Number of p-electrons for element Z.

    Returns the valence p-electron count:
      s-block (l=0): 0 — no p-electrons
      p-block (l=1): n_fill(Z) — the p sub-shell filling
      d-block (l=2): 0 — d-block bonds through s+d, not p
      f-block (l=3): 0 — same logic
    """
    l = l_of(Z)
    if l == 1:
        return min(n_fill(Z), _CAP_MAP[1])
    return 0


def _nd_of(Z: int) -> int:
    """Number of d-electrons for element Z.

    Returns the d sub-shell filling only for d-block (l=2).
    s-block, p-block, and f-block return 0.
    """
    if l_of(Z) != 2:
        return 0
    return min(n_fill(Z), 2 * P2)


def _valence_electrons(Z: int) -> int:
    """Total valence electrons."""
    return n_fill(Z) + ns_config(Z)


def _lp_pairs(Z: int, bo: float) -> int:
    """Lone pairs available for bonding."""
    l = l_of(Z)
    if l == 0:
        return 0
    np_val = _np_of(Z)
    P1 = 3
    if np_val <= P1:
        return 0
    return max(0, np_val - P1 - int(bo - 1))

Epistemic status

THM

Exclusion, subshell capacities, four blocks, and absence of a g shell.

DER

Period lengths and Aufbau order from the master function.

VAL

PTC implementation and unit tests for the periodic functions.

PRED

Structure beyond Z=118 without a g block, to be checked against future data.

Level Claim Remaining checks
derived s/p/d/f blocks, capacities 2/6/10/14, lengths 2/8/8/18/18/32/32. Recheck the C1/table proof and no-g status in the monograph.
code PTC implementation in periodic.py and associated unit tests. Keep the public copy synchronized with the PTC engine.
chemistry d5/d10 promotions as informational stabilities of the d channel. Quantify promotion costs and relativistic effects element by element.
frontier No active g block: 9 is composite and p=11 remains in echo. Compare with superheavy models and future data beyond 118.

Local sources: PT_MONOGRAPHY/chapters_fr/ch22_chemistry.tex, PT_PROJECTS/PTC/ptc/periodic.py, PT_PROJECTS/PTC/ptc/tests/test_periodic.py.