diff --git a/elements/neuron/appunti/2026-06-29-tripartite-synapse_v17.md b/elements/neuron/appunti/2026-06-29-tripartite-synapse_v17.md index 1194706..dcf2e0b 100644 --- a/elements/neuron/appunti/2026-06-29-tripartite-synapse_v17.md +++ b/elements/neuron/appunti/2026-06-29-tripartite-synapse_v17.md @@ -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: ... // @cut affords: [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