50 KiB
50 KiB
Tripartite Synapse — Pseudocode v5
Energy and material flows explicit. Variables aggregated to minimum set.
Part 1 — Conventions
SCOPE = { DAY, NIGHT }
CONTEXT = { AP, NOT_AP, bAP, NOT_bAP, CONTINUOUS }
Variable types:
FIXED = externally imposed — does not change during simulation
VAR = changes dynamically
FAST_TRACE = accumulates and decays within DAY — never reaches NIGHT
role: biases next behavior within same context
TAG = set during DAY, decays slowly, survives to NIGHT
role: gates structural commit in NIGHT
for POST only: two phases — CANDIDATE (DAY) → STABLE (DAY) → NIGHT
BUDGET = single energy variable per compartment
all costs deducted here
MATERIAL = single structural resource variable per compartment
all material draws and returns here
STRUCTURE = slow architectural variable
READ during DAY, WRITTEN only in NIGHT
Part 2 — Fixed Parameters
// Thresholds
FIXED Ca_TAG_threshold // Ca²⁺ level sufficient to set post CANDIDATE tag
FIXED Ca_HIGH // LTP-driving Ca²⁺ amplitude
FIXED Ca_LOW // LTD-driving Ca²⁺ amplitude
FIXED spillover_threshold // cleft saturation threshold for mGluR activation
FIXED eligibility_threshold // minimum fast_trace to be taggable (all components)
FIXED dopamine_threshold // minimum dopamine for tag stabilization
FIXED tagging_threshold // minimum possible_tagging for tag accumulation
FIXED tag_expiry_threshold // minimum tag to survive to NIGHT commit
FIXED homeostatic_ceiling // max soma firing rate before global downscale
FIXED disuse_threshold // silence duration before passive depotentiation
FIXED recycling_fraction // fraction of material recovered after LTD dismantling
// External signals — organism level
FIXED dopamine_level // VTA broadcast — reward/save signal
FIXED NE_level // locus coeruleus — arousal/gain
FIXED ACh_level // basal forebrain — attention/threshold
// Physical constraints
FIXED vascular_glucose_supply // hard energy ceiling — astrocyte root
FIXED branch_geometry // dendritic topology — affects bAP decay
FIXED Ca_cooperativity_n // Hill coefficient for Ca²⁺-driven NT release (~3-4)
FIXED Ca_half_max_K // half-maximal Ca²⁺ for NT release
Part 3 — Energy and Material Declarations
// ── ENERGY: one budget per compartment ────────────────────────────────
VAR astro_budget // ROOT energy variable for synaptic operations
// SOURCE: vascular_glucose_supply → glycolysis
// COSTS: glutamate clearance (EAAT transport)
// D-serine synthesis (serine racemase)
// ECM secretion (Glypicans, Thrombospondins)
// process motility (cytoskeletal remodeling)
// lactate production (exported to pre, post, dend)
// (simplifies: astro_ATP_budget + all enzyme running costs)
VAR astro_lactate // fuel exported by astrocyte → feeds pre, post, dend
// = min(glycolysis(vascular_glucose_supply), astro_budget × export_fraction)
// hard cap: vascular_glucose_supply (FIXED)
VAR pre_budget // bouton energy
// SOURCE: astro_lactate (primary) — via perisynaptic delivery
// COSTS: VGCC opening + vesicle fusion + VATPase refill
// active zone maintenance
// (simplifies: bouton_ATP + VATPase_running_cost)
VAR post_budget // spine energy
// SOURCE: astro_lactate (primary) — via perisynaptic delivery
// COSTS: NaK pump membrane reset
// AMPA receptor lateral diffusion + recycling
// actin remodeling for transient spine changes
// NMDA current handling
// (simplifies: spine_ATP + NaK_ATPase_cost + actin_cycling_cost)
VAR dend_budget // branch energy
// SOURCE: astro_lactate (primary) + soma organelle delivery (minor)
// COSTS: bAP propagation along branch
// local mRNA translation
// protein and organelle transport to spines
// branch calcium handling
// (simplifies: dend_mitochondria_ATP + local_translation_cost)
VAR soma_budget // somatic energy
// SOURCE: own mitochondria (self-fueled — not from astrocyte)
// COSTS: AP generation (Na⁺/K⁺ currents)
// CREB transcription
// protein synthesis machinery
// organelle biogenesis
// shipping to dend and axon
// (simplifies: soma_ATP + synthesis_running_cost)
VAR axon_budget // axonal energy
// SOURCE: soma_budget (primary) + astro_lactate along shaft (minor)
// COSTS: AP propagation at each node of Ranvier
// anterograde motor protein transport
// myelin maintenance
// (simplifies: axon_ATP + transport_running_cost)
// ── MATERIAL: one material variable per compartment ───────────────────
VAR astro_material // astrosynaptic structural components
// SOURCE: astrocyte cell body synthesis
// CONTAINS: EAAT transporter proteins
// serine racemase enzyme
// ECM proteins (Glypicans, Thrombospondins)
// process cytoskeleton components
// D-serine precursor (serine)
// COSTS: drawn by DAY D-serine release (serine consumed)
// drawn by NIGHT ECM secretion and process remodeling
// (simplifies: astro_ECM_pool + racemase_cap + EAAT_pool
// + process_extensions + D_serine_precursor)
VAR pre_material // presynaptic bouton structural components
// SOURCE: soma_material via axon transport (anterograde)
// CONTAINS: RIM, Munc13 (AZ scaffold)
// VGCC subunits
// vesicle membrane proteins
// synaptotagmin, SNARE proteins
// COSTS: drawn by NIGHT active zone expansion
// RETURNS: to shared axonal pool after LTD dismantling
// (simplifies: axon_vesicle_protein_pool + AZ_scaffold_proteins)
VAR post_material // postsynaptic spine structural components
// SOURCE: dend_material (branch local pool + soma delivery)
// CONTAINS: AMPA receptor subunits (GluA1, GluA2)
// PSD scaffold proteins (PSD-95, SHANK)
// actin monomers + polymerization machinery
// CaMKII
// COSTS: drawn by NIGHT receptor anchoring + spine enlargement
// RETURNS: to branch pool after LTD internalization
// (simplifies: dend_receptor_reserve + dend_actin_machinery
// + PSD_scaffold_pool)
VAR dend_material // dendritic branch structural and supply components
// SOURCE: soma_material (shipped during DAY NOT_AP + NIGHT)
// CONTAINS: plasticity proteins (Arc, Homer)
// mRNA pool (Arc mRNA, BDNF mRNA)
// AMPA receptor subunits (in transit to spines)
// organelles (mitochondria for local energy)
// COSTS: drawn by local translation (mRNA consumed)
// drawn by spine delivery (post_material replenishment)
// drawn by NIGHT branch structural expansion
// (simplifies: dend_protein_flux + dend_mRNA_pool
// + dend_organelle_store)
VAR soma_material // somatic production output
// SOURCE: CREB-driven synthesis (own ribosomes + nucleus)
// CONTAINS: all structural proteins for downstream compartments
// mRNA transcripts (Arc, BDNF, receptor subunits)
// organelles (mitochondria, ribosomes)
// COSTS: shipped to dend_material during DAY NOT_AP + NIGHT
// shipped to axon for pre_material replenishment
// depleted by soma's own NIGHT structural commit
// (simplifies: soma_protein_synthesis_rate + soma_organelle_pool
// + soma_receptor_synthesis_rate + mRNA_transcription)
VAR axon_material // axonal transport and structural components
// SOURCE: soma_material (motor proteins, myelin components)
// CONTAINS: kinesin/dynein motor proteins
// microtubule components
// myelin maintenance proteins
// COSTS: drawn by NIGHT axon structural expansion
// consumed continuously by anterograde transport
// (simplifies: transport_machinery + myelination_proteins)
Part 4 — Structural Variables (Written Only in NIGHT)
VAR pre_structure // active zone capacity
// RRP_capacity ∝ pre_structure
// VGCC_coupling ∝ pre_structure
// refill_ceiling ∝ pre_structure
// (simplifies: active_zone_size + VGCC_clustering + RRP_pool_capacity)
VAR post_structure // spine sensitivity capacity
// anchoring_slots ∝ post_structure
// spine_volume ∝ post_structure
// local_reserve ∝ post_structure
// (simplifies: AMPA_count_ceiling + spine_volume + receptor_reserve_ceiling)
VAR dend_structure // branch transmission and supply capacity
// bAP_fidelity ∝ dend_structure × attenuation(position)
// translation_ceiling ∝ dend_structure
// transport_speed ∝ dend_structure
// (simplifies: mitochondria_density + cytoskeletal_integrity
// + mRNA_pool_ceiling)
VAR soma_structure // somatic output and production capacity
// baseline_threshold ∝ 1/soma_structure
// AP_reliability ∝ soma_structure
// synthesis_ceiling ∝ soma_structure
// (simplifies: ion_channel_density + ribosome_density
// + CREB_machinery)
VAR axon_structure // axonal transmission and transport capacity
// propagation_reliability ∝ axon_structure
// transport_rate ∝ axon_structure
// (simplifies: myelination_density + transport_machinery_capacity
// + axonal_mitochondria_density)
VAR astro_structure // astrosynaptic environmental capacity
// perisynaptic_distance ∝ 1/astro_structure
// EAAT_density ∝ astro_structure
// D_serine_tonic ∝ astro_structure
// ECM_integrity ∝ astro_structure
// SELF-REINFORCING in both directions:
// LTP → astro_structure ↑ → signal more contained,
// D-serine tonic ↑ → future LTP easier
// LTD → astro_structure ↓ → signal dilutes,
// D-serine tonic = 0 → future LTD easier
// (simplifies: perisynaptic_distance + ECM_integrity
// + D_serine_tonic_level + EAAT_density)
Part 5 — Trace Variables
// ── Fast traces: DAY only, decay automatically ────────────────────────
FAST_TRACE pre_fast_trace
// += spike_Ca_influx() on each AP
// *= decay(τ ≈ 100ms)
// role: (1) biases NT flux in next AP context (residual Ca²⁺)
// (2) eligibility condition for pre_possible_tagging
// energy: no direct cost — Ca²⁺ dynamics are passive
// material: no direct cost
FAST_TRACE post_fast_trace
// += NMDA_Ca_influx × rise_speed() in NOT_bAP context
// += bAP_Ca_boost() if CANDIDATE tag confirmed in bAP context
// *= decay(τ ≈ tens of ms)
// role: (1) encodes LTP vs LTD instruction (amplitude × speed)
// (2) eligibility condition for post CANDIDATE tag
// energy cost: post_budget -= NMDA_current_cost
// material: no direct cost
FAST_TRACE dend_fast_trace
// += bAP_Ca_influx() + spine_Ca_spillover()
// *= decay(τ ≈ 300ms)
// role: (1) integrates branch co-activity
// (2) eligibility for dend_possible_tagging
// (3) gates local translation rate when dend_tag set
// energy cost: dend_budget -= branch_Ca_handling_cost
// material: no direct cost
FAST_TRACE soma_fast_trace
// += nuclear_Ca_influx() on each somatic AP
// *= decay(τ ≈ seconds)
// role: (1) adaptation — raises AP_threshold with recent firing
// (2) eligibility condition for soma CREB gate
// energy cost: soma_budget -= AP_generation_cost
// material: no direct cost
FAST_TRACE axon_fast_trace
// += AP_propagation_load(input_freq) on each AP
// *= decay(τ ≈ seconds)
// role: (1) drives propagation failure at branch points under high freq
// (2) eligibility for axon_possible_tagging
// energy cost: axon_budget -= AP_propagation_cost
// material: no direct cost
FAST_TRACE astro_fast_trace
// += mGluR5_Ca_influx() when glutamate > spillover_threshold
// *= decay(τ ≈ seconds)
// role: (1) drives D-serine release proportional to magnitude
// (2) eligibility for astro_possible_tagging
// (3) triggers global lockdown when > OVERLOAD_threshold
// energy cost: astro_budget -= D_serine_synthesis_cost
// material cost: astro_material -= D_serine_precursor_cost
// ── Possible tagging: intermediate, decays over seconds–minutes ───────
VAR pre_possible_tagging // += pre_fast_trace when > eligibility_threshold
// *= decay(τ ≈ seconds)
VAR post_possible_tagging // += post_fast_trace when > Ca_TAG_threshold (bAP confirmed)
// *= decay(τ ≈ minutes) — CANDIDATE lifetime
VAR dend_possible_tagging // += dend_fast_trace when > eligibility_threshold
// *= decay(τ ≈ seconds–minutes)
VAR soma_possible_tagging // += soma_fast_trace when > eligibility_threshold
// *= decay(τ ≈ seconds–minutes)
VAR axon_possible_tagging // += axon_fast_trace when > eligibility_threshold
// *= decay(τ ≈ seconds–minutes)
VAR astro_possible_tagging // += astro_fast_trace when > eligibility_threshold
// *= decay(τ ≈ seconds–minutes)
// ── Tags: slow, DAY→NIGHT bridge ──────────────────────────────────────
TAG pre_tag // += dopamine × pre_possible_tagging when both > threshold
// *= decay(τ ≈ hours) — survives to NIGHT
// gates: pre_structure expansion in NIGHT
// energy cost: none — tag is a molecular state, not a process
TAG post_tag // TWO-PHASE for POST only:
// CANDIDATE phase:
// set when post_fast_trace > Ca_TAG_threshold AND bAP confirmed
// decays within minutes if dopamine does not arrive
// STABLE phase:
// += dopamine × post_possible_tagging when both > threshold
// *= decay(τ ≈ hours) — survives to NIGHT
// gates: post_structure expansion in NIGHT
// energy cost: post_budget -= PKA_phosphorylation_cost (minor)
// material cost: none
TAG dend_tag // += dopamine × dend_possible_tagging when both > threshold
// *= decay(τ ≈ hours)
// gates: dend_structure expansion + local translation activation in NIGHT
// energy cost: none
TAG soma_tag // += dopamine × soma_possible_tagging when both > threshold
// *= decay(τ ≈ hours)
// gates: soma_structure expansion + protein synthesis peak in NIGHT
// energy cost: soma_budget -= CREB_phosphorylation_cost (minor)
// material cost: none
TAG axon_tag // += dopamine × axon_possible_tagging when both > threshold
// *= decay(τ ≈ hours)
// gates: axon_structure expansion in NIGHT
// energy cost: none
TAG astro_tag // += dopamine × astro_possible_tagging when both > threshold
// *= decay(τ ≈ hours)
// gates: astro_structure expansion (process retraction + ECM sealing) in NIGHT
// energy cost: none
SCOPE: DAY
Budgets consumed. Fast traces written and decay. Tags set but not cleared. Structures READ only.
PRE | CONTEXT: AP
scope DAY | context AP:
// Energy gate — release requires ATP
if pre_budget < AP_release_cost:
suppress(NT_flux)
exit context
// biological basis: ATP depletion → VGCC cannot open reliably
// Fast trace: residual Ca²⁺ deposit
pre_fast_trace += spike_Ca_influx(input_freq)
pre_fast_trace *= decay(τ = 100ms)
pre_budget -= Ca_handling_cost
// biological basis: Ca²⁺ enters via VGCCs, pumped out by PMCA/NCX
// NT flux: continuous release while RRP has content
// Ca_drive: Hill function — cooperative Ca²⁺ dependence of synaptotagmin
Ca_drive = pre_fast_trace^Ca_cooperativity_n /
(Ca_half_max_K^Ca_cooperativity_n + pre_fast_trace^Ca_cooperativity_n)
if RRP_level > 0:
NT_flux = RRP_level × Ca_drive // proportional to pool × Ca²⁺
glutamate += NT_flux × Δt // cleft concentration rises
RRP_level -= NT_flux × Δt // pool depletes
pre_budget -= NT_flux × vesicle_fusion_cost // ATP per vesicle equivalent
// biological basis: SNARE-mediated vesicle fusion, each event costs ATP
// RRP refill from reserve — rate limited by pre_budget and pre_structure
RRP_refill = min(refill_rate_constant, pre_structure.refill_ceiling)
RRP_level += RRP_refill × Δt
RRP_level = clamp(RRP_level, 0, pre_structure.RRP_capacity)
pre_budget -= RRP_refill × VATPase_cost
// biological basis: VATPase pumps refill vesicles with NT, costs ATP
// Overflow brake — mGluR2/3 Gi-mediated autoinhibition
if glutamate > spillover_threshold:
Ca_drive *= mGluR_brake_factor
// biological basis: extrasynaptic glu activates mGluR2/3 → Gi →
// adenylyl cyclase ↓ → cAMP ↓ → VGCC opening ↓
// Refuel from astrocyte lactate
pre_budget += astro_lactate × pre_fraction
// biological basis: lactate → pyruvate → TCA → ATP via bouton mitochondria
PRE | CONTEXT: NOT_AP
scope DAY | context NOT_AP:
// Fast trace decays — eligibility window closing
pre_fast_trace *= decay(τ = 100ms)
// RRP refills during silence — STP recovery
RRP_refill = min(refill_rate_constant, pre_structure.refill_ceiling)
RRP_level += RRP_refill × Δt
RRP_level = clamp(RRP_level, 0, pre_structure.RRP_capacity)
pre_budget -= RRP_refill × VATPase_cost
// Possible tagging: graded accumulation while eligible
if pre_fast_trace > eligibility_threshold:
pre_possible_tagging += pre_fast_trace
pre_possible_tagging *= decay(τ = seconds)
// Dopamine decays locally
dopamine_local *= decay(τ = hundreds_of_ms)
// biological basis: dopamine reuptake by DAT, enzymatic degradation (MAO, COMT)
// Tag: set only when BOTH local eligibility AND global validation coincide
if dopamine_local > dopamine_threshold and
pre_possible_tagging > tagging_threshold:
pre_tag += dopamine_local × pre_possible_tagging
pre_tag *= decay(τ = hours)
// biological basis: PKA phosphorylation of AZ proteins stabilizes tag
// requires both residual Ca²⁺ eligibility AND dopamine-driven PKA
POST | CONTEXT: NOT_bAP
scope DAY | context NOT_bAP:
// AMPA current — gated by post_structure (READ)
// Occupancy: transient receptor insertion/removal from existing slots
AMPA_current = glutamate × post_structure.sensitivity
Vm += AMPA_current
post_budget -= AMPA_current_cost
// biological basis: AMPA receptor opening → Na⁺ influx → NaK pump cost
// NMDA gate: three-way coincidence
// (1) sufficient depolarization (Mg²⁺ block ejected)
// (2) D-serine from astrosynapse (co-agonist present)
// (3) glutamate bound
if Vm > Mg_eject_threshold and
astro_D_serine > D_serine_threshold:
Ca_influx = NMDA_Ca_influx(glutamate)
post_fast_trace += Ca_influx × rise_speed(Ca_influx)
post_budget -= NMDA_current_cost
// biological basis: NMDA Ca²⁺ influx → CaMKII vs PP1 competition
// fast rise → CaMKII wins → LTP instruction
// slow rise → PP1 wins → LTD instruction
// CANDIDATE tag: set when Ca²⁺ crossed tagging threshold
// This is the Hebbian anticipation — before bAP confirms
if post_fast_trace > Ca_TAG_threshold:
post_possible_tagging += post_fast_trace // graded — higher Ca²⁺ → more contribution
post_possible_tagging *= decay(τ = minutes) // CANDIDATE lifetime — minutes
// biological basis: early CaMKII activation creates labile tag
// decays via phosphatase activity if not stabilized
// Fast trace decays
post_fast_trace *= decay(τ = tens_of_ms)
// Refuel
post_budget += astro_lactate × post_fraction
POST | CONTEXT: bAP
scope DAY | context bAP:
// bAP arrives — strength set by dend_structure.bAP_fidelity (READ)
Vm += bAP_depolarization × dend_structure.bAP_fidelity
post_budget -= bAP_reset_cost
// biological basis: bAP Ca²⁺ entry via VDCCs in spine, NaK reset costs ATP
// Coincidence confirmation: bAP finds CANDIDATE already set
if post_possible_tagging > Ca_TAG_threshold:
post_fast_trace += bAP_Ca_boost() // trace amplified above Ca_HIGH
// biological basis: bAP + prior NMDA Ca²⁺ → supralinear Ca²⁺ summation
// this is the Hebbian coincidence — forward + backward signals
// else: bAP arrives but spine was not active — no amplification, no tag
// Dopamine decays locally
dopamine_local *= decay(τ = hundreds_of_ms)
// STABLE tag: CANDIDATE stabilized by dopamine within window
if dopamine_local > dopamine_threshold and
post_possible_tagging > tagging_threshold:
post_tag += dopamine_local × post_possible_tagging
post_tag *= decay(τ = hours)
post_budget -= PKA_phosphorylation_cost // minor ATP cost for PKA activity
// biological basis: dopamine → D1R → PKA → GluA1-Ser845 phosphorylation
// PKA also phosphorylates DARPP-32 → inhibits PP1
// stabilizes tag against phosphatase-driven decay
DEND | CONTEXT: CONTINUOUS
scope DAY | context CONTINUOUS:
// Integrate spines upward toward soma
branch_Vm = integrate(POST.Vm, all_spines_on_branch)
// Propagate bAP downward — fidelity set by dend_structure (READ)
bAP_local = propagate_bAP(SOMA.AP_fired,
dend_structure.bAP_fidelity,
branch_geometry)
dend_budget -= bAP_propagation_cost
// biological basis: bAP propagation requires Na⁺ channel re-activation
// costs ATP via NaK reset along branch length
// Fast trace: branch Ca²⁺ from bAP + spine spillover
dend_fast_trace += bAP_Ca_influx(bAP_local)
dend_fast_trace += spine_Ca_spillover(active_spines)
dend_fast_trace *= decay(τ = 300ms)
dend_budget -= branch_Ca_handling_cost
// biological basis: Ca²⁺ enters via VDCCs along branch,
// SERCA pump re-sequestration costs ATP
// Possible tagging: branch co-activity threshold
if dend_fast_trace > eligibility_threshold:
dend_possible_tagging += dend_fast_trace
dend_possible_tagging *= decay(τ = seconds)
// Dopamine decays
dopamine_local *= decay(τ = hundreds_of_ms)
// Tag
if dopamine_local > dopamine_threshold and
dend_possible_tagging > tagging_threshold:
dend_tag += dopamine_local × dend_possible_tagging
dend_tag *= decay(τ = hours)
// Local translation: activated when tag set, gated by dend_budget
if dend_tag > tag_expiry_threshold and dend_budget > translation_cost:
local_proteins = translate(dend_material.mRNA_pool,
dend_fast_trace) // rate ∝ fast trace
dend_material.mRNA_pool -= local_proteins × mRNA_cost
post_material += local_proteins × delivery_fraction
dend_budget -= translation_cost
// biological basis: Arc mRNA + polyribosomes at branch
// fast local protein supply for early structural changes
// no soma wait required
// ACh modulates commit threshold globally
commit_threshold *= (1 / (1 + ACh_level × ACh_gain))
// Branch maintenance cost
dend_budget -= branch_maintenance_cost
dend_budget += astro_lactate × dend_fraction
// material: replenished by soma shipping during NOT_AP
SOMA | CONTEXT: AP
scope DAY | context AP:
// Integrate — fires when branch inputs cross threshold
// Threshold modulated by fast trace (adaptation) and neuromodulators
AP_threshold = soma_structure.baseline_threshold
× (1 + adaptation_factor(soma_fast_trace)) // rises with recent firing
× neuromod_factor(NE_level, ACh_level) // NE lowers, ACh sharpens
× refractory_factor(time_since_last_AP) // hard block then graded recovery
if branch_Vm > AP_threshold:
AP_fired = True
soma_budget -= AP_generation_cost
// biological basis: Na⁺/K⁺ currents for AP, NaK pump reset
// Fast trace: nuclear Ca²⁺ accumulation
soma_fast_trace += nuclear_Ca_influx()
soma_fast_trace *= decay(τ = seconds)
// biological basis: L-type VGCC → nuclear Ca²⁺ → CaM kinase nuclear activation
// Refractory period
refractory_timer = absolute_refractory_duration // ~2ms hard block
// Possible tagging
if soma_fast_trace > eligibility_threshold:
soma_possible_tagging += soma_fast_trace
soma_possible_tagging *= decay(τ = seconds)
// Dopamine decays
dopamine_local *= decay(τ = hundreds_of_ms)
// Tag: nuclear Ca²⁺ AND dopamine coincidence
if dopamine_local > dopamine_threshold and
soma_possible_tagging > tagging_threshold:
soma_tag += dopamine_local × soma_possible_tagging
soma_tag *= decay(τ = hours)
soma_budget -= CREB_phosphorylation_cost
// biological basis: nuclear Ca²⁺ + PKA → CREB phosphorylation
// requires both activity (Ca²⁺) AND reward (dopamine/PKA)
SOMA | CONTEXT: NOT_AP
scope DAY | context NOT_AP:
// Integrate dendritic inputs
branch_Vm = integrate(DEND.branch_Vm, all_branches)
// Refractory timer counts down
refractory_timer = max(0, refractory_timer - Δt)
// Fast trace decays — threshold returning to baseline
soma_fast_trace *= decay(τ = seconds)
// Ship material to tagged branches — priority by tag magnitude
for branch in branches_ranked_by(dend_tag):
delivery = min(shipping_fraction × soma_material,
soma_budget × shipping_cost_fraction)
dend_material[branch] += delivery
soma_material -= delivery
soma_budget -= shipping_cost
// biological basis: kinesin-driven anterograde transport of mRNA + proteins
// tagged branches receive priority allocation
// Ship material to axon for bouton replenishment
axon_delivery = min(axon_shipping_fraction × soma_material,
soma_budget × axon_shipping_cost_fraction)
axon_material += axon_delivery
soma_material -= axon_delivery
soma_budget -= axon_shipping_cost
// biological basis: slow axonal transport — days to reach distal boutons
// Neuromodulator context: PKA broadcast amplifies all tagged component traces
if dopamine_level > dopamine_threshold or NE_level > NE_threshold:
for each component where possible_tagging > tagging_threshold:
tag += dopamine_level × possible_tagging × PKA_amplifier
// biological basis: dopamine → cAMP → PKA → phosphorylates targets
// throughout neuron simultaneously
AXON | CONTEXT: CONTINUOUS
scope DAY | context CONTINUOUS:
// AP propagation — reliability set by axon_structure (READ)
propagation_reliability = axon_structure.myelination
× (1 - failure_rate(axon_fast_trace))
// biological basis: high axon_fast_trace → Na⁺ channel inactivation at branch points
// → some APs fail to reach distal boutons
// → this is axonal STD (frequency-dependent filtering)
APs_delivered = AP_fired × propagation_reliability
axon_budget -= AP_propagation_cost × APs_delivered
// Fast trace: propagation load
axon_fast_trace += APs_delivered
axon_fast_trace *= decay(τ = seconds)
// Anterograde transport — delivers pre_material to boutons
transport_rate = min(axon_structure.transport_capacity,
axon_budget × transport_fraction)
pre_material += transport_rate × Δt // boutons receive material
axon_material -= transport_rate × Δt // axon pool depletes
axon_budget -= transport_cost × transport_rate × Δt
// biological basis: kinesin moves cargo at ~1μm/s along microtubules
// costs ATP per step (kinesin ATPase)
// Possible tagging
if axon_fast_trace > eligibility_threshold:
axon_possible_tagging += axon_fast_trace
axon_possible_tagging *= decay(τ = seconds)
// Dopamine decays
dopamine_local *= decay(τ = hundreds_of_ms)
// Tag
if dopamine_local > dopamine_threshold and
axon_possible_tagging > tagging_threshold:
axon_tag += dopamine_local × axon_possible_tagging
axon_tag *= decay(τ = hours)
// Refuel from soma budget + local astrocyte
axon_budget += soma_budget × axon_fuel_fraction
axon_budget += astro_lactate × axon_astro_fraction
// biological basis: soma mitochondria supply axon proximally
// local astrocytes supply along shaft distally
ASTRO | CONTEXT: CONTINUOUS
scope DAY | context CONTINUOUS:
// ROOT energy production: glycolysis from vascular glucose
astro_budget += glycolysis(vascular_glucose_supply) × Δt
// hard cap: vascular_glucose_supply (FIXED) — cannot be exceeded
// biological basis: glucose → lactate via glycolysis in astrocyte cytoplasm
// Lactate export to neuronal compartments
astro_lactate = min(astro_budget × lactate_export_fraction,
vascular_glucose_supply × max_export_fraction)
astro_budget -= astro_lactate
deliver(astro_lactate → pre_budget × pre_fraction,
post_budget × post_fraction,
dend_budget × dend_fraction,
axon_budget × axon_fraction)
// biological basis: lactate released into ECS → absorbed by MCT2 on neurons
// neurons convert lactate → pyruvate → TCA → ATP
// Glutamate clearance — rate set by astro_structure (READ)
clearance = astro_structure.EAAT_density × glutamate × Δt
glutamate -= clearance
astro_budget -= clearance × EAAT_ATP_cost
// biological basis: EAAT cotransports 3 Na⁺ per glutamate → NaK pump cost
// Overflow detection and D-serine release
if glutamate > spillover_threshold:
astro_fast_trace += mGluR5_Ca_influx()
// biological basis: spillover activates mGluR5 → Gq → PLC → IP3
// → Ca²⁺ release from ER → Ca²⁺-dependent exocytosis
// D-serine release: proportional to fast trace, material + budget limited
D_serine_released = min(proportional_to(astro_fast_trace),
astro_material.D_serine_precursor,
astro_budget × Ds_fraction)
astro_material -= D_serine_released × precursor_cost
astro_budget -= D_serine_released × synthesis_cost
astro_D_serine += D_serine_released
// biological basis: serine racemase converts L-serine → D-serine
// costs ATP, consumes serine from astro_material
// Simultaneous presynaptic brake (cross-compartment, no astro budget cost)
Ca_drive_pre *= mGluR_brake_factor
// biological basis: spillover also activates mGluR2/3 on PRE → Gi →
// suppresses VGCC — brakes release at source
// Possible tagging
if astro_fast_trace > eligibility_threshold:
astro_possible_tagging += astro_fast_trace
astro_possible_tagging *= decay(τ = seconds)
// Dopamine decays
dopamine_local *= decay(τ = hundreds_of_ms)
// Tag
if dopamine_local > dopamine_threshold and
astro_possible_tagging > tagging_threshold:
astro_tag += dopamine_local × astro_possible_tagging
astro_tag *= decay(τ = hours)
astro_fast_trace *= decay(τ = seconds)
// Global overload: circuit breaker
if astro_fast_trace > OVERLOAD_threshold:
trigger(shockwave_lockdown)
// biological basis: global Ca²⁺ wave → GABA + ATP release
// mass AMPA internalization, hyperpolarization
// Tonic D-serine baseline — set by astro_structure (READ)
astro_D_serine += astro_structure.D_serine_tonic × Δt
astro_budget -= astro_structure.D_serine_tonic × tonic_synthesis_cost
astro_material -= astro_structure.D_serine_tonic × tonic_precursor_cost
// biological basis: constitutive racemase activity maintains baseline
// D-serine availability independent of overflow events
Special Case — Shockwave Lockdown (any scope)
scope DAY or NIGHT | context OVERLOAD:
// Emergency — bypasses budget gates
// Biological basis: global astrocytic Ca²⁺ wave →
// GABA release → hyperpolarization
// ATP release → purinergic inhibition
post_fast_trace = 0
Vm = HYPERPOLARIZED
AMPA_occupancy = mass_internalization() // returned to post_material reserve
post_material += recovered_AMPA
axon_fast_trace += overdrive_cluster() // VGCC clustering beneath AZ
astro_budget -= emergency_cost // large deduction — territory depleted
SCOPE: NIGHT
Structural variables WRITTEN. Budgets replenished. Tags evaluated and cleared.
Step 1 — Replenish Budgets and Material
scope NIGHT | step 1:
// Astrocyte replenishes first — it fuels everything
astro_budget += overnight_glycolysis(vascular_glucose_supply) × Δt_night
astro_material += astrocyte_cellbody_synthesis() × Δt_night
// biological basis: astrocyte protein synthesis overnight
// replenishes EAAT, racemase, ECM proteins, process cytoskeleton
// Soma replenishes from own mitochondria — self-fueled
soma_budget += overnight_mitochondria_output() × Δt_night
// Soma material production peaks in NIGHT — driven by soma_tag magnitude
soma_material += CREB_driven_synthesis(soma_tag) × Δt_night
// biological basis: CREB → Arc, BDNF, GluA1, scaffold proteins
// peaks during slow-wave sleep replay
// Soma ships material to downstream compartments
dend_material += soma_material × dend_delivery_fraction
axon_material += soma_material × axon_delivery_fraction
soma_material -= (dend_delivery_fraction + axon_delivery_fraction) × soma_material
// Downstream budgets refilled from soma and astrocyte
dend_budget += astro_lactate × dend_fraction
+ soma_budget × soma_to_dend_fraction
pre_budget += astro_lactate × pre_fraction
post_budget += astro_lactate × post_fraction
axon_budget += soma_budget × soma_to_axon_fraction
+ astro_lactate × axon_fraction
Step 2 — Structural Commits (Parallel, Independent per Compartment)
scope NIGHT | step 2:
// Each compartment commits independently based on its own tag
// No global AND gate — coherence emerges from shared DAY events
// COHERENCE BONUS: if all tags SET simultaneously → amplified commit
all_aligned = (pre_tag > tag_expiry_threshold and
post_tag > tag_expiry_threshold and
astro_tag > tag_expiry_threshold)
coherence_bonus = all_aligned ? coherence_factor : 1.0
// ── PRE COMMIT ──────────────────────────────────────────────────────
if pre_tag > tag_expiry_threshold:
Δpre = min(AZ_expansion_cost,
pre_material,
pre_budget × pre_structural_fraction)
pre_structure += Δpre × coherence_bonus // STRUCTURE WRITTEN
pre_material -= Δpre // material consumed
pre_budget -= Δpre × structural_ATP_cost
if Δpre < AZ_expansion_cost:
queue(pre_deficit → next NIGHT) // deficit deferred
// biological basis: RIM + Munc13 incorporation → new docking slots
// VGCC clustering → tighter Ca²⁺-release coupling
// LTD: passive decay if maintenance not met (see step 3)
// ── POST COMMIT ─────────────────────────────────────────────────────
if post_tag > tag_expiry_threshold:
Δpost = min(AMPA_insertion_cost,
post_material,
post_budget × post_structural_fraction)
post_structure += Δpost × coherence_bonus // STRUCTURE WRITTEN
post_material -= Δpost // material consumed
post_budget -= Δpost × structural_ATP_cost
if Δpost < AMPA_insertion_cost:
queue(post_deficit → next NIGHT)
// biological basis: CaMKII anchors AMPA receptors into PSD scaffold
// actin polymerization enlarges spine head
// new anchoring slots created — not just slots filled
// ── DEND COMMIT ─────────────────────────────────────────────────────
if dend_tag > tag_expiry_threshold:
Δdend = min(branch_expansion_cost,
dend_material,
dend_budget × dend_structural_fraction)
dend_structure += Δdend × coherence_bonus // STRUCTURE WRITTEN
dend_material -= Δdend
dend_budget -= Δdend × structural_ATP_cost
if Δdend < branch_expansion_cost:
queue(dend_deficit → next NIGHT)
// biological basis: mitochondria incorporation → local ATP ceiling raised
// cytoskeletal reinforcement → better bAP propagation
// mRNA pool expanded → more local translation capacity
// ── SOMA COMMIT ─────────────────────────────────────────────────────
if soma_tag > tag_expiry_threshold:
Δsoma = min(soma_expansion_cost,
soma_material,
soma_budget × soma_structural_fraction)
soma_structure += Δsoma // STRUCTURE WRITTEN
soma_material -= Δsoma
soma_budget -= Δsoma × structural_ATP_cost
// biological basis: ion channel density increase at axon initial segment
// ribosome biogenesis → synthesis ceiling raised
// CREB machinery expansion
// ── AXON COMMIT ─────────────────────────────────────────────────────
if axon_tag > tag_expiry_threshold:
Δaxon = min(axon_expansion_cost,
axon_material,
axon_budget × axon_structural_fraction)
axon_structure += Δaxon // STRUCTURE WRITTEN
axon_material -= Δaxon
axon_budget -= Δaxon × structural_ATP_cost
if Δaxon < axon_expansion_cost:
queue(axon_deficit → next NIGHT)
// biological basis: myelination density increase
// motor protein pool expansion
// microtubule stabilization
// ── ASTRO COMMIT ────────────────────────────────────────────────────
if astro_tag > tag_expiry_threshold:
Δastro = min(process_retraction_cost,
astro_material,
astro_budget × astro_structural_fraction)
astro_structure += Δastro × coherence_bonus // STRUCTURE WRITTEN
astro_material -= Δastro // ECM proteins + cytoskeleton consumed
astro_budget -= Δastro × structural_ATP_cost
if Δastro < process_retraction_cost:
queue(astro_deficit → next NIGHT)
// biological basis: process retraction → perisynaptic_distance ↓
// ECM secretion (Glypicans, Thrombospondins) → cleft sealed
// racemase upregulation → D_serine_tonic ↑
// EAAT density increase → clearance ceiling ↑
// SELF-REINFORCING: astro_structure ↑ → future signals more contained
// → future D-serine higher
// → future LTP easier
Step 3 — Passive Depotentiation (Resource Conservation)
scope NIGHT | step 3:
// Potentiation is the primary drive.
// Depotentiation is its shadow — a consequence of finite resources.
// Structures decay at a baseline rate.
// Decay is overcome only if maintenance allocation is sufficient.
// Maintenance draws from what remains AFTER potentiation has taken its share.
remaining_material = total_material - material_consumed_by_potentiation
remaining_budget = total_budget - budget_consumed_by_potentiation
maintenance_per_synapse = remaining_material / total_synapse_count
for each synapse:
// Structural decay — passive, continuous
pre_structure -= structural_decay_rate × Δt_night
post_structure -= structural_decay_rate × Δt_night
dend_structure -= structural_decay_rate × Δt_night
astro_structure -= structural_decay_rate × Δt_night
// Maintenance allocation — overcomes decay if resources available
if maintenance_per_synapse >= maintenance_cost:
pre_structure += maintenance_pre
post_structure += maintenance_post
dend_structure += maintenance_dend
astro_structure += maintenance_astro
// decay fully compensated — structure stable
else:
// maintenance_per_synapse < maintenance_cost
// partial compensation only — structure drifts downward
// THIS IS DEPOTENTIATION BY NEGLECT — no active signal required
// the synapse is not told to weaken
// it simply does not receive enough to stay where it is
pre_structure += maintenance_per_synapse × pre_fraction
post_structure += maintenance_per_synapse × post_fraction
// net: structure slowly declines toward lower baseline
// LTD material recovery: dismantled proteins returned to pools
// This enriches the remaining pool and partially benefits other synapses
for each synapse where net_structure_change < 0:
recovered = structure_loss × recycling_fraction
pre_material += recovered × pre_fraction
post_material += recovered × post_fraction
astro_material += recovered × astro_fraction × recycling_fraction
// biological basis: ubiquitin-proteasome degradation → amino acids recycled
// internalized receptors → endosomal reserve
// dismantled AZ proteins → axonal pool
Step 4 — Homeostatic Scaling
scope NIGHT | step 4:
// If soma fired too much overall during DAY — global downscale
if soma_tag > homeostatic_ceiling:
scale_factor = homeostatic_ceiling / soma_tag
for each synapse:
post_structure *= scale_factor // STRUCTURE WRITTEN
pre_structure *= scale_factor // STRUCTURE WRITTEN
// biological basis: global AMPA downscaling during sleep
// relative differences preserved — absolute excitability restored
// material recovery: scaled-down proteins returned to soma_material
soma_material += sum(structure_reduction) × recycling_fraction
Step 5 — Clear All Traces
scope NIGHT | step 5:
// FAST_TRACEs: already decayed during DAY — confirm zero
pre_fast_trace = 0
post_fast_trace = 0
dend_fast_trace = 0
soma_fast_trace = 0
axon_fast_trace = 0
astro_fast_trace = 0
// POSSIBLE_TAGGING: decayed during DAY — confirm zero
pre_possible_tagging = 0
post_possible_tagging = 0
dend_possible_tagging = 0
soma_possible_tagging = 0
axon_possible_tagging = 0
astro_possible_tagging = 0
// TAGS: explicitly cleared after commit
// Tags above expiry threshold carry forward to next NIGHT (multi-night consolidation)
if pre_tag < tag_expiry_threshold: pre_tag = 0
if post_tag < tag_expiry_threshold: post_tag = 0
if dend_tag < tag_expiry_threshold: dend_tag = 0
if soma_tag < tag_expiry_threshold: soma_tag = 0
if axon_tag < tag_expiry_threshold: axon_tag = 0
if astro_tag < tag_expiry_threshold: astro_tag = 0
// Tags above threshold: partial commit ran, deficit queued,
// remaining tag persists to next NIGHT for completion
Summary of Energy and Material Relations
ENERGY FLOW:
vascular_glucose_supply (FIXED)
→ astro_budget (glycolysis)
→ astro_lactate → pre_budget, post_budget, dend_budget, axon_budget
→ soma_budget (own mitochondria — independent of astrocyte)
→ axon_budget (partial)
→ dend_budget (partial, via organelle delivery)
MATERIAL FLOW:
soma (CREB synthesis)
→ soma_material
→ dend_material (shipping during DAY NOT_AP + NIGHT)
→ post_material (local delivery to spines)
→ axon_material (shipping during DAY NOT_AP + NIGHT)
→ pre_material (anterograde transport to boutons)
astrocyte cell body (local synthesis)
→ astro_material
→ D-serine (consumed in DAY)
→ ECM proteins (consumed in NIGHT)
→ process cytoskeleton (consumed in NIGHT)
RECOVERY FLOWS (LTD → returns material to pools):
post LTD → AMPA receptors → post_material (local reserve)
pre LTD → AZ proteins → pre_material (axonal pool)
astro LTD → ECM fragments → astro_material (partial, recycling_fraction)