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

instrument mechanism / verified-clean

# Monte Carlo Retirement Simulator mechanism

The inspectable method record for Monte Carlo Retirement Simulator, kept separate from implementation and qualification.

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

## Model scope

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.

- 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.

## Units and conventions

- 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.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "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."
}
````

## Failure boundary

**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.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/monte-carlo-retirement-simulator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/monte-carlo-retirement-simulator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/monte-carlo-retirement-simulator/qualification/>)

## Sources and evidence

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

- `VERIFIED_LEDGER.json`

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

- `BOUNDARY_HAZARD_CATALOG.json`
