Skip to content

LDTC

LDTC (Loop-Dominance Theory of Consciousness) is a single-machine, real-time verification harness for the theory of the same name. It is the reference implementation that accompanies the LDTC manuscript and is designed to either falsify or accept the two operational criteria from that paper:

Criterion Plain English Pass when
NC1 The closed loop dominates exchange with the environment. M (dB) ≥ Mmin window-by-window.
SC1 The loop's M survives a labeled Ω perturbation and recovers fast enough. δ ≤ ε and τ_rec ≤ τ_max after the Ω window.

The harness measures loop and exchange influence (𝓛_loop, 𝓛_ex) at a fixed Δt, applies guardrails (LREG enclave, hash-chained audit, Δt governance, smell tests), runs Ω perturbations from ldtc.omega, and emits device-signed derived indicators, never raw 𝓛. Everything else (figures, tables, manifests) is generated from the audit log alone, so you can publish artifacts without leaking measurement primitives.

What this is, and isn't

LDTC is a verification harness, not a model of mind. It answers a narrow, falsifiable question: "Does this concrete system, instrumented at this Δt, pass NC1 and SC1 against Ω?" It does not claim consciousness; it gives you a tool to check whether the loop-dominance signature holds.

Try it in 60 seconds

The smallest end-to-end run uses the bundled R0 profile and the in-process software plant:

pip install ldtc
ldtc run --config configs/profile_r0.yml

That command will:

  1. Boot a fixed-Δt scheduler and a small software plant (ldtc.plant.models.Plant).
  2. Stream (E, T, R, demand, io, H) telemetry into a SlidingWindow.
  3. Per window, estimate 𝓛_loop and 𝓛_ex via estimate_L and compute M (dB) via m_db.
  4. Append every event to an append-only, hash-chained audit log (AuditLog).
  5. Sign and write derived indicators (NC1 bit, SC1 bit, Mq, counter) via IndicatorExporter.
  6. Build a paper-style timeline, an SC1 table, and a manifest via reporting.artifacts.bundle.

Then exercise the Ω battery:

ldtc omega-power-sag --config configs/profile_r0.yml --drop 0.3 --duration 10

The command applies a labeled power sag, freezes the C/Ex partition during the perturbation, and writes a fresh signed indicator with the SC1 bit decided.

Walk through the full setup in Getting started, or skip ahead to the Examples.

Why LDTC

  • Operational, not metaphysical. NC1 and SC1 are concrete inequalities on M (dB), δ, and τ_rec. There is nothing to argue about in the result; either the indicators pass or they don't.
  • Quietly tuning the result is hard on purpose. Δt changes are rate-limited and audited (DeltaTGuard); CI inflation, partition flapping during Ω, exogenous subsidy, and audit-chain breaks each invalidate a run via smelltests.
  • No raw 𝓛 ever leaves the box. The LREG is a write-only enclave; exporters and CSV writers refuse rows that contain raw fields. Only the device-signed Indicator payload escapes.
  • Substrate-agnostic. Both PlantAdapter (in-process software model) and HardwarePlantAdapter (UDP / serial) satisfy the same minimal interface, so the same Ω modules work against simulation and real hardware.
  • Reproducible artifacts. Every produced file is chmod-ed read-only on POSIX-like systems, and every figure carries a footer with the profile (R0 / R*) and the audit hash head.

Documentation map

Next steps