Update 2026-06-29-tripartite-synapse_v17.md

This commit is contained in:
2026-07-11 19:17:58 +02:00
parent 2bbec8e1ae
commit b173478e1b
@@ -184,12 +184,16 @@ NIGHT energy (not recoverable) · material (recoverable) · structure · budg
LOCALITY only local state + arrived signals; no component reads another's internal state.
CUT SIGNPOSTS (@cut) — an INDEX into the possibility, not part of it. The pseudocode expresses the
POSSIBILITY of verifying behaviours in time/space/quantity; a CUT is a reading of that possibility
at chosen levels, and cuts are UNBOUNDED, so they are NOT in the code — they live in the companion
`logic_of_aggregations` (there, a "cut" fixes levels on time/space/quantity + scope, and an OBJECT
is a name over the behaviours so read). A signpost is only a reminder at a STORE, marking what that
store AFFORDS reading and at what grain. It computes nothing and privileges no reading; deleting
every @cut leaves the expression unchanged. Form:
POSSIBILITY of verifying behaviours in time/space/quantity; a CUT is a reading WE impose from the
outside to construct an object, and cuts are UNBOUNDED, so they are NOT in the code — they live in
the companion `logic_of_aggregations` (there, a "cut" fixes levels on time/space/quantity + scope,
and an OBJECT is a name over the behaviours so read). A signpost only marks a STORE where such an
outside reading can be TAKEN — what it affords us, at what grain. It is NOT a mark on the
component's own local decisions: thresholds, tags, and bucketings like level() are the component
BEHAVING (expression), not us reading (a cut), and carry no signpost. The test is whose act it is:
the component's own decision is expression; our reading-to-build-an-object is a cut. A signpost
computes nothing and privileges no reading; deleting every @cut leaves the expression unchanged.
Form:
<store> ... // @cut affords: <behaviours readable here> [grain]
Rules: one per load-bearing store (the traces, tags, occupancies, coincidence sites — not every
line); names affordances, never computes them; must be deletable with zero effect. For the worked
@@ -589,7 +593,7 @@ NIGHT | replay + measure + prime:
post_fast_trace += NMDA_Ca(glutamate) × sat(astro_Dserine, K_Ds) // SAME NMDA machinery (D-serine = gain)
if post_budget < traffic_cost: // SAME capacity check → endurance evidence
if post_fast_trace > traj_thr: post_endurance_need += post_fast_trace // SAME trace, fed by replay
post_participation = level(post_fast_trace) // read replayed response as participation // @cut IS A READING: level() buckets the continuous trace into HIGH/MEDIUM/LOW — a chosen 3-bin quantity cut, kept executable because the build/release decision depends on it (see logic_of_aggregations: participation cut)
post_participation = level(post_fast_trace) // read replayed response as participation
// MEDIUM: prime responsiveness (AMPA occupancy) from the standing tag
post_spont_thr = spont_thr_base thr_gain × post_tag
if post_tag > prime_thr:
@@ -648,14 +652,14 @@ ceilings drift down.
DAY | bAP: // propagate + integrate (the defining deed)
if dend_budget < prop_cost:
if dend_fast_trace > traj_thr: // FUEL shortfall → endurance (a PREPARATION deposit)
dend_endurance_need += dend_fast_trace
dend_endurance_need += dend_fast_trace // @cut affords: stamina / sustained-propagation need (endurance pathway; DEND is endurance-only) [min]
bAP_local, reached = propagate_partial(dend_budget)
else:
bAP_local, reached = propagate(SOMA.fired, dend_structure.bAP_fidelity, geometry)
// reached < full here is structural attenuation (distance), NOT endurance
dend_budget -= prop_cost × reached
dend_fast_trace += bAP_Ca(bAP_local) + spine_spillover(); dend_budget -= branch_Ca_cost
branch_Vm = integrate(POST.Vm, spines); dend_budget -= integrate_cost // EMIT integrated Vm → SOMA
dend_fast_trace += bAP_Ca(bAP_local) + spine_spillover(); dend_budget -= branch_Ca_cost // @cut affords: branch propagation activity, recency [ms]
branch_Vm = integrate(POST.Vm, spines); dend_budget -= integrate_cost // EMIT integrated Vm → SOMA // @cut affords: SPATIAL EXTENT — summed spine input over the branch (space made present at one site); the branch-grain read no spine has [ms, branch space]
// ===== RECOVERY (restore branch excitability; alter-ego of propagation) =====
DAY | NOT_bAP · recovered: // Ca clearance
@@ -780,14 +784,14 @@ DAY | AP: // integrate + fire (
if soma_fast_trace > traj_thr and soma_fast_trace_rising:
soma_endurance_need += soma_fast_trace
exit
fired = True; soma_budget -= ap_cost // EMIT fired → AXON, DEND
fired = True; soma_budget -= ap_cost // EMIT fired → AXON, DEND // @cut affords: THE DISCRETE FIRE EVENT — continuous branch integration read out as one all-or-nothing spike [ms]; over a train, the neuron's own FIRING FREQUENCY [sec]
// deposit the THREE traces from one AP (all PREPARATION content, deposited in the action):
soma_Na_inactivation += ap_amp // → refractory (recovery will undo this)
soma_adaptation += ap_contrib // → threshold rise (next-spike timing)
soma_fast_trace += nuclear_Ca(); soma_budget -= nuclear_cost // → tag (for NIGHT)
soma_fast_trace += nuclear_Ca(); soma_budget -= nuclear_cost // → tag (for NIGHT) // @cut affords: cell-wide activity accumulation (nuclear integral → consolidation) [min→hr]
if soma_fast_trace > elig: soma_possible_tag += soma_fast_trace
if dopamine > dop_thr and soma_possible_tag > tag_thr:
soma_tag += dopamine × soma_possible_tag
soma_tag += dopamine × soma_possible_tag // @cut affords: cell-wide structural-consolidation need (precision pathway; dopamine-gated) [hr→night]
soma_budget -= creb_cost
soma_emitted_activity += 1; soma_emitted_structure = soma_structure // NEURON sums these
@@ -800,7 +804,7 @@ DAY | NOT_AP: // de-inactivate + re
// ===== PREPARATION (shape the next spike AND the NIGHT; ⊂ NOT_AP, sustained quiet) =====
DAY | NOT_SPIKE_TRAIN:
branch_Vm = integrate(DEND.branch_Vm, branches) // RECEIVE latest branch input
branch_Vm = integrate(DEND.branch_Vm, branches) // RECEIVE latest branch input // @cut affords: SPATIAL CONVERGENCE — all branches summed at the whole-cell grain (the neuron's total input, one level above the branch) [ms, cell space]
// for next-spike timing: refractory alignment (suprathreshold input during refractory)
if branch_Vm > threshold and soma_Na_inactivation > inactivation:
soma_refractory_alignment += (branch_Vm - threshold) × soma_Na_inactivation
@@ -913,7 +917,7 @@ DAY | AP: // propagate the spik
if axon_fast_trace > traj_thr: // FUEL-limited → endurance (a PREPARATION deposit)
axon_endurance_need += axon_fast_trace
delivered = fired × reliability; axon_budget -= prop_cost × delivered // EMIT delivered → boutons
axon_fast_trace += delivered // deposit fast trace
axon_fast_trace += delivered // deposit fast trace // @cut affords: propagation reliability / conduction fidelity over distance [ms]. (AXON is a near-pure relay: it integrates almost nothing, so it affords very few reads — the sparseness is the point.)
// ===== RECOVERY (restore axon excitability; alter-ego of propagation) =====
DAY | NOT_AP · recovered: // ionic re-equilibration
@@ -1033,15 +1037,15 @@ astrocyte's produced material and energy.
// ===== ACTION (clear glutamate + release D-serine = POST's gain; the defining local deed) =====
DAY | CONTINUOUS · action | per astrosynapse i:
glutamate[i] -= astro_structure[i].EAAT × glutamate[i]·Δt; astro_budget[i] -= clearance·EAAT_cost // clear (timing)
glutamate[i] -= astro_structure[i].EAAT × glutamate[i]·Δt; astro_budget[i] -= clearance·EAAT_cost // clear (timing) // @cut affords: TIMING — dwell time / temporal window (how long transmitter persists; clearance sets it) [ms, cleft space]
gain = astro_structure[i].Dserine_tonic × astro_prime[i] × (1 + spike_gain × astro_Ca_spike) // prime POST gain
astro_Dserine[i] += gain·Δt // → POST (intensity)
if glutamate[i] > spillover: // SPILLOVER = PRE outpowered coverage (error signal)
astro_fast_trace[i] += mGluR_Ca() // deposit Ca fast trace (this action's residue)
astro_fast_trace[i] += mGluR_Ca() // deposit Ca fast trace (this action's residue) // @cut affords: SPATIAL containment — spillover extent (coverage adequacy: contained vs shared) [ms, cleft space]
want = sat(astro_fast_trace[i], K_Dserine) × Ds_max
got = min(want, astro_budget[i] × Ds_frac)
astro_Dserine[i] += got; astro_budget[i] -= got·Ds_cost // phasic D-serine (extra gain on spillover)
astro_localCa[i] = astro_fast_trace[i] // EMIT own Ca upward → ASTROCYTE integrates
astro_localCa[i] = astro_fast_trace[i] // EMIT own Ca upward → ASTROCYTE integrates // @cut affords: this synapse's contribution to TERRITORY-scale coincidence (read one level up at the astrocyte spike) [ms→sec, territory space]
if got < want and astro_budget[i] low and astro_fast_trace[i] > traj_thr:
astro_endurance_need[i] += (want - got) // FUEL-limited synthesis → endurance
if astro_fast_trace[i] > overload: emit(shockwave_lockdown) // EMERGENCY