29 KiB
29 KiB
Table of Contents
- Tripartite Synapse — Scope & Context Aware Pseudocode v2
- SCOPE: DAY
- PRE — Presynaptic Bouton
- POST — Dendritic Spine
- CONTEXT: NOT_bAP (before back-propagating AP — Hebbian anticipation window)
- CONTEXT: bAP (back-propagating action potential arriving)
- DEND — Dendritic Branch
- SOMA — Cell Body
- ASTRO — Astrocyte
- Special Case — Shockwave Lockdown (>100Hz, uncoordinated, any scope)
- SCOPE: NIGHT
- ALL COMPARTMENTS — Structural Commit
- PRE — Structural Commit (NIGHT)
- POST — Structural Commit (NIGHT)
- DEND — Structural Commit (NIGHT)
- SOMA — Structural Commit (NIGHT)
- ASTRO — Structural Commit (NIGHT)
- Heterosynaptic Depression — Passive Resource Depletion (any scope)
- Energy Supply Chain — Metabolic Gating (DAY scope, CONTINUOUS)
- Key Asymmetries and Closure Summary
include_toc
| include_toc |
|---|
| true |
Tripartite Synapse — Scope & Context Aware Pseudocode v2
Conventions
SCOPE = { DAY, NIGHT }
CONTEXT = { AP, NOT_AP, bAP, NOT_bAP, CONTINUOUS }
Compartments:
PRE = presynaptic bouton
POST = dendritic spine (postsynapse)
ASTRO = astrocyte
DEND = dendritic branch (segment between soma and spines)
SOMA = cell body / nucleus
Budget pools:
BUD = shared resource pool (one per territory)
Trace:
A variable modified by a behavior that persists beyond
the current context and biases future behaviors.
Shared Resource Pools
// ── Axonal arbor ──────────────────────────────────────────────────────
BUD axon_vesicle_protein_pool // RIM, Munc13, VGCC subunits for AZ expansion
BUD axon_mitochondria_capacity // ATP ceiling for vesicle release + refill
BUD axon_tagged_boutons // boutons in competition for drifting proteins
// ── Dendritic branch ──────────────────────────────────────────────────
BUD dend_receptor_reserve // local endosomal AMPA pool per branch
BUD dend_actin_machinery // Rac1/RhoA + actin monomers per branch
BUD dend_protein_flux // plasticity proteins flowing from soma
BUD dend_tagged_spines // spines competing for protein flux
BUD dend_mitochondria_capacity // local ATP budget for branch-level operations
BUD dend_mRNA_pool // locally stored mRNAs for rapid translation
// ── Astrocyte territory ───────────────────────────────────────────────
BUD astro_serine_racemase_cap // enzyme ceiling for D-serine synthesis
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
BUD astro_ATP_budget // total ATP: clearance + synthesis + motility
BUD astro_lactate_ceiling // hard cap from capillary glucose supply
// ── Soma ──────────────────────────────────────────────────────────────
BUD soma_ATP_budget // mitochondrial capacity of cell body
BUD soma_protein_synthesis_rate // CREB-driven — peaks in NIGHT scope
BUD soma_receptor_synthesis_rate// new AMPA/NMDA subunits per hour
BUD soma_organelle_pool // mitochondria + ribosomes available for shipping
BUD soma_mRNA_transcription_rate// rate of new mRNA production (Arc, BDNF, etc.)
Global State Variables
// ── PRE: presynaptic bouton ───────────────────────────────────────────
PRE pre_Ca_residual // TRACE: leftover Ca²⁺ between spikes
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
PRE active_zone_size // SLOW TRACE: docking slot count
PRE RRP_pool_capacity // SLOW TRACE: max RRP
PRE VGCC_clustering // SLOW TRACE: Ca²⁺ channels beneath AZ
// ── POST: dendritic spine ─────────────────────────────────────────────
POST membrane_potential // Vm — local depolarization state
POST NMDA_Mg_block // bool — mechanical clamp on/off
POST post_Ca_amplitude // TRACE: peak [Ca²⁺] rise in spine
POST post_Ca_rise_speed // TRACE: d(Ca)/dt — fast=LTP, slow=LTD
POST spine_tag // TRACE: bool — synaptic tag planted
POST AMPA_count // SLOW TRACE: surface receptors
POST spine_volume // SLOW TRACE: physical spine size
// ── DEND: dendritic branch ────────────────────────────────────────────
DEND branch_voltage // local depolarization propagating from spines
DEND bAP_amplitude // strength of back-propagating AP at this branch
DEND branch_Ca // TRACE: Ca²⁺ in branch shaft (from bAP + spines)
DEND branch_tag // TRACE: bool — branch-level plasticity tag
DEND local_protein_translation // rate of mRNA→protein at branch ribosomes
DEND mitochondria_density // SLOW TRACE: local energy capacity
DEND branch_BDNF_level // TRACE: local BDNF secreted by active spines
// ── SOMA: cell body ───────────────────────────────────────────────────
SOMA membrane_potential // somatic Vm — integrates all dendritic input
SOMA AP_threshold // firing threshold — modulated by neuromodulators
SOMA CREB_phospho // TRACE: bool — transcription factor active
SOMA Arc_mRNA_level // TRACE: activity-regulated mRNA — ships to branches
SOMA BDNF_production_rate // TRACE: neurotrophin synthesis rate
SOMA nuclear_Ca // TRACE: Ca²⁺ in nucleus — gates CREB
SOMA organelle_shipping_queue // queue of mitochondria/ribosomes being sent out
// ── ASTRO: astrocyte ──────────────────────────────────────────────────
ASTRO glutamate_cleft // [glu] in synaptic cleft
ASTRO glutamate_spillover // extrasynaptic [glu] — saturates mGluRs
ASTRO astro_Ca_local // TRACE: IP3-triggered local rise
ASTRO astro_Ca_global // TRACE: soma-wide wave — overload flag
ASTRO D_serine_release // gliotransmitter pulse — NMDA co-agonist
ASTRO D_serine_tonic_level // SLOW TRACE: baseline co-agonist supply
ASTRO perisynaptic_distance // SLOW TRACE: wall distance from synapse
ASTRO ECM_integrity // SLOW TRACE: extracellular matrix density
ASTRO glutamate_clearance_rate // SLOW TRACE: EAAT transporter density
ASTRO lactate_out // fuel export to pre + post + dend
// ── SIG: signaling intermediates ─────────────────────────────────────
SIG mGluR2_3_activation // presynaptic Gi — autoinhibitory brake
SIG mGluR5_activation // astrocytic Gq — IP3→Ca²⁺→D-serine
SIG cAMP_level // TRACE: set by dopamine/NE via Gs
SIG PKA_activity // downstream of cAMP
SIG GluA1_Ser845_primed // TRACE: bool — AMPA insertion primed
SIG DARPP32_phospho // TRACE: bool — LTD phosphatase silenced
SIG CREB_active // TRACE: bool — gene expression enabled
SIG dopamine_level // broadcast: "save" context signal
SIG NE_level // broadcast: arousal / gain signal
SIG ACh_level // broadcast: attention / threshold signal
SIG BDNF_TrkB_signaling // local: branch survival + growth signal
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))
return granted
function request_dend_resources(spine_id, req_AMPA, req_actin):
priority = tag_priority(spine_id, dend_tagged_spines)
g_AMPA = min(req_AMPA, dend_receptor_reserve × priority)
g_actin = min(req_actin, dend_actin_machinery × priority)
dend_receptor_reserve -= g_AMPA
dend_actin_machinery -= g_actin
if g_AMPA < req_AMPA:
queue(spine_id, deficit, dend_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)
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 request_soma_resources(req_proteins, req_receptors, req_organelles):
g_prot = min(req_proteins, soma_protein_synthesis_rate)
g_rec = min(req_receptors, soma_receptor_synthesis_rate)
g_org = min(req_organelles, soma_organelle_pool)
ATP_cost = compute_ATP(g_prot, g_rec, g_org)
if ATP_cost > soma_ATP_budget: scale_down(g_prot, g_rec, g_org)
soma_protein_synthesis_rate -= g_prot
soma_receptor_synthesis_rate -= g_rec
soma_organelle_pool -= g_org
soma_ATP_budget -= ATP_cost
return (g_prot, g_rec, g_org)
function replenish_budgets(Δt):
// Axon
axon_vesicle_protein_pool += protein_transport_rate(axon) × Δt
// Dendritic branch
dend_receptor_reserve += soma_receptor_synthesis_rate × delivery_fraction() × Δt
dend_actin_machinery += actin_recovery_rate() × Δt
dend_protein_flux = soma_protein_synthesis_rate
dend_mRNA_pool += soma_mRNA_transcription_rate × Δt
dend_mitochondria_capacity += organelle_delivery_rate() × Δt
// Astrocyte
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
astro_ATP_budget += glycolysis(astro_lactate_ceiling) × Δt
astro_lactate_ceiling = capillary_glucose_supply() // vascular ceiling
// Soma
soma_protein_synthesis_rate = CREB_driven_expression() // peaks in NIGHT
soma_receptor_synthesis_rate += ribosome_activity() × Δt
soma_organelle_pool += biogenesis_rate() × Δt
soma_ATP_budget += mitochondria_output() × Δt
soma_mRNA_transcription_rate = AP_history_driven(SOMA.AP_rate) // scales with use
SCOPE: DAY
All fast and intermediate behaviors. Structural variables only READ, not written.
PRE — Presynaptic Bouton
CONTEXT: AP (action potential arriving)
scope DAY | context AP:
// Gate 1: energy budget
if axon_mitochondria_capacity < release_ATP_cost:
suppress(release) // silent bouton — budget exhausted
exit context
// Ca²⁺ dynamics — primary fast trace
pre_Ca_residual += spike_influx(input_freq)
pre_Ca_residual *= decay(τ ≈ 100ms) // TRACE: fades unless spikes keep arriving
// Release — gated by residual trace from prior APs
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
// Overflow sensing — activates mGluR brake (cross-compartment)
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
mGluR2_3_activation = True
cAMP_level -= Gi_inhibition(adenylyl_cyclase)
vesicle_release_prob -= VGCC_suppression() // autoinhibitory brake
// Fuel consumed — refill gated by lactate supply
RRP_pool refilled by VATPase(astro.lactate_out)
CONTEXT: NOT_AP (between spikes)
scope DAY | context NOT_AP:
// Residual Ca²⁺ decays — trace erodes passively
pre_Ca_residual *= decay(τ ≈ 100ms)
// Reserve pool mobilization — intermediate tuning, pool-limited
if input_freq_history > 20Hz:
mobilize(reserve_pool → RRP_pool) // only if reserve_pool > 0
// TRACE: RRP_pool now larger
elif input_freq_history < 5Hz:
vesicle_release_prob *= 0.7 // TRACE: depression accumulates
// Neuromodulator context gate — sets axonal tag if save signal present
if dopamine_level > D1_threshold or NE_level > β_threshold:
cAMP_level += Gs_activation(adenylyl_cyclase)
PKA_activity = proportional_to(cAMP_level)
axon_tagged_boutons.add(bouton_id) // TRACE: tag — competes for axonal proteins
POST — Dendritic Spine
CONTEXT: NOT_bAP (before back-propagating AP — Hebbian anticipation window)
scope DAY | context NOT_bAP:
// AMPA current from incoming glutamate
AMPA_current = glutamate_cleft × AMPA_count
membrane_potential += AMPA_current
// NMDA gate: coincidence check with D-serine from astrocyte
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 // TRACE: encodes LTP vs LTD
// TAG PLANTED HERE — before bAP confirms coincidence
// Condition: Ca²⁺ rising, NMDA open, ion channels activated
if post_Ca_amplitude > Ca_TAG_threshold and NMDA_Mg_block == False:
spine_tag = True // TRACE: tag planted in anticipation window
dend_tagged_spines.add(spine_id) // enters competition for drifting proteins
// PKA priming — if neuromodulator context already set
if GluA1_Ser845_primed:
AMPA_insertion_threshold *= 0.7 // easier to anchor receptors later
CONTEXT: bAP (back-propagating action potential arriving)
scope DAY | context bAP:
// bAP depolarizes spine — confirms or rejects the tag planted in NOT_bAP
membrane_potential += bAP_depolarization(dend.bAP_amplitude)
// Coincidence validation: was the tag planted just before bAP?
if spine_tag == True and post_Ca_amplitude > Ca_TAG_threshold:
// Confirmed Hebbian coincidence — escalate Ca²⁺
post_Ca_amplitude += bAP_Ca_boost() // TRACE: amplitude now crosses LTP threshold
post_Ca_rise_speed = d(post_Ca_amplitude) / dt
elif spine_tag == False:
// bAP arrived but no prior glutamate signal — no coincidence
// membrane_potential rises transiently but no Ca²⁺ amplification
pass
// Fuel: NaK pump resets membrane — gated by lactate from astrocyte
membrane_potential restored by NaK_ATPase(astro.lactate_out)
soma_ATP_budget -= bAP_propagation_cost
DEND — Dendritic Branch
CONTEXT: CONTINUOUS (branch is always active as integrator)
scope DAY | context CONTINUOUS:
// Branch integrates spine activity and propagates bAP
branch_voltage = integrate(POST.membrane_potential, all_spines_on_branch)
bAP_amplitude = propagate_bAP(SOMA.AP_fired, branch_geometry)
// TRACE: bAP_amplitude decays with distance from soma
// Branch Ca²⁺ — driven by bAP and local NMDA spillover
branch_Ca += bAP_Ca_influx(bAP_amplitude)
branch_Ca *= decay(τ ≈ 300ms) // TRACE: slower than spine Ca²⁺
// Branch tag — planted when multiple co-active spines detected
if co_active_spines(branch) > branch_tag_threshold:
branch_tag = True // TRACE: branch-level tag for coordinated plasticity
BDNF_TrkB_signaling += local_BDNF_release(branch_Ca) // TRACE: survival signal
// Local translation — mRNA → protein at branch ribosomes
// Only runs if branch_tag is set and mRNA pool available
if branch_tag and dend_mRNA_pool > 0:
local_protein_translation = translate(dend_mRNA_pool, dend_mitochondria_capacity)
dend_mRNA_pool -= local_protein_translation × cost
dend_protein_flux += local_protein_translation // TRACE: locally produced proteins
// Branch energy budget
dend_mitochondria_capacity -= branch_ATP_cost(branch_voltage, local_protein_translation)
// Intermediate tuning: ACh modulates branch excitability globally
LTP_threshold *= (1 / (1 + ACh_level × mAChR_gain))
SOMA — Cell Body
CONTEXT: AP (somatic action potential fired)
scope DAY | context AP:
// Somatic AP triggered when branch_voltage integration crosses threshold
if SOMA.membrane_potential > AP_threshold:
AP_fired = True
// Nuclear Ca²⁺ — key trace for slow-scale gene expression
nuclear_Ca += Ca_influx_from_AP() // TRACE: accumulates with firing rate
nuclear_Ca *= decay(τ ≈ seconds)
// CREB phosphorylation — gated by nuclear Ca²⁺ AND PKA
if nuclear_Ca > Ca_CREB_threshold and PKA_activity > PKA_threshold:
CREB_phospho = True // TRACE: enables gene expression in NIGHT scope
SOMA.Arc_mRNA_level += transcribe(Arc_gene) // TRACE: ships to active branches
SOMA.BDNF_production_rate += transcribe(BDNF_gene)
soma_ATP_budget -= AP_generation_cost
CONTEXT: NOT_AP (between somatic spikes)
scope DAY | context NOT_AP:
// Integrate dendritic input — build toward next AP or not
SOMA.membrane_potential = integrate(DEND.branch_voltage, all_branches)
// Ship mRNA to active dendritic branches — tagged branches receive priority
for branch in dend_tagged_spines:
Arc_mRNA_level → ship_to(branch, priority_fraction) // TRACE: Arc arrives at branch
BDNF_production_rate → modulate(branch_BDNF_level)
// Ship organelles to high-demand branches
if soma_organelle_pool > 0:
soma_organelle_queue.add(branches_ranked_by(branch_Ca))
dend_mitochondria_capacity[top_branch] += deliver_organelle()
soma_organelle_pool -= delivery_cost
// Neuromodulator context received — PKA gate set for all compartments
if dopamine_level > D1_threshold or NE_level > β_threshold:
PKA_activity = proportional_to(cAMP_level)
GluA1_Ser845_primed = True // TRACE: primes all tagged spines
DARPP32_phospho = True // TRACE: silences LTD phosphatase
CREB_active = True // TRACE: gene expression gate open
ASTRO — Astrocyte
CONTEXT: CONTINUOUS (astrocyte monitors territory at all times)
scope DAY | context CONTINUOUS:
// Clearance — always running, rate limited by EAAT pool and ATP budget
glutamate_cleft -= glutamate_clearance_rate × Δt
astro_ATP_budget -= clearance_ATP_cost(glutamate_clearance_rate)
// Overflow detection — gated by spillover threshold (low-affinity mGluR5)
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
mGluR5_activation = True
astro_Ca_local += IP3_cascade(PLC) // TRACE: local Ca²⁺ rises
(g_Ds, _, _) = request_astro_resources(syn_id, proportional_to(astro_Ca_local), 0, 0)
D_serine_release += g_Ds // NMDA co-agonist — may be budget-limited
mGluR2_3_activation = True // simultaneously brakes PRE
// Global overload check
astro_Ca_global = soma_wave(astro_Ca_local > OVERLOAD_threshold)
if astro_Ca_global: trigger(shockwave_lockdown)
// Fuel pipeline — hard-capped at vascular ceiling
lactate_out = min(glycolysis_rate(glutamate_clearance_rate), astro_lactate_ceiling)
deliver(lactate_out → PRE, POST, DEND) // all three compartments draw from this
astro_ATP_budget += glycolysis(lactate_out) × Δt
Special Case — Shockwave Lockdown (>100Hz, uncoordinated, any scope)
scope DAY or NIGHT | context OVERLOAD:
astro_Ca_global = GLOBAL_WAVE
release(GABA, ATP) // emergency — bypasses budget gate
rec_AMPA = POST.mass_internalization()
POST.AMPA_count -= rec_AMPA
dend_receptor_reserve += rec_AMPA // returned to branch reserve
POST.membrane_potential = HYPERPOLARIZED
cluster(PRE.VGCC → beneath_active_zone) // overdrive — signal preserved in chaos
astro_ATP_budget -= emergency_response_cost()
SCOPE: NIGHT
Structural commit, resource replenishment, consolidation. All compartments are modulated. Slow variables now WRITTEN.
ALL COMPARTMENTS — Structural Commit
scope NIGHT:
// Step 1: replenish all budgets — soma protein synthesis peaks here
replenish_budgets(Δt_night)
// Step 2: process somatic shipping queue — fulfill deferred organelle deliveries
for branch in soma_organelle_queue:
dend_mitochondria_capacity[branch] += deliver_organelle()
soma_organelle_pool -= delivery_cost
// Step 3: evaluate structural commit for each tagged synapse
for each (bouton_id, spine_id, syn_id) where spine_tag == True:
commit_to_structural_change(bouton_id, spine_id, syn_id)
// Step 4: homeostatic downscaling — prune unvalidated potentiations
for each synapse where spine_tag == False and disuse_duration > disuse_threshold:
passive_LTD(synapse)
// Step 5: clear all DAY-scope traces that were not committed
for each expired_tag in dend_tagged_spines + axon_tagged_boutons:
expire_tag(expired_tag)
PRE — Structural Commit (NIGHT)
scope NIGHT | PRE:
g_AZ = request_axon_resources(bouton_id, AZ_expansion_cost)
// Commit proportional to granted budget
active_zone_size += g_AZ // SLOW TRACE: permanent AZ expansion
RRP_pool_capacity += pool_expansion(active_zone_size)
VGCC_clustering += cluster_beneath_AZ(g_AZ)
vesicle_release_prob += scale_with(g_AZ)
// If partial grant: deficit queued for next NIGHT cycle
if g_AZ < AZ_expansion_cost:
queue(bouton_id, deficit, axon_vesicle_protein_pool)
axon_tagged_boutons.remove(bouton_id)
// LTD branch: resources returned to pool
if LTD_signal:
rec_AZ = docking_slot_removal()
active_zone_size -= rec_AZ
axon_vesicle_protein_pool += rec_AZ // returned for reuse
RRP_pool_capacity -= pool_contraction()
VGCC_clustering -= scatter_VGCCs()
vesicle_release_prob *= 0.6
POST — Structural Commit (NIGHT)
scope NIGHT | POST:
(g_AMPA, g_actin) = request_dend_resources(spine_id, AMPA_cost, actin_cost)
// Commit proportional to granted budget
activate(CaMKII)
AMPA_count += receptor_insertion(CaMKII, g_AMPA) // SLOW TRACE: permanent receptor gain
spine_volume *= (1 + spine_scale(g_actin)) // SLOW TRACE: spine head enlarged
// Deficit queued for next NIGHT cycle
if g_AMPA < AMPA_cost:
queue(spine_id, deficit, dend_protein_flux)
dend_tagged_spines.remove(spine_id)
spine_tag = False // tag cleared after commit
// LTD branch: resources returned to branch pool
if LTD_signal:
activate(PP1)
rec_AMPA = receptor_internalization(PP1)
AMPA_count -= rec_AMPA
dend_receptor_reserve += rec_AMPA // returned to branch pool
spine_volume *= 0.7
dend_actin_machinery += actin_depolymerization()
DEND — Structural Commit (NIGHT)
scope NIGHT | DEND:
// Branch receives organelles shipped from soma during NIGHT
dend_mitochondria_capacity += soma_organelle_delivery(branch_id) // SLOW TRACE
// Arc mRNA translated into structural proteins at branch ribosomes
if dend_mRNA_pool > Arc_threshold:
new_proteins = translate(dend_mRNA_pool, dend_mitochondria_capacity)
dend_protein_flux += new_proteins // SLOW TRACE: local supply expanded
dend_mRNA_pool -= translation_cost
// Branch BDNF consolidates active branch architecture
if branch_BDNF_level > BDNF_survival_threshold:
dend_mitochondria_density += BDNF_TrkB_signaling × Δt // SLOW TRACE: branch reinforced
else:
dend_mitochondria_density -= pruning_rate() × Δt // SLOW TRACE: branch weakened
// Branch tag cleared
branch_tag = False
SOMA — Structural Commit (NIGHT)
scope NIGHT | SOMA:
// CREB drives transcription — highest rate during NIGHT (slow-wave sleep replay)
if CREB_phospho:
soma_protein_synthesis_rate += CREB_driven_expression() // SLOW TRACE
soma_receptor_synthesis_rate += CREB_driven_expression()
soma_mRNA_transcription_rate += transcription_burst()
// Replenish organelle pool — biogenesis peaks during rest
soma_organelle_pool += mitochondria_biogenesis() × Δt // SLOW TRACE
soma_ATP_budget += overnight_mitochondria_recovery() × Δt
// Homeostatic scaling: if overall firing was too high, scale down all synapses
if soma_AP_rate_history > homeostatic_ceiling:
for each synapse:
AMPA_count[synapse] *= homeostatic_scale_down_factor
vesicle_release_prob[synapse] *= homeostatic_scale_down_factor
// Clear CREB trace if no further consolidation needed
if soma_organelle_queue.empty() and dend_tagged_spines.empty():
CREB_phospho = False
CREB_active = False
ASTRO — Structural Commit (NIGHT)
scope NIGHT | ASTRO:
// Perisynaptic process remodeling — most expensive astrocyte operation
// LTP: walls move IN — seals and insulates the channel
if LTP_signal:
(g_Ds, g_ECM, g_pr) = request_astro_resources(syn_id, Ds_cost, ECM_cost, proc_cost)
perisynaptic_distance -= g_pr // SLOW TRACE: tighter wrap
ECM_integrity += g_ECM // SLOW TRACE: matrix sealed
D_serine_tonic_level += g_Ds // SLOW TRACE: sustained co-agonist
glutamate_clearance_rate *= (1 - clearance_scale(g_pr)) // SLOW TRACE
// LTD: walls move OUT — loosens diffusion barrier, dissolves matrix
if LTD_signal:
rec_ECM = secrete(MMPs)
ECM_integrity -= rec_ECM
astro_ECM_protein_pool += rec_ECM × recycling_fraction // partial recovery
D_serine_tonic_level = 0 // SLOW TRACE: starved
perisynaptic_distance += process_extension()
astro_process_extensions += freed_process // freed for reallocation
glutamate_clearance_rate *= 1.2 // SLOW TRACE
// Replenish astrocyte pools overnight
replenish_budgets(Δt_night)
Heterosynaptic Depression — Passive Resource Depletion (any scope)
scope DAY or NIGHT | triggered by budget exhaustion:
function heterosynaptic_depression(neighbor_ids):
// No active signal — purely consequence of pool depletion
for n in neighbor_ids:
if n not in dend_tagged_spines and n not in axon_tagged_boutons:
POST.AMPA_count[n] -= passive_depletion_rate()
PRE.vesicle_release_prob[n] -= passive_depletion_rate()
Energy Supply Chain — Metabolic Gating (DAY scope, CONTINUOUS)
scope DAY | context CONTINUOUS:
function metabolic_loop(Δt):
glucose_uptake = blood_capillary_supply() // vascular hard ceiling
lactate_out = min(glycolysis(glucose_uptake, glutamate_clearance_rate),
astro_lactate_ceiling)
lactate_out *= load_factor(glutamate_clearance_rate)
// Distribute fuel to all three consumer compartments
PRE.RRP_pool refilled by VATPase(lactate_out × pre_fraction)
POST.membrane_potential reset by NaK_ATPase(lactate_out × post_fraction)
DEND.branch_ops powered by lactate_out × dend_fraction
astro_ATP_budget += glycolysis(lactate_out) × Δt
Key Asymmetries and Closure Summary
// 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
// Cost: astro_process_extensions budget — slow to recover (hours)
// SYNAPTIC TAG — the bridge between DAY and NIGHT
// Planted in DAY (NOT_bAP context) when Ca²⁺ rises before bAP confirms coincidence
// Consumed in NIGHT when structural commit runs and budget is available
// Expires in NIGHT if no save signal arrived during DAY — no structural trace left
// BUDGET CONSERVATION — the system is closed
// LTP draws from shared pools → neighbors passively depressed (heterosynaptic LTD)
// LTD returns resources to pools → neighbors passively enriched
// Net: one synapse's gain is its neighbors' loss, bounded by vascular glucose ceiling
// SLEEP (NIGHT scope) — not passive recovery but active execution
// soma_protein_synthesis_rate peaks → queued deficits fulfilled
// CREB_driven_expression peaks → new structural proteins shipped to tagged branches
// Homeostatic downscaling runs → unvalidated potentiations pruned
// All DAY traces either committed to structure or cleared