no ecb messages
This commit is contained in:
@@ -274,3 +274,60 @@ The distinction matters biologically: a private reserve guarantees a component s
|
|||||||
(the bouton can refill its RRP from its own vesicles even when lactate is scarce), while a
|
(the bouton can refill its RRP from its own vesicles even when lactate is scarce), while a
|
||||||
contested supply couples a component's fate to its neighbours' demands (operational budget
|
contested supply couples a component's fate to its neighbours' demands (operational budget
|
||||||
fails first where many active synapses compete for the same lactate).
|
fails first where many active synapses compete for the same lactate).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## PRE ↔ POST interaction: local computation, message-only coupling
|
||||||
|
|
||||||
|
The presynapse and postsynapse never read each other's internal state. They interact only
|
||||||
|
by writing to and reading from shared cleft channels. Each side computes entirely locally on
|
||||||
|
what it has: its own variables plus whatever signals have arrived in the cleft. This is the
|
||||||
|
message-passing realization of the locality principle.
|
||||||
|
|
||||||
|
**Forward channel — glutamate (PRE → POST and ASTRO).** The presynapse writes glutamate via
|
||||||
|
NT_flux. The postsynapse reads it (AMPA, NMDA) and the astrosynapse reads it (clearance,
|
||||||
|
mGluR5). The astrosynapse clears it. PRE never knows whether POST responded — it only emits.
|
||||||
|
|
||||||
|
**Gate channel — astro_Dserine (ASTRO → POST).** The astrosynapse writes D-serine; the
|
||||||
|
postsynapse reads it as the obligatory NMDA co-agonist. POST cannot open NMDA without this
|
||||||
|
arrived signal, but it does not read the astrocyte's state — only the delivered D-serine.
|
||||||
|
|
||||||
|
**Backward channel + — retro_NO (POST → PRE).** When the postsynapse's NMDA opens (Mg²⁺
|
||||||
|
ejected, D-serine present, glutamate bound), nNOS — physically tethered to the NMDA receptor
|
||||||
|
through PSD-95 — synthesises nitric oxide (and, on a slower timescale, BDNF is released).
|
||||||
|
These diffuse retrogradely to the presynapse. Biologically this is the classic retrograde
|
||||||
|
messenger of LTP: it tells the bouton that its release landed on a postsynapse that genuinely
|
||||||
|
responded. In the model, POST emits `retro_NO` proportional to its own NMDA-driven calcium —
|
||||||
|
computed purely from POST's local state — and PRE reads it as `retro_NO_local`.
|
||||||
|
|
||||||
|
`retro_NO_local` is exactly the grounding of the presynaptic endurance signal. The
|
||||||
|
presynapse's local success proxy is "I was releasing strongly" (`pre_fast_trace` high). On
|
||||||
|
its own that only says the bouton was working hard, not that the work mattered. `retro_NO`
|
||||||
|
adds the missing confirmation — that the postsynapse responded — without PRE ever reading
|
||||||
|
POST's calcium. So PRE deposits endurance need as `pre_fast_trace × (1 + retro_NO_local)`:
|
||||||
|
strong release that was confirmed effective makes the strongest claim that fuel, not
|
||||||
|
futility, was what interrupted a forming success. retro_NO is short-lived (NO degrades and
|
||||||
|
diffuses within seconds), so the channel decays fast — confirmation must be recent to count.
|
||||||
|
|
||||||
|
**Backward channel − — retro_eCB (POST → PRE).** When the postsynapse is strongly
|
||||||
|
depolarised, it synthesises endocannabinoids (2-AG, anandamide) that diffuse retrogradely and
|
||||||
|
bind presynaptic CB1 receptors, suppressing release. This is depolarisation-induced
|
||||||
|
suppression of excitation (DSE) — a homeostatic negative feedback: an over-driven postsynapse
|
||||||
|
tells the presynapse to release less. In the model, POST emits `retro_eCB` from its own
|
||||||
|
membrane potential, and PRE reads it as `retro_eCB_local`, which reduces the release drive
|
||||||
|
`sat(...) × (1 - retro_eCB_local)`. Again POST computes from its own state; PRE adjusts from
|
||||||
|
the arrived signal; neither reads the other's interior.
|
||||||
|
|
||||||
|
The two backward channels are opposite-signed messages the postsynapse sends about its own
|
||||||
|
condition: retro_NO says "your input was effective — worth sustaining," retro_eCB says "I am
|
||||||
|
saturated — ease off." Together with the forward glutamate and the D-serine gate, they make
|
||||||
|
the synapse a fully message-coupled system of locally-computing components.
|
||||||
|
|
||||||
|
**Why RRP refill is in NOT_AP only.** During an AP the bouton releases — RRP depletes. Refill
|
||||||
|
(VATPase reloading vesicles from the reserve pool) is a recovery process that proceeds between
|
||||||
|
spikes. Placing `fill(RRP, ...)` only in the NOT_AP context makes the AP context pure
|
||||||
|
depletion and the NOT_AP context pure recovery. A consequence falls out for free: during
|
||||||
|
sustained high-frequency firing there are many AP steps and few NOT_AP steps, so RRP depletes
|
||||||
|
faster than it recovers — short-term depression deepens with frequency, with no explicit
|
||||||
|
depression rule. The release itself is throttled further when budget is low (VATPase refill
|
||||||
|
is energy-limited), coupling metabolic state to the depth of depression.
|
||||||
|
|||||||
@@ -30,6 +30,13 @@ NIGHT variables
|
|||||||
LOCALITY RULE
|
LOCALITY RULE
|
||||||
every evaluation uses only local state + signals that have arrived.
|
every evaluation uses only local state + signals that have arrived.
|
||||||
no component reads another compartment's internal state.
|
no component reads another compartment's internal state.
|
||||||
|
|
||||||
|
CLEFT MESSAGE CHANNELS (the only PRE/POST/ASTRO interaction — each writes, others read)
|
||||||
|
glutamate PRE → POST, ASTRO (forward transmitter; cleared by ASTRO)
|
||||||
|
astro_Dserine ASTRO → POST (NMDA co-agonist gate)
|
||||||
|
retro_NO POST → PRE (+) (NO/BDNF: "release reached a responsive target")
|
||||||
|
retro_eCB POST → PRE (−) (endocannabinoid: "over-driven, suppress release" = DSE)
|
||||||
|
Each channel decays/clears; a component reads a channel into a local copy and computes locally.
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -46,7 +53,7 @@ sat(x, K) = x / (K + x)
|
|||||||
|
|
||||||
```
|
```
|
||||||
K_release K_AMPA K_Dserine
|
K_release K_AMPA K_Dserine
|
||||||
Mg_eject Ca_STP Ca_TAG
|
Mg_eject Ca_STP Ca_TAG eCB_thr
|
||||||
elig dop_thr tag_thr tag_expiry
|
elig dop_thr tag_thr tag_expiry
|
||||||
traj_thr endur_thr
|
traj_thr endur_thr
|
||||||
spillover inactivation overload
|
spillover inactivation overload
|
||||||
@@ -96,24 +103,34 @@ that neighbours compete for.
|
|||||||
## PRE
|
## PRE
|
||||||
|
|
||||||
```
|
```
|
||||||
|
// Backward messages from POST (computed by POST from its own local state, read here):
|
||||||
|
// retro_NO (+) : POST responded — release reached a responsive target
|
||||||
|
// retro_eCB (−) : POST over-driven — suppress release (DSE)
|
||||||
|
// PRE reads these as arrived signals; it never reads POST's internal state.
|
||||||
|
|
||||||
DAY | AP:
|
DAY | AP:
|
||||||
if pre_budget < release_cost:
|
if pre_budget < release_cost:
|
||||||
suppress(NT_flux)
|
suppress(NT_flux)
|
||||||
if pre_fast_trace > traj_thr: // LOCAL success: I released strongly
|
// interrupted LOCAL success: I was releasing strongly (own fast_trace),
|
||||||
pre_endurance_need += pre_fast_trace × (1 + retrograde_local)
|
// confirmed by retro_NO that POST actually responded
|
||||||
|
if pre_fast_trace > traj_thr:
|
||||||
|
pre_endurance_need += pre_fast_trace × (1 + retro_NO_local)
|
||||||
exit
|
exit
|
||||||
pre_fast_trace += spike_Ca(input_freq); pre_fast_trace *= decay(100ms)
|
pre_fast_trace += spike_Ca(input_freq); pre_fast_trace *= decay(100ms)
|
||||||
drive = sat(pre_fast_trace, K_release)
|
drive = sat(pre_fast_trace, K_release) × (1 - retro_eCB_local) // DSE brake from POST
|
||||||
if RRP > 0:
|
if RRP > 0:
|
||||||
NT_flux = RRP × drive
|
NT_flux = RRP × drive
|
||||||
glutamate += NT_flux·Δt; RRP -= NT_flux·Δt; pre_budget -= NT_flux·fusion_cost
|
glutamate += NT_flux·Δt; RRP -= NT_flux·Δt; pre_budget -= NT_flux·fusion_cost
|
||||||
fill(RRP, pre_structure.slot_ceiling, pre_structure.refill_ceiling, vatpase_cost, pre_budget)
|
if glutamate > spillover: drive *= brake // autoreceptor/astro brake (output)
|
||||||
if glutamate > spillover: drive *= brake // output brake (not a fill)
|
// NO fill here — AP only depletes RRP; recovery happens in NOT_AP
|
||||||
|
// (sustained high-frequency firing therefore deepens short-term depression)
|
||||||
|
|
||||||
DAY | NOT_AP:
|
DAY | NOT_AP:
|
||||||
pre_fast_trace *= decay(100ms); pre_endurance_need *= decay(min)
|
pre_fast_trace *= decay(100ms); pre_endurance_need *= decay(min)
|
||||||
refill(pre from astro_lactate[syn] + axon_ship_pre) // contested: lactate + shipment
|
retro_NO_local = retro_NO; retro_NO *= decay(s) // receive + channel clears (NO short-lived)
|
||||||
fill(RRP, pre_structure.slot_ceiling, pre_structure.refill_ceiling, vatpase_cost, pre_budget)
|
retro_eCB_local = retro_eCB; retro_eCB *= decay(s) // receive + channel clears
|
||||||
|
refill(pre from astro_lactate[syn] + axon_ship_pre) // contested: lactate + shipment
|
||||||
|
fill(RRP, pre_structure.slot_ceiling, pre_structure.refill_ceiling, vatpase_cost, pre_budget) // private reserve
|
||||||
if pre_fast_trace > elig: pre_possible_tag += pre_fast_trace
|
if pre_fast_trace > elig: pre_possible_tag += pre_fast_trace
|
||||||
pre_possible_tag *= decay(s); dopamine *= decay(ms)
|
pre_possible_tag *= decay(s); dopamine *= decay(ms)
|
||||||
if dopamine > dop_thr and pre_possible_tag > tag_thr:
|
if dopamine > dop_thr and pre_possible_tag > tag_thr:
|
||||||
@@ -137,6 +154,13 @@ DAY | NOT_bAP:
|
|||||||
// SOURCE 2 — NMDA: large Ca if local coincidence
|
// SOURCE 2 — NMDA: large Ca if local coincidence
|
||||||
if Vm > Mg_eject and astro_Dserine > thr and glutamate > 0:
|
if Vm > Mg_eject and astro_Dserine > thr and glutamate > 0:
|
||||||
post_fast_trace += NMDA_Ca(glutamate)·rise_speed(); post_budget -= NMDA_cost
|
post_fast_trace += NMDA_Ca(glutamate)·rise_speed(); post_budget -= NMDA_cost
|
||||||
|
retro_NO += NO_emit(post_fast_trace); post_budget -= NO_synth_cost
|
||||||
|
// POST → PRE (+): nNOS coupled to NMDA emits NO/BDNF — "your release was effective"
|
||||||
|
|
||||||
|
// backward brake to PRE (−): strong depolarization → endocannabinoid (DSE)
|
||||||
|
if Vm > eCB_thr:
|
||||||
|
retro_eCB += eCB_emit(Vm); post_budget -= eCB_synth_cost
|
||||||
|
// POST → PRE (−): "I am over-driven — reduce release"
|
||||||
|
|
||||||
post_fast_trace *= decay(ms)
|
post_fast_trace *= decay(ms)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user