The maturity event of a trace step zeroes the notional.
Determinism, as a corollary of relational↔functional agreement: any two LAM
steps out of s on the functional image of the same event and time
coincide. (Step is the graph of the function stf.)
The maturity date is therefore constant along any execution trace.
Number of steps in a trace (closure).
Equations
Instances For
For the dispatching contracts, the cashflow's event type is exactly the event that produced it.
Rate cap/floor bound (PAM). After a rate reset the nominal rate lies
within the life floor/cap window [RRLF, RRLC] (when both are present and
well-ordered). Unprovable over Float; a theorem over ℝ.
Rate cap/floor bound (ANN). ANN's rate reset reuses PAM's rate logic, so the same window bound holds.
Redemption non-overshoot (core). When the notional and instalment are
both nonnegative (the sign-normalised case), the post-redemption notional
Nt − redeemed Nt Prnxt stays in [0, Nt]: a redemption never overshoots
0, nor increases the magnitude. Needs a total order — ℝ, not Float.
Redemption non-overshoot (LAM PR step). Specialised to the actual
STF_PR_LAM next-state: the notional after a principal redemption stays in
[0, Nt].
A rate reset never moves principal — only the rate (and accruals/Sd).
Prepayment reduces the notional by exactly the observed prepayment amount.
Interest capitalization (IPCI) moves the accrued interest into the
notional and resets accrued interest to 0 — value is conserved, not
created. Holds definitionally at any amount type.
When the instalment covers the whole (sign-normalised) notional, the entire notional is redeemed.
Otherwise exactly the instalment is redeemed.
Redeemed amount is bounded by the notional magnitude (sign-free): a
redemption never pays out more than the outstanding notional. Over ℝ.
Full repayment empties the notional. Once the instalment reaches the
outstanding notional, the PR step drives it to exactly 0. Over ℝ.
Strict amortization. With a strictly positive notional and instalment,
a PR step strictly decreases the notional (progress toward repayment).
Over ℝ.
With every cap/floor absent, a rate reset sets the rate to the raw market
target Oʳᶠ(RRMO,t)·RRMLT + RRSP (the previous rate cancels).
A principal-redemption trace: zero or more PR steps (each admissible,
Sd ≤ t). This is the sub-relation of LAM.Trace that only redeems
principal — exactly the regime in which the notional should be conserved
(other events like IED/IPCI reset or grow it).
- refl {ct : Terms ℝ} {rf : RiskFactorEnv ℝ} {s : State ℝ} : PRTrace ct rf s s
- step {ct : Terms ℝ} {rf : RiskFactorEnv ℝ} {s : State ℝ} {t : Protocol.Time} {s' : State ℝ} (ht : s.sd ≤ t) (rest : PRTrace ct rf (LAM.stf_PR ct rf t s) s') : PRTrace ct rf s s'
Instances For
Trace-level conservation. Along a whole principal-redemption trace, the
notional stays in [0, Nt₀]: it never goes negative (no overshoot past 0)
and never exceeds its starting value (monotone repayment). Proved by
induction on the trace from the single-step bound lam_pr_nt_mem; the
instalment Prnxt is preserved by PR, so its nonnegativity propagates.
Magnitude form: a redemption trace never increases the notional's magnitude
(|Nt'| ≤ |Nt₀|), given the sign-normalised nonnegative starting state.
A PRTrace is a genuine LAM execution trace (each PR step is the
LAM.Step for event .PR), so the conservation above is a statement about
real executions, not a separate toy relation.
Cap/floor intrinsic is non-negative. CAPFL pays
N·Y·(max(rate−cap,0) + max(floor−rate,0)) per period; the rate-excess kernel
is always ≥ 0, so a long cap/floor never has a negative leg.
Swap net settlement equals the leg sum. A plain-vanilla swap's per-period
fixed leg sign·N·fix·Y and floating leg −sign·N·flt·Y net to the single
cash flow sign·N·(fix−flt)·Y — exactly what the deliverySettlement = "S"
fold computes from the two D legs.
Collateral cap. CEC settles min(coverage·exposure, collateralValue), so
the payout never exceeds the posted collateral …
… nor the covered claim.
Credit-enhancement exposure is non-negative. A guarantee's covered
exposure is a sum of per-leg magnitudes (|Nt| + accrued); aggregating
non-negative legs keeps it ≥ 0, hence the payout coverage·exposure has the
contract-role sign and never flips.
SWPPV monotonicity holds even though IPFX/RR keep Sd: a step either
leaves Sd unchanged or advances it to the (admissible) event time.
Swap notional is never exchanged. No SWPPV event moves the notional —
only the period boundary Sd (via IPFL) and the floating rate (via RR)
change. A swap exchanges interest, not principal.
A LAX redemption reduces the notional by exactly the (signed) instalment.
A LAX draw increases the notional by exactly the (signed) draw.
LAX maturity pays out and zeroes the residual notional.
UMP capitalization is value-conserving. An IPCI event grows the
notional by the interest accrued over the period and resets the accrual; no
cash leaves the contract (pof = 0).
Rate cap/floor bound (SWPPV). After a floating-rate reset the rate lies
within the life floor/cap window [lifeFloor, lifeCap] (both present and
well-ordered). The swap analogue of pam_rr_rate_mem; a theorem over ℝ.
Swap leg netting (kernel-level). A period's fixed leg pof_IPFX and
floating leg pof_IPFL sum to N·(fixedRate − floatRate)·Y — exactly the
single cash flow the deliverySettlement = "S" fold produces from the two
gross legs. Now stated on the actual SWPPV.pof_*, not abstract terms.
UMP compounding never shrinks the deposit. With a non-negative notional,
rate and year fraction, an IPCI capitalization leaves the notional no
smaller (interest only ever adds to a positive-rate deposit). Over ℝ.
Only a rate reset moves the floating rate. Every non-RR SWPPV event
(the two legs, clock ticks) leaves Ipnr untouched; the floating rate is
changed exclusively by RR.
At par the legs cancel. When the fixed and floating rates coincide
(fixedRate = Ipnr), the fixed leg is exactly the negation of the floating
leg — so the two legs are sign-opposite.
At par the net settlement is zero. Hence the deliverySettlement = "S"
netted period flow vanishes when the swap is at par.
A capitalization trace: zero or more IPCI steps (each admissible,
Sd ≤ t). Lives in Type so the multiplicative growth factor below can be
extracted from it.
- refl {rf : RiskFactorEnv ℝ} {s : State ℝ} : IPCITrace rf s s
- step {rf : RiskFactorEnv ℝ} {s : State ℝ} {t : Protocol.Time} {s' : State ℝ} (ht : s.sd ≤ t) (rest : IPCITrace rf (UMP.stf_IPCI rf t s) s') : IPCITrace rf s s'
Instances For
The compound growth factor ∏ᵢ (1 + rateᵢ·Yᵢ) accumulated along a
capitalization trace (rateᵢ/Yᵢ read from the running state at step i).
Equations
- Actus.Contract.Properties.ipciFactor rf Actus.Contract.Properties.IPCITrace.refl = 1
- Actus.Contract.Properties.ipciFactor rf (Actus.Contract.Properties.IPCITrace.step ht rest) = (1 + x✝¹.ipnr * rf.yf x✝¹.sd t) * Actus.Contract.Properties.ipciFactor rf rest
Instances For
The nominal rate is constant under capitalization. IPCI never touches
Ipnr, so it is the same throughout the trace — justifying the single
rate in the closed form below.
UMP compound-growth closed form. After a capitalization trace the
notional is the initial notional times the product of the per-period growth
factors: Nt' = Nt₀ · ∏ᵢ (1 + rate·Yᵢ). Proved by induction on the trace —
each IPCI multiplies the notional by its (1 + rate·Y) factor.
A single LAX redemption with a non-negative instalment, on the long
(sign ≥ 0) side, does not increase the notional. Unlike LAM's capped
redeemed, STF_PR_LAX subtracts the raw (signed) instalment, so this is a
one-sided (monotone) bound rather than a [0, Nt] window.
A redemption (PR) trace for LAX: zero or more DEC redemptions, each
with a non-negative instalment x at an admissible time.
- refl {ct : Terms ℝ} {rf : RiskFactorEnv ℝ} {s : State ℝ} : LAXPRTrace ct rf s s
- step {ct : Terms ℝ} {rf : RiskFactorEnv ℝ} {s : State ℝ} {x : ℝ} {t : Protocol.Time} {s' : State ℝ} (hx : 0 ≤ x) (ht : s.sd ≤ t) (rest : LAXPRTrace ct rf (LAX.stf_PR ct rf x t s) s') : LAXPRTrace ct rf s s'
Instances For
Monotone amortization. Along a whole LAX redemption trace, the notional
never increases: Nt' ≤ Nt₀ (the long-side, non-negative-instalment case).
Proved by induction from the single-step bound lax_pr_nt_le.
A LAXPRTrace is a genuine LAX execution trace (each step is the LAX.Step
for event .PR with payload x), so the bound above is about real
executions, not a separate toy relation.