28 KiB
Trypartite synapse
Here is the descriptive synthesis, structured around the three closures: context, energy budget, and traces.
The Fundamental Pattern
Every behavior in this system — whether a single vesicle release or a permanent architectural rewrite — obeys the same three-part closure: it occurs only within a context that permits it, consumes from an energy budget that constrains it, and deposits traces that bias what happens next. Nothing is free, nothing is contextless, and nothing is without consequence for the future.
The Fast Scale: Every Spike is Contextual, Budgeted, and Traced
When an action potential arrives, the presynapse does not simply release glutamate. It first checks whether its local ATP budget — the mitochondrial capacity of that specific bouton — can afford the release cost. If the budget is exhausted, the bouton goes silent regardless of the electrical input. Context here is the current state of the readily-releasable pool and the residual calcium left over from recent firing. A bouton that has been firing frequently carries elevated residual calcium, which biases the release probability upward — this is not a new decision but the consequence of past behavior already written into the calcium trace. The release itself then deposits a new trace: the residual calcium rises slightly higher, the pool shrinks by exactly the number of vesicles released, and the mitochondrial budget decrements. Each of these three changes will influence the next spike.
The astrocyte responds to the glutamate that escapes the cleft, but only if the spillover crosses its low-affinity threshold — meaning the astrocyte's response is itself gated by context: it does not react to normal sparse firing, only to genuine overflow. When it does respond, it draws from its own D-serine synthesis budget, which is rate-limited by how much serine racemase enzyme is currently available across its entire territory. The D-serine it releases is a trace deposited into the extracellular space: it temporarily widens the NMDA detection window for the postsynapse, making it easier for the next wavefront to unlock calcium entry. Simultaneously the astrocyte's local calcium rises — a trace of the overflow event that will itself gate whether D-serine escalates further or whether a global alarm fires.
The postsynapse responds to glutamate proportionally to how many AMPA receptors are currently on its surface — a slow-scale structural trace left by past potentiation or depression events. Whether NMDA receptors open depends on two simultaneous conditions: the membrane must be sufficiently depolarized, and D-serine must be present. Both are traces of context — the voltage reflects recent AMPA current history, the D-serine reflects recent astrocyte activation history. When NMDA opens, it deposits the most important fast-scale trace: a calcium rise whose amplitude and speed are recorded by the competing enzyme systems CaMKII and PP1/PP2B, priming the system to evaluate whether structural change is warranted.
At the end of each cycle, the astrocyte clears residual glutamate and converts glucose into lactate, refueling both pre and post. But the lactate output is capped by the vascular glucose supply — a hard ceiling that cannot be exceeded regardless of demand. A heavily active synapse therefore progressively depletes the local energy budget, and if the ceiling is hit, refill rates slow and the presynapse begins to depress — not because of any signaling decision, but because the energy trace of recent activity has accumulated to the point of exhaustion.
The Intermediate Scale: Context Gates Determine Whether Traces Persist
At sustained high frequencies, the intermediate scale kicks in as an amplification and gating layer on top of the fast scale. The presynapse mobilizes its reserve vesicle pool into the readily-releasable pool — but only if the reserve is non-empty, meaning this mobilization is budgeted by whatever deep storage was accumulated during prior rest periods. The mobilization leaves a trace: the readily-releasable pool is now larger, and subsequent spikes will release more, which in turn accelerates budget depletion.
The postsynapse plants a synaptic tag when sustained depolarization occurs. This tag is not a signal — it is a molecular marker that puts this spine into a competitive queue for plasticity proteins drifting along the dendritic segment from the soma. The tag is a trace of the intermediate-scale event that persists until either the proteins are captured and the tag is consumed, or the save signal never arrives and the tag expires, leaving no structural consequence.
The neuromodulatory broadcast — dopamine or norepinephrine — is the most important contextual signal at this scale. It does not carry information about what happened at the synapse. It carries information about whether the broader organism considers the current moment behaviorally significant. When it arrives above threshold, it activates PKA, which phosphorylates three targets in sequence. Each phosphorylation is itself a trace: GluA1-Ser845 priming lowers the threshold for AMPA insertion in the future; DARPP-32 phosphorylation silences the LTD phosphatase, temporarily erasing the competing forgetting signal; CREB activation enables gene expression that will produce structural proteins hours later. None of these traces do anything by themselves — they are permissions and blockades that will only matter if the slow-scale commit function runs before they decay.
Acetylcholine from the basal forebrain provides a parallel context signal that shifts the global LTP threshold downward — not for any one synapse but for the entire dendritic segment and axonal arbor simultaneously. It is a broadcast that says the organism is in an attentive state where incoming patterns are worth encoding, making the whole system more likely to cross the thresholds that trigger structural change.
The Slow Scale: Structural Commits are Budgeted Negotiations Across Three Compartments
When the slow-scale commit function runs, it first evaluates whether three independently generated traces are simultaneously present: the calcium event trace in the postsynapse, the overflow trace registered by the astrocyte's mGluR5 receptors, and the neuromodulatory context trace stored in the PKA phosphorylation state. All three must be true. The calcium event alone is insufficient — without overflow confirmation, the system cannot be sure the activity was genuinely strong. The overflow alone is insufficient — without the neuromodulatory save signal, the activity may have been strong but not worth permanently encoding. Only the conjunction of all three triggers the structural rewrite.
When it does trigger, the structural rewrite is not a binary event but a budgeted negotiation across three territories simultaneously. The presynapse requests axonal proteins from the shared pool — but this pool is competed for by every tagged bouton on the same axon, and priority is given to tagged boutons in proportion to when they were tagged. What is granted determines how much the active zone actually expands, how many new vesicle docking slots are installed, and how much the release probability increases — all of which become structural traces that will bias every future spike from that bouton. The postsynapse requests AMPA receptors from the local dendritic endosomal reserve and actin machinery from the segment-level pool — both finite, both competed for by neighboring tagged spines. What is granted determines how many receptors are anchored and how large the spine head grows — structural traces that will amplify or dampen every future wavefront. The astrocyte requests from its own territory-level pools of D-serine synthesis capacity, ECM proteins, and perisynaptic process extensions — all capped ultimately by the astrocyte's ATP budget, which is itself capped by the vascular glucose ceiling.
If any of the three requests is only partially granted because the budget is insufficient, the deficit is queued and the structural change is partial. The remainder waits for the replenishment cycle — which peaks during sleep, when somatic protein synthesis runs at maximum rate driven by CREB, pools refill across all three territories, and queued deficits are resolved. This is why a memory that feels consolidated after waking may not be fully structurally committed until after sleep: the budgets were not available in the moment, and the physical rewrite was deferred.
Critically, every resource consumed in LTP potentiation comes at the direct expense of neighboring synapses on the same axon and dendrite. When the pool is exhausted, untagged neighbors passively lose resources — their AMPA counts and release probabilities fall not because any signal told them to depress, but because the shared budget was captured by the tagged synapse. This heterosynaptic depression is not a separate mechanism but the automatic consequence of resource accounting: the budget is closed, and what one synapse gains, its neighbors lose.
In the depression branch the same logic runs in reverse, but with a crucial difference: dismantled resources are returned to the shared pools rather than consumed. Internalized AMPA receptors go back to the dendritic reserve. Removed active zone proteins go back to the axonal pool. Freed astrocyte process extensions become available for reallocation to other synapses. Depression is therefore not just a weakening of one synapse — it is a redistribution of resources that makes neighboring potentiation more affordable. The system is globally conservative: it does not generate new resources through activity, it only reallocates existing ones.
The Astrocyte as the Budget Authority
Throughout all three scales, the astrocyte occupies a unique role: it is simultaneously a participant in the signaling (depositing D-serine traces, sensing overflow), the manager of the environmental context (controlling diffusion geometry through perisynaptic distance), and the gatekeeper of the energy supply (converting glucose to lactate and distributing it to pre and post). Its perisynaptic distance variable is the one structural trace that amplifies rather than merely reflects the direction of change — when it moves inward during LTP, it makes every future event at that synapse more likely to cross every threshold in the system; when it moves outward during LTD, it makes every future event less likely. The astrocyte does not decide the direction of change, but once the direction is determined, it deepens it — spending its own process extension budget to do so, and being therefore constrained by the same resource logic as everything else.
The entire system is therefore best understood not as a collection of signaling pathways but as a closed resource economy operating across three nested spatial scales — the synapse, the dendritic or axonal segment, and the astrocyte territory — in which every behavior is a withdrawal from a budget accumulated by prior rest, every trace is a deposit that shifts the probability of future withdrawals, and the direction of structural change is determined by whether the contextual traces of event, overflow, and neuromodulatory validation happen to coincide before any of them decays.
Tripartite Synapse — Full Budget-Aware Pseudocode
Color key: PRE = presynapse · POST = postsynapse · ASTRO = astrocyte · SIG = signal/neuromodulator · BUD = budget/resource pool
Shared Resource Pools — one per territory
// ── Axonal arbor: shared across all boutons on one axon ───────────────
BUD axon_vesicle_protein_pool // RIM, Munc13, VGCC subunits for AZ expansion
BUD axon_mitochondria_capacity // ATP ceiling for vesicle release and refill
BUD axon_tagged_boutons // set of boutons competing for drifting proteins
// ── Dendritic segment: shared across all spines on one branch ─────────
BUD dendrite_receptor_reserve // local endosomal AMPA pool — not instantly replenished
BUD dendrite_actin_machinery // Rac1/RhoA + actin monomers for spine enlargement
BUD dendrite_protein_flux // plasticity proteins arriving from soma via CREB
BUD dendrite_tagged_spines // set of spines competing for protein flux
// ── Astrocyte territory: shared across all wrapped synapses ───────────
BUD astro_serine_racemase_cap // enzyme ceiling for D-serine synthesis rate
BUD astro_EAAT_pool // transporter protein for glutamate clearance
BUD astro_ECM_protein_pool // Glypicans, Thrombospondins for sealing
BUD astro_process_extensions // finite perisynaptic processes — selectively allocated
BUD astro_ATP_budget // total ATP — drives clearance, synthesis, motility
BUD astro_lactate_ceiling // hard cap set by capillary glucose supply
// ── Soma: shared across the entire neuron ─────────────────────────────
BUD soma_protein_synthesis_rate // CREB-driven — peaks during sleep
BUD soma_receptor_synthesis_rate // new AMPA subunits per hour
Global State Variables
// ── Fast (ms–s): wave propagation ─────────────────────────────────────
// Presynapse
PRE pre_Ca_residual // leftover Ca²⁺ between spikes — short-term trace
PRE vesicle_release_prob // P(0.1–1.0) per docking slot
PRE RRP_pool // readily-releasable vesicle pool
PRE reserve_pool // chained vesicles in deep storage
// Postsynapse
POST membrane_potential // Vm — depolarization state
POST NMDA_Mg_block // bool — mechanical clamp on/off
POST post_Ca_amplitude // peak [Ca²⁺] rise in spine
POST post_Ca_rise_speed // d(Ca)/dt — fast=LTP signal, slow=LTD signal
// Astrocyte
ASTRO glutamate_cleft // [glu] in synaptic cleft
ASTRO glutamate_spillover // extrasynaptic [glu] — saturates mGluRs
ASTRO astro_Ca_local // IP3-triggered local rise near synapse
ASTRO astro_Ca_global // soma-wide wave — network overload flag
ASTRO D_serine_release // gliotransmitter — NMDA co-agonist pulse
ASTRO lactate_out // fuel export rate to pre and post
// ── Intermediate (s–min): temporary tuning ────────────────────────────
SIG mGluR2_3_activation // presynaptic Gi — autoinhibitory brake
SIG mGluR5_activation // astrocytic Gq — IP3→Ca²⁺→D-serine cascade
SIG cAMP_level // set by dopamine/NE via Gs → adenylyl cyclase
SIG PKA_activity // downstream of cAMP
SIG GluA1_Ser845_primed // bool — AMPA insertion threshold lowered by PKA
SIG DARPP32_phospho // bool — PP1 (LTD phosphatase) silenced by PKA
SIG CREB_active // bool — structural gene expression enabled
// ── Slow (h–weeks): structural architecture ───────────────────────────
POST AMPA_count // surface receptors — postsynaptic sensitivity
POST spine_volume // physical size of dendritic spine
PRE active_zone_size // docking slot count
PRE RRP_pool_capacity // max readily-releasable pool
PRE VGCC_clustering // Ca²⁺ channels beneath active zone
ASTRO perisynaptic_distance // how close astrocyte walls are to synapse
ASTRO ECM_integrity // extracellular matrix density
ASTRO D_serine_tonic_level // baseline co-agonist supply (sustained)
ASTRO glutamate_clearance_rate // EAAT transporter density
Budget Allocation Functions
function request_axon_resources(bouton_id, req_AZ):
available = axon_vesicle_protein_pool × tag_priority(bouton_id, axon_tagged_boutons)
granted = min(req_AZ, available)
axon_vesicle_protein_pool -= granted
if granted < req_AZ:
trigger(heterosynaptic_depression, neighbors(bouton_id)) // passive depletion
return granted
function request_dendrite_resources(spine_id, req_AMPA, req_actin):
priority = tag_priority(spine_id, dendrite_tagged_spines)
g_AMPA = min(req_AMPA, dendrite_receptor_reserve × priority)
g_actin = min(req_actin, dendrite_actin_machinery × priority)
dendrite_receptor_reserve -= g_AMPA
dendrite_actin_machinery -= g_actin
if g_AMPA < req_AMPA:
queue(spine_id, deficit, dendrite_protein_flux) // wait for soma delivery
trigger(heterosynaptic_depression, neighbors(spine_id))
return (g_AMPA, g_actin)
function request_astro_resources(syn_id, req_Ds, req_ECM, req_proc):
g_Ds = min(req_Ds, astro_serine_racemase_cap)
g_ECM = min(req_ECM, astro_ECM_protein_pool)
g_proc = min(req_proc, astro_process_extensions)
ATP_cost = compute_ATP(g_Ds, g_ECM, g_proc)
if ATP_cost > astro_ATP_budget:
scale_down(g_Ds, g_ECM, g_proc) // proportional rationing
astro_serine_racemase_cap -= g_Ds
astro_ECM_protein_pool -= g_ECM
astro_process_extensions -= g_proc
astro_ATP_budget -= ATP_cost
return (g_Ds, g_ECM, g_proc)
function replenish_budgets(Δt):
// Pools recover over time — rates set by metabolic and synthetic capacity
axon_vesicle_protein_pool += protein_transport_rate(axon) × Δt
dendrite_receptor_reserve += soma_receptor_synthesis_rate × delivery_fraction() × Δt
dendrite_actin_machinery += actin_recovery_rate() × Δt
dendrite_protein_flux = soma_protein_synthesis_rate // set by CREB, peaks during sleep
astro_serine_racemase_cap += enzyme_synthesis_rate() × Δt
astro_ECM_protein_pool += ECM_synthesis_rate() × Δt
astro_process_extensions += process_recovery_rate() × Δt // slow — hours timescale
astro_ATP_budget += glycolysis(astro_lactate_ceiling) × Δt
astro_lactate_ceiling = capillary_glucose_supply() // vascular hard ceiling
soma_protein_synthesis_rate = CREB_driven_expression() // elevated during sleep replay
Fast Time Scale — Wave Propagation (ms → s)
function fire_action_potential(input_freq):
// Presynapse: release gated by ATP budget
if axon_mitochondria_capacity > release_ATP_cost:
pre_Ca_residual += spike_influx(input_freq)
pre_Ca_residual *= decay(τ ≈ 100ms)
vesicle_release_prob *= facilitation(pre_Ca_residual)
released = binomial(RRP_pool, vesicle_release_prob)
glutamate_cleft = released × quantal_content
RRP_pool -= released
axon_mitochondria_capacity -= release_ATP_cost
else:
suppress(release) // ATP-depleted bouton goes silent
// Astrocyte: overflow sensing — D-serine draw budget-checked
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
mGluR5_activation = True
astro_Ca_local += IP3_cascade(PLC)
(g_Ds, _, _) = request_astro_resources(syn_id, proportional_to(astro_Ca_local), 0, 0)
D_serine_release += g_Ds // may be less than ideal if budget low
mGluR2_3_activation = True // Gi arm: brake presynapse regardless
cAMP_level -= Gi_inhibition(adenylyl_cyclase)
vesicle_release_prob -= VGCC_suppression()
// Astrocyte: global overload check
astro_Ca_global = soma_wave(astro_Ca_local > OVERLOAD_threshold)
if astro_Ca_global: trigger(shockwave_lockdown)
// Postsynapse: AMPA current + NMDA coincidence gate
membrane_potential += glutamate_cleft × AMPA_count
if membrane_potential > -40mV and D_serine_release > threshold:
NMDA_Mg_block = False
post_Ca_amplitude += NMDA_influx(glutamate_cleft)
post_Ca_rise_speed = d(post_Ca_amplitude) / dt
// Astrocyte: clearance + fuel — capped at vascular ceiling
glutamate_cleft -= glutamate_clearance_rate × Δt
lactate_out = min(glycolysis_rate(glutamate_clearance_rate), astro_lactate_ceiling)
membrane_potential restored by NaK_ATPase(lactate_out)
RRP_pool refilled by VATPase(lactate_out)
astro_ATP_budget -= clearance_ATP_cost(glutamate_clearance_rate)
Intermediate Time Scale — Temporary Tuning (s → min)
function short_term_plasticity(input_freq, duration):
// Presynapse: facilitate or depress — pool-limited
if input_freq > 20Hz:
vesicle_release_prob *= 1.3
mobilize(reserve_pool → RRP_pool) // only if reserve_pool > 0
elif input_freq < 5Hz:
vesicle_release_prob *= 0.7 // pool depletes faster than refill
// Postsynapse: NMDA priming + plant synaptic tag
if input_freq >= 50Hz and duration > 1s:
NMDA_Mg_block = False
post_Ca_amplitude accumulates
dendrite_tagged_spines.add(spine_id) // enters competition for drifting proteins
// Astrocyte: escalate D-serine — budget-checked
if astro_Ca_local > local_threshold:
(g_Ds, _, _) = request_astro_resources(syn_id, gliotransmitter_pulse(), 0, 0)
D_serine_release += g_Ds
// Neuromodulators: set context gate + plant axonal tag
if dopamine_level > D1_threshold or NE_level > β_threshold:
cAMP_level += Gs_activation(adenylyl_cyclase)
PKA_activity = proportional_to(cAMP_level)
phosphorylate(GluA1, Ser845) → GluA1_Ser845_primed = True
phosphorylate(DARPP32) → DARPP32_phospho = True
translocate(PKA → nucleus) → CREB_active = True
axon_tagged_boutons.add(bouton_id) // captures drifting axonal proteins
LTP_threshold *= (1 / (1 + ACh_level × mAChR_gain))
Slow Time Scale — Structural Commit (h → weeks)
function commit_to_structural_change(bouton_id, spine_id, syn_id):
// Three-layer hierarchical filter
event_detected = post_Ca_amplitude > Ca_HIGH
overflow_sensed = mGluR5_activation == True
context_validated = DARPP32_phospho and GluA1_Ser845_primed
// ── Branch 1: LTP — all budgets requested simultaneously ──────────
if event_detected and overflow_sensed and context_validated:
g_AZ = request_axon_resources(bouton_id, AZ_expansion_cost)
(g_AMPA, g_actin) = request_dendrite_resources(spine_id, AMPA_cost, actin_cost)
(g_Ds, g_ECM, g_pr) = request_astro_resources(syn_id, Ds_cost, ECM_cost, proc_cost)
// Postsynapse: commit proportional to granted resources
activate(CaMKII)
AMPA_count += receptor_insertion(CaMKII, g_AMPA)
spine_volume *= (1 + spine_scale(g_actin))
// Presynapse: commit proportional to granted resources
active_zone_size += g_AZ
RRP_pool_capacity += pool_expansion(active_zone_size)
VGCC_clustering += cluster_beneath_AZ(g_AZ)
vesicle_release_prob += scale_with(g_AZ)
// Astrocyte: commit proportional to granted resources
perisynaptic_distance -= g_pr // walls IN → tighter wrap
ECM_integrity += g_ECM
D_serine_tonic_level += g_Ds
glutamate_clearance_rate *= (1 - clearance_scale(g_pr))
// Partial grants: queue deficit — fulfilled when soma replenishes pools
if g_AMPA < AMPA_cost or g_AZ < AZ_expansion_cost:
queue(bouton_id, spine_id, deficit, dendrite_protein_flux)
axon_tagged_boutons.remove(bouton_id)
dendrite_tagged_spines.remove(spine_id)
return "potentiated" // may be partial if budgets constrained
// ── Branch 2: temporary only — no structural budget drawn ─────────
elif event_detected and not context_validated:
AMPA_count += transient_insertion() // reverses — reserve not permanently drawn
vesicle_release_prob += transient_facilitation()
dendrite_tagged_spines.remove(spine_id) // tag expires without save signal
axon_tagged_boutons.remove(bouton_id)
return "temporary facilitation only"
// ── Branch 3: LTD — resources returned to pool ────────────────────
elif event_detected and not overflow_sensed and not context_validated:
// Postsynapse: internalize receptors — returned to reserve
activate(PP1)
rec_AMPA = receptor_internalization(PP1)
AMPA_count -= rec_AMPA
dendrite_receptor_reserve += rec_AMPA // returned to local pool
spine_volume *= 0.7
dendrite_actin_machinery += actin_depolymerization() // freed actin returned
// Presynapse: dismantle launchpad — proteins returned to axonal pool
rec_AZ = docking_slot_removal()
active_zone_size -= rec_AZ
axon_vesicle_protein_pool += rec_AZ // returned for reuse elsewhere
RRP_pool_capacity -= pool_contraction()
VGCC_clustering -= scatter_VGCCs()
vesicle_release_prob *= 0.6
// Astrocyte: dissolve matrix — resources partially recycled
rec_ECM = secrete(MMPs)
ECM_integrity -= rec_ECM
astro_ECM_protein_pool += rec_ECM × recycling_fraction // partial recovery
D_serine_tonic_level = 0
perisynaptic_distance += process_extension()
astro_process_extensions += freed_process // process freed for reallocation
glutamate_clearance_rate *= 1.2
return "depressed"
// ── Branch 4: baseline ────────────────────────────────────────────
else:
return "baseline — no change"
Heterosynaptic Depression — Passive Resource Depletion
function heterosynaptic_depression(neighbor_ids):
// Triggered when a tagged synapse exhausts the shared pool
// No active signal required — purely a consequence of budget depletion
for n in neighbor_ids:
if n not in dendrite_tagged_spines and n not in axon_tagged_boutons:
AMPA_count[n] -= passive_depletion_rate()
vesicle_release_prob[n] -= passive_depletion_rate()
Special Case — Shockwave Lockdown (>100Hz uncoordinated)
function shockwave_lockdown():
astro_Ca_global = GLOBAL_WAVE
release(GABA, ATP) // emergency flood — bypasses normal budget gate
rec_AMPA = mass_internalization()
AMPA_count -= rec_AMPA
dendrite_receptor_reserve += rec_AMPA // receptors returned to reserve
membrane_potential = HYPERPOLARIZED
cluster(VGCC → beneath_active_zone) // overdrive — bypasses normal budget gate
astro_ATP_budget -= emergency_response_cost() // rapid budget depletion
Energy Supply Chain — Metabolic Gating (continuous)
function metabolic_loop(Δt):
glucose_uptake = blood_capillary_supply() // hard vascular ceiling
lactate_out = min(glycolysis(glucose_uptake, glutamate_clearance_rate),
astro_lactate_ceiling)
lactate_out *= load_factor(glutamate_clearance_rate)
RRP_pool refill rate ∝ VATPase(lactate_out)
membrane_potential reset ∝ NaK_ATPase(lactate_out)
astro_ATP_budget += glycolysis(lactate_out) × Δt
replenish_budgets(Δt)
Key Asymmetry — Perisynaptic Distance Amplifies Both Directions
// LTP: walls IN → clearance_rate ↓, D_serine_tonic ↑ — self-reinforcing
// LTD: walls OUT → clearance_rate ↑, D_serine_tonic = 0 — self-reinforcing
// Both directions cost astro_process_extensions budget.
// A budget-depleted astrocyte delivers partial changes only — until replenish_budgets runs.
// This is why sleep matters: soma_protein_synthesis_rate peaks during slow-wave sleep,
// replenishing all pools and completing deferred structural commits held in the queue.