Compare commits

...

4 Commits

2 changed files with 297 additions and 0 deletions
@@ -6,6 +6,10 @@ include_toc: true
This document compiles the complete, integrated framework of your tripartite synapse model. It translates the biological interactions of the **presynapse**, **postsynapse**, **astrocyte**, and **neuromodulators** into a singular, high-level metaphor of **wave propagation, resonance, and acoustic carving** across multiple time scales.
## Intro
The presynapse, postsynapse, and astrocyte each maintain a **default low-energy baseline** when input frequency is within normal range (~110 Hz): the presynapse releases vesicles at low probability, the postsynapse stays clamped by the Mg²⁺ block, and the astrocyte simply clears the cleft and ticks over its fuel pipeline. When current input deviates from this baseline — either upward into high-frequency bursts or downward into disuse — the system begins to adapt, but the *direction* of that adaptation depends on **past influence**: if the high-frequency drive is sustained and coincides with a neuromodulatory validation signal (dopamine), the deviation gets permanently encoded as structural expansion; if the drive is transient, only temporary facilitation occurs and the system rebounds; if the signal is chronically weak or mistimed, the astrocyte actively dissolves the existing structure and the synapse contracts back toward silence. In other words, current input sets the *alarm*, but accumulated history — stored in vesicle pool sizes, receptor counts, and ECM integrity — determines whether the response is ignored, temporarily buffered, permanently carved in, or actively erased.
---
## 1. The Cast of the Acoustic Chamber
@@ -96,6 +100,170 @@ Operating high-fidelity wave generators and vibrating resonators drains the syst
---
---
# Pseudocode, organized by variable, influence, and time
## global state variables
// ─── FAST (mss) ─── INTERMEDIATE (smin) ─── SLOW (hdays) ───
// Presynaptic
vesicle_release_prob // P(0.11.0) — baseline 0.2
active_zone_size // docking slots — scales launchpad
RRP_pool // readily-releasable pool (fast)
reserve_pool // chained vesicles in deep storage
presynaptic_Ca // [Ca²⁺] at active zone
// Postsynaptic
AMPA_count // surface receptors = sensitivity
NMDA_Mg_block // bool — mechanical clamp on/off
postsynaptic_Ca // [Ca²⁺] in spine — triggers LTP/LTD
membrane_potential // Vm — depolarization state
// Astrocyte
glutamate_clearance_rate // EAAT transporter speed
D_serine_release // gliotransmitter — NMDA co-agonist
astro_Ca // internal Ca²⁺ wave state
ECM_integrity // extracellular matrix density
lactate_output // fuel export rate to neurons
// Neuromodulators (global broadcast)
dopamine_level // "save button" — validates LTP
norepinephrine_level // arousal / signal-to-noise gain
acetylcholine_level // attention — lowers LTP threshold
## fast time scale — wave propagation (ms → s)
function fire_action_potential(input_freq):
// Presynapse: launch wavefront
presynaptic_Ca += spike_influx(input_freq)
released_vesicles = binomial(RRP_pool, vesicle_release_prob)
glutamate_cleft = released_vesicles × quantal_content
RRP_pool -= released_vesicles
// Postsynapse: wavefront strikes resonator
AMPA_current = glutamate_cleft × AMPA_count
membrane_potential += AMPA_current
// NMDA gate — needs coincidence (clamp check)
if membrane_potential > -40mV and D_serine_release > threshold:
NMDA_Mg_block = False // Mg²⁺ ejected — clamp unlocked
postsynaptic_Ca += NMDA_influx(glutamate_cleft)
// Astrocyte: vacuum up trailing echoes
glutamate_cleft -= glutamate_clearance_rate × Δt
lactate_output += glycolysis_rate(glutamate_clearance_rate)
// Fuel consumed by post + pre to reset
membrane_potential restored by NaK_ATPase(lactate_output)
RRP_pool refilled by VATPase_pump(lactate_output)
## intermediate time scale — temporary tuning (s → min)
function short_term_plasticity(input_freq):
// Presynapse: facilitate or depress based on Ca²⁺ history
if input_freq > 20Hz: // facilitation
vesicle_release_prob *= 1.3 // residual Ca²⁺ primes launchpad
mobilize(reserve_pool → RRP_pool) // break storage chains
elif input_freq < 5Hz: // depression
vesicle_release_prob *= 0.7 // RRP depleted faster than refill
// Postsynapse: NMDA gate primed if frequency sustained
if input_freq >= 50Hz and duration > 1s:
NMDA_Mg_block = False // sustained depolarization
postsynaptic_Ca accumulates // early-LTP signal rises
// Astrocyte: sense volume → deploy co-agonist
if glutamate_cleft > threshold_mid:
D_serine_release += gliotransmitter_pulse() // acoustic stabilizer
astro_Ca += IP3_wave()
// Neuromodulators: shift operational threshold globally
LTP_threshold *= gain(1 / (1 + acetylcholine_level))
signal_to_noise += norepinephrine_level × β_receptor_gain
## slow time scale — structural carving (h → weeks)
function late_LTP_consolidation():
// Gate: dopamine "save button" must arrive
if postsynaptic_Ca > Ca_LTP_threshold and dopamine_level > D1_threshold:
// Postsynapse: anchor new receptors
AMPA_count += receptor_insertion(CaMKII_signal)
spine_volume *= 1.5 // spine head enlarges
// Presynapse: expand active zone, fill launchpad
active_zone_size *= 1.4
vesicle_release_prob += 0.1 // VGCC clustering beneath AZ
// Astrocyte: seal the acoustic channel
ECM_integrity += secrete(Glypicans, Thrombospondins)
retract(perisynaptic_process) // astrocyte walls in closer → insulate
glutamate_clearance_rate *= 0.85 // tighter diffusion barrier
// Late-LTP endpoint: carved channel
return synapse_state = "potentiated"
function LTD_active_forgetting():
// Trigger: low-freq, out-of-sync — discordant leakage only
if input_freq ≈ 1Hz and timing == "uncorrelated":
// Postsynapse: small Ca²⁺ rise activates phosphatases
AMPA_count -= receptor_internalization(PP1_signal)
// Astrocyte: deploy molecular scissors → dissolve matrix
D_serine_release = 0 // cut co-agonist supply
ECM_integrity -= secrete(MMPs) // matrix metalloproteinases
// Presynapse: dismantle launchpad
active_zone_size -= docking_slot_removal()
vesicle_release_prob *= 0.6
sequester(RRP_pool → reserve_pool)
return synapse_state = "depressed"
function shockwave_lockdown(): // Mode 3 — >100Hz uncoordinated
// Astrocyte: global Ca²⁺ wave triggers circuit-breaker
astro_Ca = GLOBAL_WAVE // soma-level flood
release(GABA, ATP) // gel floods postsynapse
AMPA_count -= mass_internalization()
membrane_potential = HYPERPOLARIZED
// Presynapse: overdrive clustering to preserve signal
cluster(VGCC → beneath_active_zone) // ensures penetration
## energy supply chain — metabolic gating (continuous)
function metabolic_loop(Δt):
// Astrocyte: glucose → lactate pipeline
glucose_uptake = blood_capillary_supply()
lactate_output = glycolysis(glucose_uptake, glutamate_clearance_rate)
// Both neurons absorb lactate → power pumps
RRP_pool refill rate ∝ VATPase(lactate_output)
membrane_potential reset ∝ NaK_ATPase(lactate_output)
// Feedback: harder clearance work → faster fuel pump
lactate_output *= load_factor(glutamate_clearance_rate)
**State variables** at the top declare every quantity that gets modified — split by which cell "owns" it. These are the nodes that the rest of the code reads and writes.
**Three time-scale functions** then show how those variables evolve:
- `fire_action_potential` is pure fast physics — Ca²⁺ triggers vesicle release, AMPA opens, NMDA unlocks only under coincidence, astrocyte clears the cleft, fuel is consumed.
- `short_term_plasticity` runs on top of repeated firing — the presynapse facilitates or depresses based on Ca²⁺ history, the astrocyte drops D-serine when volume is high, and neuromodulators shift the gain coefficient globally.
- `late_LTP_consolidation` and `LTD_active_forgetting` are the permanent rewrite layer — they require the dopamine "save button" as an AND-gate, and they modify structural variables (`active_zone_size`, `ECM_integrity`, `AMPA_count`) that persist independently of individual spikes.
The `shockwave_lockdown` and `metabolic_loop` sit alongside as two special-case routines that override the normal flow — one a circuit-breaker, the other a continuous background process coupling astrocyte workload to fuel delivery.
---
---
# Core business of each component
## 1. The Core Businesses of Each Component
@@ -0,0 +1,129 @@
# Intro
The synapse uses three interlocking signal systems to translate present activity into future behavioral bias. Ca²⁺ is the universal event recorder — each compartment reads its concentration dynamics differently (amplitude and speed of rise in the postsynapse, residual accumulation in the presynapse, IP3-triggered waves in the astrocyte), so the same ion encodes distinct instructions depending on where and how it appears. cAMP/PKA is the contextual gate: driven by neuromodulatory broadcast (dopamine, norepinephrine), it doesn't write changes itself but determines whether the Ca²⁺ signal gets committed to permanent structure — by priming AMPA receptor insertion, silencing the LTD phosphatase machinery via DARPP-32, and activating CREB-driven gene expression for structural proteins. mGluRs provide the overflow sensing layer: when glutamate spills beyond the cleft, group II/III mGluRs on the presynapse activate a Gi-mediated autoinhibitory brake, while group I mGluRs on the astrocyte trigger the IP3→Ca²⁺→D-serine cascade that amplifies NMDA coincidence detection — a push-pull architecture that simultaneously throttles excessive release and widens the postsynaptic learning window.
Together these three systems form a hierarchical filter: Ca²⁺ asks did something happen?, mGluRs ask was it excessive?, and cAMP/PKA asks was it worth saving? — and only when all three align does the synapse commit to rewriting its future response.
## signal state variables
// ── Ca²⁺ : event recorder ──────────────────────────────────────
pre_Ca_residual // leftover Ca²⁺ between spikes — encodes recent history
post_Ca_amplitude // peak rise magnitude in spine
post_Ca_rise_speed // rate of rise — fast=LTP, slow=LTD
astro_Ca_local // IP3-triggered local rise near synapse
astro_Ca_global // soma-wide wave — network overload flag
// ── cAMP/PKA : context gate ────────────────────────────────────
cAMP_level // set by dopamine/NE via Gs → adenylyl cyclase
PKA_activity // downstream of cAMP
GluA1_Ser845_primed // bool — AMPA insertion threshold lowered
DARPP32_phospho // bool — PP1 (LTD phosphatase) silenced
CREB_active // bool — structural gene expression enabled
// ── mGluRs : overflow sensor ───────────────────────────────────
glutamate_spillover // extrasynaptic [glu] — only high when cleft saturated
mGluR2_3_activation // presynaptic Gi — autoinhibitory brake
mGluR5_activation // astrocytic Gq — IP3 → Ca²⁺ → D-serine cascade
## layer 1 — Ca²⁺: did something happen?
function Ca_event_recorder(spike_history, input_freq):
// Presynapse: residual Ca²⁺ = trace of recent firing
pre_Ca_residual += spike_influx(input_freq)
pre_Ca_residual *= decay(τ ≈ 100ms) // fades unless spikes keep arriving
vesicle_release_prob *= facilitation(pre_Ca_residual)
// Postsynapse: amplitude + speed encode the instruction
post_Ca_amplitude = NMDA_influx(glutamate_cleft, membrane_potential)
post_Ca_rise_speed = d(post_Ca_amplitude) / dt
if post_Ca_amplitude > Ca_HIGH and post_Ca_rise_speed > fast_threshold:
activate(CaMKII) // → LTP kinase pathway
elif post_Ca_amplitude > Ca_LOW and post_Ca_rise_speed < slow_threshold:
activate(PP1, PP2B) // → LTD phosphatase pathway
else:
pass // sub-threshold — no instruction encoded
// Astrocyte: local vs global Ca²⁺ = two different alarms
astro_Ca_local = IP3_release(mGluR5_activation) // activity-proportional
astro_Ca_global = soma_wave(astro_Ca_local > OVERLOAD_threshold)
if astro_Ca_local > local_threshold:
D_serine_release += gliotransmitter_pulse() // widens NMDA window
if astro_Ca_global:
trigger(shockwave_lockdown) // circuit-breaker
## layer 2 — mGluRs: was it excessive?
function mGluR_overflow_sensor():
// Only fires when cleft is genuinely saturated (low-affinity receptors)
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
// Presynapse arm: Gi → brake
mGluR2_3_activation = True
cAMP_level -= Gi_inhibition(adenylyl_cyclase) // suppress PKA locally
vesicle_release_prob -= VGCC_suppression() // autoinhibitory brake
// Astrocyte arm: Gq → amplify (push-pull)
mGluR5_activation = True
astro_Ca_local += IP3_cascade(PLC_activation) // feeds back into layer 1
D_serine_release += proportional_to(astro_Ca_local)
// Net: same overflow signal brakes pre, amplifies post-learning window
return (mGluR2_3_activation, mGluR5_activation)
## layer 3 — cAMP/PKA: was it worth saving?
function PKA_context_gate():
// Neuromodulators set the gate via Gs protein
if dopamine_level > D1_threshold or norepinephrine_level > β_threshold:
cAMP_level += Gs_activation(adenylyl_cyclase)
PKA_activity = proportional_to(cAMP_level)
// Target 1: prime AMPA insertion
phosphorylate(GluA1, site=Ser845)
GluA1_Ser845_primed = True // lowers threshold for CaMKII to anchor receptors
// Target 2: silence the forgetting machinery
phosphorylate(DARPP32)
DARPP32_phospho = True // inhibits PP1 → LTD pathway blocked
// Target 3: enable structural gene expression
translocate(PKA → nucleus)
phosphorylate(CREB)
CREB_active = True // new receptors, cytoskeleton, scaffolding
## hierarchical filter — commit decision
function commit_to_structural_change():
// All three layers must align
event_detected = post_Ca_amplitude > Ca_HIGH // layer 1: did something happen?
overflow_sensed = mGluR5_activation == True // layer 2: was it excessive?
context_validated = DARPP32_phospho and GluA1_Ser845_primed // layer 3: worth saving?
if event_detected and overflow_sensed and context_validated:
activate(CaMKII) // Ca²⁺ signal now gets converted
AMPA_count += receptor_insertion(CaMKII, GluA1_Ser845_primed)
active_zone_size += structural_expansion(CREB_active)
ECM_integrity += astrocyte_sealing(astro_Ca_local)
return "potentiated"
elif event_detected and not context_validated:
return "temporary facilitation only" // Ca²⁺ rose but no save signal
elif not event_detected and overflow_sensed:
activate(PP1) // phosphatase wins — LTD
AMPA_count -= receptor_internalization(PP1)
return "depressed"
else:
return "baseline — no change"
## End
The key architectural decision in this pseudocode is the separation into three explicit layers that feed into a single commit_to_structural_change function. Each layer answers one question independently before the final AND-gate runs — Ca²⁺ detects the event, mGluRs assess its magnitude, and cAMP/PKA validates its context. Notice also that mGluR layer has a push-pull side effect that feeds back into the Ca²⁺ layer (astro_Ca_local is updated by mGluR5_activation), making the system not a strict pipeline but a loop — the overflow sensor actively reshapes what the event recorder sees next.