Source: https://guthlabs.ai/docs/instruments/monte-carlo-retirement-simulator/

instrument / verified-clean

# Monte Carlo Retirement Simulator

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

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

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Finance, Economics & Business (educational only — never individualized investment, tax, or legal advice)

**Tranche**: tranche-6

**Evidence ID**: t6-061

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The formula is a reasonable high-level Monte Carlo concept, but the exact financial algorithm is not sufficiently specified for verification. The four deterministic vectors use the valid degenerate case volatility=0 so expected values are hand-checkable without an unseeded random generator. Before PASS, specify withdrawal timing, return convention, failure semantics, withdrawal-rate behavior, return-floor policy, inflation treatment, percentile methodology, and reproducible RNG details.

### Formula and scope findings

- The recurrence is underspecified: it must state whether each year's return is applied before or after the withdrawal. The test vectors assume end-of-year withdrawal followed by return: B_t=(B_{t-1}-W_t)(1+r_t).

- The failure rule is unspecified. The test vectors define failure when the balance immediately before a scheduled withdrawal is less than that withdrawal; equality is allowed.

- A normal return distribution can generate r<-1, which implies a loss greater than 100% and a negative portfolio unless returns are floored or a different distribution is used.

- The withdrawal plan is ambiguous: fixed nominal withdrawals, inflation-adjusted withdrawals, and percentage-of-balance withdrawals produce different algorithms. The test vectors use a fixed nominal withdrawal unless a withdrawal rate is explicitly supplied.

- The meaning of withdrawal rate is unspecified. The test vector using 4% interprets it as the initial balance multiplied by 0.04, with a fixed nominal withdrawal thereafter.

- A finite Monte Carlo estimate is random. No random-number seed, generator, draw ordering, or reproducibility contract is specified, so exact stochastic test outputs cannot be verified.

### Unit assumptions

- Starting balance and withdrawals are in the same currency units.

- Mean return and volatility are annual decimal fractions: 0.05 means 5% and 0.20 means 20%, not 5 and 20.

- The normal draw is an annual simple return, r~N(mu,sigma), rather than a continuously compounded log return.

- Withdrawals occur once per year at the beginning of the recurrence, followed by that year's return; equivalently, the balance update is B_t=(B_{t-1}-W_t)(1+r_t).

- A path succeeds only if it can make every scheduled withdrawal; balance equal to the withdrawal is allowed and leaves zero after withdrawal.

- For deterministic sigma=0 vectors, every trial has the same return and therefore the same path; p5, p50, and p95 are identical.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The extreme-magnitude vector produces approximately 1e616, which overflows standard JavaScript Number arithmetic to Infinity. The specification also leaves withdrawal timing and return-unit conventions underspecified, allowing materially different balances for the same apparent inputs.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

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

````
{
  "inputs": {
    "starting_balance": 100000,
    "withdrawal_amount": 5000,
    "mean_return": 0.05,
    "volatility": 0,
    "years": 3,
    "trial_count": 100,
    "withdrawal_timing": "end_of_year",
    "return_model": "simple_annual",
    "return_draws": [
      0.05,
      0.05,
      0.05
    ]
  },
  "expected_outputs": {
    "success_probability_percent": 100,
    "balance_percentiles": {
      "p5": [
        100000,
        99750,
        99487.5,
        99211.875
      ],
      "p50": [
        100000,
        99750,
        99487.5,
        99211.875
      ],
      "p95": [
        100000,
        99750,
        99487.5,
        99211.875
      ]
    }
  },
  "working": "All 100 trials are identical because sigma=0. Year 1: (100000-5000)*1.05 = 95000*1.05 = 99750. Year 2: (99750-5000)*1.05 = 94750*1.05 = 99487.5. Year 3: (99487.5-5000)*1.05 = 94487.5*1.05 = 99211.875. Every withdrawal is affordable, so 100 of 100 trials succeed and every percentile equals the common path."
}
````

## 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_CLEAN`

- `evidence-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
