Files
organism/elements/neuron/appunti/2026-06-11-tripartite_synapse_v5.md
T

50 KiB
Raw Blame History

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 secondsminutes ───────

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(τ ≈ secondsminutes)
VAR  soma_possible_tagging   // += soma_fast_trace when > eligibility_threshold
                             // *= decay(τ ≈ secondsminutes)
VAR  axon_possible_tagging   // += axon_fast_trace when > eligibility_threshold
                             // *= decay(τ ≈ secondsminutes)
VAR  astro_possible_tagging  // += astro_fast_trace when > eligibility_threshold
                             // *= decay(τ ≈ secondsminutes)

// ── 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)