703 lines
29 KiB
Markdown
703 lines
29 KiB
Markdown
|
|
---
|
|||
|
|
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
|
|||
|
|
```
|