Create 2026-06-04-modulation-of-future-behavior.md
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user