You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| `HPFState` | `BlockHighPass` fields `{_u, _y}` | `src/lib/controllib/BlockHighPass.hpp:60–63` | **abstraction** | Models the two persistent state variables; `_fCut` and `Block` base class abstracted away |
2999
+
| `hpfUpdate` | `BlockHighPass::update` | `src/lib/controllib/BlockHighPass.cpp:44–50` | **abstraction** | Float → Rat; coefficient `a` taken as direct parameter rather than computing `2π·fCut·dt` |
- **Float vs Rat**: C++ uses `float`; Lean model uses `Rat` (exact rationals). IEEE 754 rounding, NaN, and ±∞ are not modelled.
3020
+
- **Coefficient computation**: C++ computes `b = 2π·fCut·dt` and `a = 1/(1+b)` from stored `_fCut` and `getDt()`. Lean takes `a` directly as a parameter. `hpf_coeff_in_range` bridges this: for any physical `b > 0`, the coefficient lands in `(0, 1)`.
3021
+
- **`Block` base class**: `getDt()` and the parameter system are abstracted away; not modelled in Lean.
3022
+
- **Constant-input focus**: theorems focus on the constant (DC step) input scenario to prove DC blocking. General time-varying inputs are not fully analysed.
3023
+
3024
+
### Validation evidence
3025
+
3026
+
No Route B correspondence tests yet. `hpf_coeff_in_range` proves the C++ coefficient formula lands in `(0, 1)` for any physical parameter; `hpfIterConst_pow` proves the closed form matches the recurrence, which matches the C++ loop structurally.
3027
+
3028
+
### Impact on proofs
3029
+
3030
+
Key contribution: **DC blocking proof** — any constant input drives the HPF output exponentially to zero (`y_n = a^n · y_0`, `0 < a < 1`). This formally confirms the filter's primary design property and provides a verified characterisation of the IIR high-pass recurrence.
0 commit comments