<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Engineering on My Hugo Project</title><link>https://ostensible-paradox.pages.dev/en/categories/engineering/</link><description>Recent content in Engineering on My Hugo Project</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 21 May 2026 03:20:06 +0800</lastBuildDate><atom:link href="https://ostensible-paradox.pages.dev/en/categories/engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Why mealy machine, Why?</title><link>https://ostensible-paradox.pages.dev/en/posts/the-death-of-the-mealy-machine/</link><pubDate>Thu, 21 May 2026 03:20:06 +0800</pubDate><guid>https://ostensible-paradox.pages.dev/en/posts/the-death-of-the-mealy-machine/</guid><description>&lt;p>Why did the Mealy machine linger for so long?&lt;/p>
&lt;p>It was the first formal object that perfectly encoded a core obsession, and because of that, it became impossible to let go of—even long after its utility had expired.&lt;/p>
&lt;p>The digital trail of drafts and planning sessions reveals this reluctance. In the preparation notes, the verdict was clear:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>§3.2 Mealy notation | M = (Q, Σ, Δ, δ, λ, q₀) | Drop
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>App A.1 | Theorem 1 + Mealy proof | Drop
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It was marked for deletion. Even the prism agent had pointed out the redundancy: &lt;em>&amp;ldquo;The Mealy machine result is simply the zero-cut special case of the static certificate&amp;rdquo;&lt;/em>—strictly weaker, less general, and less rigorous than what followed. Yet, like a ghost in the machine, it kept reappearing. It haunted &lt;code>2026jan.tex&lt;/code>, lingered on &lt;code>Desktop/cc.tex&lt;/code>, and found its way back into the AIES submission. Every attempt to excise it failed; it kept surviving.&lt;/p></description><content:encoded><![CDATA[<p>Why did the Mealy machine linger for so long?</p>
<p>It was the first formal object that perfectly encoded a core obsession, and because of that, it became impossible to let go of—even long after its utility had expired.</p>
<p>The digital trail of drafts and planning sessions reveals this reluctance. In the preparation notes, the verdict was clear:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>§3.2 Mealy notation | M = (Q, Σ, Δ, δ, λ, q₀) | Drop
</span></span><span style="display:flex;"><span>App A.1 | Theorem 1 + Mealy proof | Drop
</span></span></code></pre></div><p>It was marked for deletion. Even the prism agent had pointed out the redundancy: <em>&ldquo;The Mealy machine result is simply the zero-cut special case of the static certificate&rdquo;</em>—strictly weaker, less general, and less rigorous than what followed. Yet, like a ghost in the machine, it kept reappearing. It haunted <code>2026jan.tex</code>, lingered on <code>Desktop/cc.tex</code>, and found its way back into the AIES submission. Every attempt to excise it failed; it kept surviving.</p>
<p>The truth is that the Mealy machine was never really about AI liability. It was about a personal epistemic preoccupation. It formalized the exact structural boundary that defines every paper in the bibliography:</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">Paper</th>
          <th style="text-align: left">The Obsession, Dressed Differently</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><strong>ccModel / 2026jan</strong></td>
          <td style="text-align: left">Mealy machine: $\lambda$ is non-injective $\to$ no decoder exists from outputs to states.</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Double Certificates</strong></td>
          <td style="text-align: left">$\varepsilon_{\text{state}}^{\text{UB}}$: a cut-set bound on the leakage of hidden-state information to public traces.</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>cascade/paper</strong></td>
          <td style="text-align: left">Epistemic boundary: demonstrating that output-only review cannot reconstruct internal execution states.</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>POPL d-separation</strong></td>
          <td style="text-align: left"><code>Reachable</code> as a <code>Prop</code>-value versus <code>StaticRoute</code> as a $\Sigma$-type—showing how reachability conceals a structure that must be decompiled.</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Liability Paradox</strong></td>
          <td style="text-align: left">The fundamental claim that no finite sequence of observations can uniquely determine an internal state.</td>
      </tr>
  </tbody>
</table>
<p>The attraction was never to automata theory itself, but rather to that precise, visceral moment when observation fails to reconstruct cause. The Mealy machine was the simplest, most elegant caricature of that failure: a closed box with hidden gears where turning the crank produces outputs that could have been generated by multiple, incompatible internal configurations.</p>
<p><img alt="A closed box with hidden gears" loading="lazy" src="/images/mealy-machine/hidden-gears.jpg"></p>
<p>But the tragedy of the Mealy machine was its simplicity. It could only yield a blunt, binary verdict—non-injectivity leading to undecidability—when the actual goal was a graded, constructive, and decompilable account of epistemic loss.</p>
<p>That is what the POPL paper finally achieves. It replaces hand-waving claims about the impossibility of state recovery with a mechanical witness extractor. Through the well-founded measure of <code>route_improves_of_bad</code>, the <code>StaticRoute</code> witness extractor, and the <code>dSeparated_iff_dSeparates</code> bisimulation, the POPL paper represents the Mealy machine fully grown.</p>
<p>Keeping the Mealy machine around was a lingering attachment to the object that first made this obsession legible. But legibility is not the same as rigor. The POPL paper marks the transition to a proper formal home—moving from automata theory to causal graphs, from prose proofs to Lean 4, and from binary undecidability to explicit witness extraction.</p>
<p>The Mealy machine had to die so that <code>route_improves_of_bad</code> could live.</p>
]]></content:encoded></item><item><title>From Boolean Verdicts to Quantitative Witnesses: Why DAG Topology Needs a Trail Semantics</title><link>https://ostensible-paradox.pages.dev/en/posts/from-boolean-verdicts-to-quantitative-witnesses/</link><pubDate>Tue, 19 May 2026 03:30:00 +0800</pubDate><guid>https://ostensible-paradox.pages.dev/en/posts/from-boolean-verdicts-to-quantitative-witnesses/</guid><description>&lt;p>Since Pearl (2009), causal inference on DAGs has crystallized around a powerful but austere toolkit: boolean d-separation and do-calculus. Does evidence flow? Full stop. Does it flow after an intervention? Full stop. This framework is sufficient for causal &lt;em>identification&lt;/em>—determining whether an effect is estimable from observed data. But it is curiously silent on a question that seems equally natural: &lt;strong>how much&lt;/strong> flows, &lt;strong>through which channels&lt;/strong>, and with &lt;strong>what residual structure&lt;/strong>?&lt;/p></description><content:encoded><![CDATA[<p>Since Pearl (2009), causal inference on DAGs has crystallized around a powerful but austere toolkit: boolean d-separation and do-calculus. Does evidence flow? Full stop. Does it flow after an intervention? Full stop. This framework is sufficient for causal <em>identification</em>—determining whether an effect is estimable from observed data. But it is curiously silent on a question that seems equally natural: <strong>how much</strong> flows, <strong>through which channels</strong>, and with <strong>what residual structure</strong>?</p>
<p>I want to argue that this silence is not a minor gap; it is a symptom of two communities talking past each other. And the bridge between them is a rigorous notion of <em>trail as witness</em>.</p>
<hr>
<h2 id="the-boolean-trap">The Boolean Trap</h2>
<p>Traditional DAG analysis gives you a verdict at the endpoints. $X$ is d-separated from $Y$ given $Z$: True or False. The intervened distribution $P(y \mid do(x))$ is identifiable: Yes or No. This is the &ldquo;full stop&rdquo; regime.</p>
<p>But a boolean verdict discards the path. It tells you that water reaches the tap, but not whether it travelled through lead pipes, detoured through a cistern, or was siphoned off midway. To know the <em>texture</em> of a causal chain—to distinguish a default association from a derived conclusion, or to know whether an observed correlation persists because of the presence of one variable or the absence of another—you need to traverse the trail in slow motion, node by node, junction by junction.</p>
<p>Trail traversal gives the texture of causal chains; endpoint booleans do not.</p>
<hr>
<h2 id="two-communities-one-missing-link">Two Communities, One Missing Link</h2>
<p>Remarkably, two intellectual neighborhoods have been circling this problem from opposite ends without quite meeting in the middle:</p>
<p><strong>The Causal Inference community (Pearl et al.)</strong> is structurally obsessed. It abstracts the world into absolute black-and-white: if d-separation holds, the answer is True; otherwise, False. They are plumbers who care only whether the pipe is open, not what contaminant rides the flow. After 2009, the field&rsquo;s theoretical engine on this particular front seems to have stalled—perhaps because every remaining graph-theoretic challenge starts to look like the Four Color Problem, solvable only by brute force unless a new representational insight appears.</p>
<p><strong>The Quantitative Information Flow (QIF) community (Alvim, Palamidessi, Smith et al.)</strong> is capacity-obsessed. They compute leakage in bits, bound it with Shannon capacity, and seek KKT certificates for optimality. But their channel models are often toy simplifications, stripped of topological depth. They measure the volume of water without being able to trace the pipe&rsquo;s winding route through the labyrinth.</p>
<p>Both communities study DAGs plus information flow. Yet:</p>
<ul>
<li>Causal inference has the topology but no quantitative bound.</li>
<li>QIF has the quantitative machinery but no trail-level topological witness.</li>
</ul>
<p>No one has connected them. Why? Because the causal side asks &ldquo;Is it identifiable?&rdquo; and the QIF side asks &ldquo;How many bits leak?&quot;—and neither side has a formalism that answers both at once while retaining the path as a first-class object.</p>
<hr>
<h2 id="lemma-1-the-collider-ancestor-leak--rerouting">Lemma 1: The Collider Ancestor Leak &amp; Rerouting</h2>
<p>Consider a collider $u \rightarrow w \leftarrow v$. Textbook d-separation says evidence can pass through $w$ only when $w$ or a descendant is observed. But this description conflates two distinct phenomena.</p>
<p>Suppose we are testing whether $X$ and $Y$ are d-separated given $Z$. If a descendant of $w$ leads <em>only</em> to $X$ or $Y$ and <strong>not</strong> to $Z$, then the collider is not &ldquo;activated by $Z$&rdquo; in any global sense. It is activated because it creates a connected route from a source to a destination. The conditioning set is, locally, a red herring.</p>
<h3 id="path-normalization--rerouting">Path Normalization / Rerouting</h3>
<p><strong>Claim:</strong> If a descendant of $w$ leads to $X$, the original long path was never necessary; the descendant path itself provides a shorter route.</p>
<p><em>Proof sketch.</em> Take any active trail passing through collider $w$ and reaching $X$ via descendant $d$. Replace the subpath from $w$ to $X$ with $w \leadsto d \leadsto X$. By minimality of active trails (or induction on cutset size), the rerouted path is no longer than the original and preserves endpoint connectivity. The original trail was therefore non-minimal, containing a redundant detour shortcuttable through the collider&rsquo;s own descendant. ∎</p>
<p>The upshot: collider &ldquo;activation&rdquo; is often just topological connectivity leaking outward, not a special global event mediated by the conditioning set.</p>
<hr>
<h2 id="lemma-2-the-junction-obligation-problem">Lemma 2: The Junction Obligation Problem</h2>
<p>If we accept that trails matter, we need a local criterion for their validity that does not require re-scanning the entire graph at every step.</p>
<h3 id="decompiling-the-trail">Decompiling the Trail</h3>
<p>Decompose an active trail into a stateful path type—call it <code>ActiveRoute</code> or <code>BayesBallPathT</code>. Each traversal step carries a direction tag:</p>
<ul>
<li><strong><code>outOf</code></strong>: leaving via an outgoing edge.</li>
<li><strong><code>into</code></strong>: entering via an incoming edge.</li>
</ul>
<p>These tags are not bookkeeping; they encode the <em>obligation</em> imposed by the junction just traversed.</p>
<h3 id="global-topology--local-type-constraints">Global Topology → Local Type Constraints</h3>
<p>In the global formulation, a junction $(A, B, C)$ is valid only after inspecting the whole graph and the conditioning set. Under the state-machine view:</p>
<ol>
<li><strong>Obligations are pushed to interfaces.</strong> The direction label at a boundary encodes what junction type is expected on the other side.</li>
<li><strong>Composition is type checking.</strong> Concatenating two path segments requires only that the output state of the first matches the input obligation of the second. No global inspection needed.</li>
<li><strong>Local consistency implies global consistency.</strong> If every adjacent pair of segments satisfies their shared interface obligation, the entire trail is valid by construction.</li>
</ol>
<p>The global topological constraint of d-separation becomes a <strong>local type-system constraint</strong> on path segments. The type of a segment is its pair of boundary states; composition is well-typed iff obligations align.</p>
<hr>
<h2 id="what-is-still-missing">What Is Still Missing</h2>
<p>Lemmas 1 and 2 give us a cleaner, more local way to reason about <em>whether</em> a trail is active. But they do not yet answer the quantitative question:</p>
<blockquote>
<p>Not &ldquo;does information flow?&rdquo; but &ldquo;how many bits flow through this specific trail?&rdquo;</p></blockquote>
<p>That question requires machinery that currently lives only in QIF:</p>
<ul>
<li><strong>Channel capacity</strong> between observables and secrets along a specific topological route.</li>
<li><strong>KKT conditions</strong> to certify that a given leakage bound is optimal under the graph&rsquo;s structural constraints.</li>
<li><strong>Shannon bounds</strong> that respect the DAG&rsquo;s conditional-independence structure rather than assuming a flat channel matrix.</li>
</ul>
<p>What does not yet exist—and what I am groping toward—is a framework where:</p>
<ol>
<li>The DAG provides the topological syntax.</li>
<li>The trail provides the witness (the specific path whose capacity we measure).</li>
<li>KKT + channel capacity provide the quantitative certificate.</li>
<li>A proof assistant (Lean4, Coq) checks both the topological type constraints (Lemma 2) and the information-theoretic bounds.</li>
</ol>
<hr>
<h2 id="takeaway">Takeaway</h2>
<p>Pearl&rsquo;s boolean tools are not wrong; they are <em>insufficient</em> for anyone who wants to know the texture of a causal chain. QIF&rsquo;s quantitative tools are not wrong; they are <em>topologically blind</em>. The missing piece is a <strong>trail semantics</strong> that makes the path a first-class object—so that we can ask not only whether an intervention opens a channel, but how wide that channel is, what contaminants it carries, and whether the leakage is bounded.</p>
<p>We need to move from &ldquo;full stop&rdquo; to &ldquo;slow-motion replay.&rdquo; The trail is the witness.</p>
]]></content:encoded></item><item><title>Dual Certificates for Agent Audit: Separating Structural Unrecoverability from Decision Relevance</title><link>https://ostensible-paradox.pages.dev/en/posts/dual-certificates-agent-audit/</link><pubDate>Fri, 15 May 2026 11:13:18 +0000</pubDate><guid>https://ostensible-paradox.pages.dev/en/posts/dual-certificates-agent-audit/</guid><description>Auditing a deployed language-model agent requires two separable quantities: how much operative state escapes the recorded trace, and how much of that residual state drives behavior. We introduce a dual-certificate...</description><content:encoded><![CDATA[<h2 id="abstract">Abstract</h2>
<p>Auditing a deployed language-model agent requires two separable quantities: how much operative state escapes the recorded trace, and how much of that residual state drives behavior. We introduce a dual-certificate protocol. The static certificate $_state^UB$ upper-bounds residual hidden-state entropy by a min-cut on untraced channels. The dynamic certificate $_act^LB$ lower-bounds residual decision relevance through an admissible probe taxonomy—replay, intervention, proxy—under conditional data processing. The two axes are independent. In ReAct experiments, logging ablates the static bound from $16,464$ to $0$ bits; controlled replay separates dormant calculator from active planning tasks under the same topology as a soft policy shift ($0.0163$ bits, 95% CI $[0.0124,0.0208]$) with argmax tool selections unchanged. Indexing $_act^LB$ over hidden-channel coordinates produces an activation profile. On an LLaDA denoising trajectory, perturbations stay near the floor through early steps and rise at the final binding step ($0.110$ bits, 95% CI $[0.052,0.234]$). On a multi-agent communication edge, swapping a worker&rsquo;s private report gives $0.901$ bits, 95% CI $[0.873,0.928]$. A Lean 4 artifact mechanizes the autoregressive zero-cut case and proves the conditional-DPI and chain-rule reductions from Mathlib first principles, with only the cut-set capacity bound remaining as an external structural premise.</p>
<h2 id="contents">Contents</h2>
<ul>
<li><a href="/en/posts/dual-certificates-agent-audit/introduction/">Introduction</a></li>
<li><a href="/en/posts/dual-certificates-agent-audit/related-work/">Related Work</a></li>
<li><a href="/en/posts/dual-certificates-agent-audit/setup-and-audit-regime/">Setup and Audit Regime</a></li>
<li><a href="/en/posts/dual-certificates-agent-audit/static-certificate/">Static Certificate: Structural Upper Bound via Untraced-Channel Capacity</a></li>
<li><a href="/en/posts/dual-certificates-agent-audit/dynamic-certificate/">Dynamic Certificate: Decision Relevance via Conditional DPI</a></li>
<li><a href="/en/posts/dual-certificates-agent-audit/empirical-discussion/">Empirical Diagnostics</a></li>
</ul>
]]></content:encoded></item></channel></rss>