This page pairs the classical reaction skeleton with the alignment assignment that powers directionality. The classical balances remain exactly as in textbook chemistry (via collapse). Alignments are not conserved; they are assigned from a declared energetic lens and later pooled to form preference (RSI). Clamp and guard policies keep every stability coordinate strictly bounded and numerically safe.
Reaction statement (classical skeleton + alignment)
- Write reactions with a classical magnitude for each term and a bounded stability channel alongside it.
- Collapse handles balances: element and charge balances hold on the classical channel exactly.
- Alignment is advisory: assigned from the chosen lens and combine rules; used later for pooling and preference.
- Separation of roles: collapse governs mass/charge; alignment governs symbolic stability and is later modulated by the environment gate.
- Safety: all alignments are strictly inside the open interval; the clamp policy prevents numerical spillover to the bounds.
Energetic contrast → alignment (table-free direction)
- Build a contrast from bonds broken vs. formed (or pick one canonical lens for the study).
- Map contrast to reactant and product alignments with a single symmetric slope.
- Monotone & sign-consistent: increasing contrast in favor of products increases product alignment; the sign of the contrast sets the sign pointer used by RSI.
- One lens per study: thermodynamic, redox, kinetic (observation-only), or the canonical formation lens—declare one, keep it fixed, and publish its scale and guards.
Plain ASCII formulas (copy-ready)
Reaction skeleton and balances
sum_i (m_i, a_i)_reactants -> sum_j (m_j, a_j)_products
phi(m, a) = m
sum_i phi(m_i, a_i) = sum_j phi(m_j, a_j) # element/charge balance under collapse
|a| <= 1 - eps_a # clamp policy
Contrast -> alignment (canonical formation lens)
E_broken = sum_over_bonds_broken(B_bond)
E_formed = sum_over_bonds_formed(B_bond)
e = (E_formed - E_broken) / E_unit
a_react = tanh( -c * e )
a_prod = tanh( +c * e )
# clamp after compute
a_react = clamp_a(a_react, eps_a)
a_prod = clamp_a(a_prod, eps_a)
Units & policy (declare once per study)
E_unit > 0 # choose so |e| ~ O(1), e.g., 100 kJ/mol
c > 0 # typical c in [0.3, 1.5]
eps_a > 0 # e.g., 1e-6
# Publish: E_unit, c, eps_a, chosen lens (exactly one per study)
Numeric guards (reused elsewhere; see 2.2 for context)
clamp_a(a, eps_a):
if abs(a) >= 1 - eps_a:
return (1 if a >= 0 else -1) * (1 - eps_a)
return a
atanh_safe(a, eps_a):
ac = clamp_a(a, eps_a)
return 0.5 * log((1 + ac) / (1 - ac))
Properties
# symmetry and zero
a_prod = -a_react
e = 0 -> a_react = 0 and a_prod = 0
# boundedness and monotonicity
|a_react| < 1 , |a_prod| < 1
as e increases: a_prod increases, a_react decreases
# direction pointer
sign(a_prod) = sign(e) for c > 0
Other valid lenses for e (pick one, keep fixed per study)
Thermodynamic: e = -(DeltaG) / G_unit # DeltaG < 0 => e > 0
Redox: e = (n * F * DeltaE) / E_unit # DeltaE > 0 => e > 0
Kinetic (obs): e = -(Ea / (R * T_unit)) # higher Ea -> more negative e
# Hybrids allowed if "forward-favored => e > 0" is preserved
Pseudocode (reference, ASCII)
input: E_broken, E_formed, E_unit > 0, c > 0, eps_a > 0
# lens selection (declare once; pick exactly one)
e = (E_formed - E_broken) / E_unit # canonical formation lens
# e = -(DeltaG) / G_unit # thermodynamic lens (optional)
# e = (n * F * DeltaE) / E_unit # redox lens (optional)
# e = -(Ea / (R * T_unit)) # kinetic lens (optional, obs)
a_react = tanh( -c * e )
a_prod = tanh( +c * e )
a_react = clamp_a(a_react, eps_a)
a_prod = clamp_a(a_prod, eps_a)
Navigation
Previous – Pooling & Bond Combine (2.3, 2.4)
Next – Reaction Stability Index — Definition (2.7)