Source: https://guthlabs.ai/docs/instruments/markov-chain-simulator/

instrument / verified-with-binding-errata

# Markov Chain Simulator

The current ledger marks this instrument verified with errata that must be applied at binding time.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/markov-chain-simulator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/markov-chain-simulator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/markov-chain-simulator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/markov-chain-simulator/qualification/>)

## Ledger state

The current ledger marks this instrument verified with errata that must be applied at binding time.

**Area**: Mathematics — arithmetic through advanced (algebra, matrices, calculus, sequences/series, number theory, combinatorics, graphing, complex numbers, geometry, logic, sets)

**Tranche**: tranche-8

**Evidence ID**: t8-037

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The core algorithms are correct for finite discrete-time Markov chains using row distributions: solve πP=π with sum(π)=1, and compute μP^n. Verdict is NEEDS_REVIEW because the spec does not explicitly define row versus column orientation or whether "initial state" means a one-hot state or an already supplied distribution. The honest-label assumptions about irreducibility and aperiodicity are appropriate but should explicitly distinguish uniqueness of stationarity from convergence.

### Formula and scope findings

- The formulas are mathematically standard under a row-vector convention: a stationary distribution satisfies πP=π, and an initial row distribution μ evolves as μP^n.

- The input is described as an "initial state" rather than an initial distribution. If a single state is supplied, the implementation must convert it to the corresponding one-hot row vector before applying μP^n.

- The matrix orientation is not explicitly stated. With column-vector distributions, the equivalent evolution is P^nμ and the stationary equation is Pπ=π; the current formulas require row vectors.

- A finite stochastic chain always has at least one stationary distribution, but uniqueness requires irreducibility, and convergence of μP^n to it requires aperiodicity in addition to irreducibility.

- The implementation must validate that P is square, every entry is nonnegative, and every row sums to 1 under the stated row-vector convention.

### Unit assumptions

- Transition probabilities and state-distribution entries are dimensionless values in [0,1].

- Each row of P must sum to exactly 1, subject only to a documented numerical tolerance.

- n is a nonnegative integer; n=0 means P^0=I and the distribution remains the initial distribution.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The undefined-result vector exposes a singular stationary solve that must be rejected or reported as non-unique. The convention probe also shows that an unspecified row-versus-column convention can produce an invalid distribution summing to 1.1 if the displayed matrix is used with the wrong multiplication orientation.

## Errata and corrections

### Tranche errata

**state_distribution_at_n** · vector 2

[1,0,0]

[0,1,0]

for the cyclic permutation matrix P=[[0,1,0],[0,0,1],[1,0,0]], her own working asserts '[1,0,0]·P=[1,0,0]', but row 0 of P is [0,1,0] so [1,0,0]·P=[0,1,0] — a basic matrix-vector-product error, confirmed by direct recomputation of P^4 applied to the initial distribution

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "transition_matrix": [
      [
        0.8,
        0.2
      ],
      [
        0.3,
        0.7
      ]
    ],
    "initial_state_distribution": [
      1,
      0
    ],
    "n": 3
  },
  "expected_outputs": {
    "steady_state": [
      {
        "exact": "3/5"
      },
      {
        "exact": "2/5"
      }
    ],
    "state_distribution_at_n": [
      {
        "exact": "13/20"
      },
      {
        "exact": "7/20"
      }
    ]
  },
  "reference_data": {
    "chain_type": "irreducible and aperiodic",
    "row_convention": "mu_next=mu P"
  },
  "working": "Let π=[a,b]. From πP=π: a=0.8a+0.3b, so 0.2a=0.3b and a:b=3:2. Therefore π=[3/5,2/5]. Compute P^2=[[0.8*0.8+0.2*0.3, 0.8*0.2+0.2*0.7],[0.3*0.8+0.7*0.3, 0.3*0.2+0.7*0.7]]=[[0.70,0.30],[0.45,0.55]]. Then P^3 first row is [0.70*0.8+0.30*0.3, 0.70*0.2+0.30*0.7]=[0.65,0.35]=[13/20,7/20]. Since the initial distribution is [1,0], [1,0]P^3 is the first row of P^3."
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_WITH_ERRATA`

- `evidence-tranche8/tranche8-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
