Estimation.NPIV.Primal

The sieve primal NPIV analysis: projected residuals, variance and bias terms, and the rate theorem for the structural function.

Empirical­Process­Event 19 core · 16 supporting · 13 submodules High-probability control of the empirical process in the convergence-rate proof for the Tikhonov-regularized adversarial estimator of a nonparametric instrumental-variable (inverse) problem.
Estimator 9 core · 0 supporting This file defines the public estimator-level interface for the primal NPIV rate proof.

TRAE Primal Estimator Interface

This file defines the public estimator-level interface for the primal NPIV rate proof. It exposes scoped measurable-space instances for the spaces stored in an inverse-problem system, the TRAEClasses bundle of candidate and critic classes, the empirical objective pieces innerIntegrand, innerObjective, and supObjective, and the predicate IsTRAEPrimalEstimator recording membership, empirical sup-min optimality, and joint measurability of the estimator.

instance instMeasurableSpace_𝒲 reviewed
Causalean.Estimation.NPIV.Primal

For an inverse-problem system, the observation space is equipped with the measurable space specified by that system.

Definition (Lean source)
Ω :
instMeasurableSpace_𝒲 S :
S.inst𝒲
Causalean.Estimation.NPIV.Primal.instMeasurableSpace_𝒲 · Causalean/Estimation/NPIV/Primal/Estimator.lean:63 · uses InverseProblemSystem
instance instMeasurableSpace_𝒳 reviewed
Causalean.Estimation.NPIV.Primal

For an inverse-problem system, the covariate space is equipped with the measurable space specified by that system.

Definition (Lean source)
Ω :
instMeasurableSpace_𝒳 S :
S.inst𝒳
Causalean.Estimation.NPIV.Primal.instMeasurableSpace_𝒳 · Causalean/Estimation/NPIV/Primal/Estimator.lean:71 · uses InverseProblemSystem
instance instMeasurableSpace_𝒵 reviewed
Causalean.Estimation.NPIV.Primal

For an inverse-problem system, the instrument space is equipped with the measurable space specified by that system.

Definition (Lean source)
Ω :
instMeasurableSpace_𝒵 S :
S.inst𝒵
Causalean.Estimation.NPIV.Primal.instMeasurableSpace_𝒵 · Causalean/Estimation/NPIV/Primal/Estimator.lean:79 · uses InverseProblemSystem
structure TRAEClasses reviewed
Causalean.Estimation.NPIV.Primal

This structure packages a nonempty statistical candidate class for the primal nuisance that sits inside the ambient candidate set, together with a nonempty statistical critic class that sits inside the ambient critic set, for the primal Tikhonov-regularized adversarial optimization (def:est-trae-population-criterion, line 139).

Definition (Lean source)
Ω :
Type u_1
shared
μ :
shared
S :
Statistical candidate class for the primal nuisance.
H :
Set (S.𝒳 → ℝ)
Statistical critic class.
F :
Set (S.𝒵 → ℝ)
`H` is contained in the candidate set `Hbar`.
H_subset :
H ⊆ S.Hbar
`F` is contained in the candidate set `Qbar`.
F_subset :
F ⊆ S.Qbar
The candidate class is non-empty.
H_nonempty :
H.Nonempty
The critic class is non-empty.
F_nonempty :
F.Nonempty
Causalean.Estimation.NPIV.Primal.TRAEClasses · Causalean/Estimation/NPIV/Primal/Estimator.lean:91 · uses OperatorSystem
def innerIntegrand reviewed
Causalean.Estimation.NPIV.Primal

The empirical integrand for an NPIV operator system, regularization level, candidate, and critic at an observation is 2(m(w;f) - h(x)f(z)) - f(z)² + λh(x)², with the system's covariate and instrument.

Definition (Lean source)
Ω :
Type u_1
shared
S :
lambda :
ℝ
h :
S.𝒳 → ℝ
f :
S.𝒵 → ℝ
w :
S.𝒲
innerIntegrand S lambda h f w :
ℝ
2 * (S.m w f - h (S.xOf w) * f (S.zOf w)) - f (S.zOf w) ^ 2 + lambda * h (S.xOf w) ^ 2
Causalean.Estimation.NPIV.Primal.innerIntegrand · Causalean/Estimation/NPIV/Primal/Estimator.lean:112 · uses OperatorSystem
def innerObjective reviewed
Causalean.Estimation.NPIV.Primal

The fold-A inner objective averages the empirical integrand for an NPIV operator system, sample and split, regularization level, candidate, and critic over the nuisance fold selected by the sample-size index and realization.

Definition (Lean source)
Ω :
Type u_1
shared
S :
P_W :
Measure S.𝒲
sample :
IIDSample Ω S.𝒲 μ P_W
split :
lambda :
ℝ
h :
S.𝒳 → ℝ
f :
S.𝒵 → ℝ
n :
ℕ
ω :
Ω
innerObjective S sample split lambda h f n ω :
ℝ
((split.foldA n).card : ℝ)⁻¹ * ∑ i ∈ split.foldA n, innerIntegrand S lambda h f (sample.Z i ω)
def supObjective reviewed
Causalean.Estimation.NPIV.Primal

The TRAE primal sup-min objective takes the supremum of the fold-A inner objective over the critic class, for an NPIV operator system, sample and split, regularization level and candidate, and the chosen sample-size index and realization.

Definition (Lean source)
Ω :
Type u_1
shared
S :
TC :
P_W :
Measure S.𝒲
sample :
IIDSample Ω S.𝒲 μ P_W
split :
lambda :
ℝ
h :
S.𝒳 → ℝ
n :
ℕ
ω :
Ω
supObjective S TC sample split lambda h n ω :
ℝ
⨆ f ∈ TC.F, innerObjective S sample split lambda h f n ω
structure IsTRAEPrimalEstimator reviewed
Causalean.Estimation.NPIV.Primal

An estimator, indexed by sample size and randomness, is a TRAE primal estimator relative to a nuisance fold when, at every sample size and realization, it belongs to the statistical candidate class, attains an empirical sup-min objective on that fold no worse than at any other candidate in the class, and is jointly measurable in the randomness and the covariate argument.

Definition (Lean source)
Ω :
Type u_1
shared
μ :
shared
S :
TC :
P_W :
Measure S.𝒲
sample :
IIDSample Ω S.𝒲 μ P_W
split :
lambda :
ℝ
h_hat :
ℕ → Ω → S.𝒳 → ℝ
mem_H :
∀ n ω, h_hat n ω ∈ TC.H

Membership of the empirical optimizer in the statistical class H.

opt :
∀ n ω,
∀ h' ∈ TC.H,
supObjective S TC sample split lambda (h_hat n ω) n ω
≤ supObjective S TC sample split lambda h' n ω

Empirical sup-min optimality on fold A(n).

measurable :
∀ n, Measurable (fun p : Ω × S.𝒳 => h_hat n p.1 p.2)

Joint measurability of (ω, x) ↦ h_hat n ω x.

structure IsTRAEPrimalEstimatorSequence reviewed
Causalean.Estimation.NPIV.Primal

For an NPIV operator system, candidate and critic classes, an independent sample, a one-shot split, a regularization sequence, and an estimator sequence, the estimator is a sample-size-dependent TRAE estimator when its candidate belongs to the statistical class, minimizes the empirical objective formed with lambda n at each index, and is jointly measurable.

Definition (Lean source)
Ω :
Type u_1
shared
μ :
shared
S :
TC :
P_W :
Measure S.𝒲
sample :
IIDSample Ω S.𝒲 μ P_W
split :
lambda :
ℕ → ℝ
h_hat :
ℕ → Ω → S.𝒳 → ℝ
mem_H :
∀ n ω, h_hat n ω ∈ TC.H

Membership of the empirical optimizer in the statistical class H.

opt :
∀ n ω,
∀ h' ∈ TC.H,
supObjective S TC sample split (lambda n) (h_hat n ω) n ω
≤ supObjective S TC sample split (lambda n) h' n ω

Empirical sup-min optimality at index n, using lambda n.

measurable :
∀ n, Measurable (fun p : Ω × S.𝒳 => h_hat n p.1 p.2)

Joint measurability of (omega, x) ↦ h_hat n omega x.

Rate­Sequence 2 core · 1 supporting This module gives the fixed-sample, fixed-confidence rate for a TRAE estimator using lambda n. ★ trae_primal_rate★ primal_strongNorm_tendstoInProb_of_rates

Primal NPIV rate with a regularization sequence

This module gives the fixed-sample, fixed-confidence rate for a TRAE estimator using lambda n. Its constants come from a uniform Tikhonov certificate and therefore do not depend on the selected regularization level.

theorem trae_primal_rate reviewed
Causalean.Estimation.NPIV.Primal

Given a source condition, a uniform source-condition bias certificate, a sample-size-dependent TRAE estimator, a positive regularization sequence bounded above by two, the localized regime at index n, a positive fold size, a fixed confidence level between zero and one, and the fixed-confidence critical-radius floor, the corresponding fixed-level peeling floor, and the sample-size index, there is an event of probability at least 1 - zeta on which the squared strong error is bounded by the displayed level-independent constant times delta n ^ 2 / lambda_n n + norm(w0) * (lambda_n n) ^ min beta 1.

Formal statement
Omega :
Type u_1
Measure Omega
shared
TC :
P_W :
Measure S.𝒲
IIDSample Omega S.𝒲 mu P_W
split :
lambda_n :
ℕ → ℝ
beta :
ℝ
delta :
ℕ → ℝ
h_hat :
ℕ → Omega → S.𝒳 → ℝ
n :
ℕ
is_estimator :
IsTRAEPrimalEstimatorSequence S TC sample split lambda_n h_hat
sc :
bias :
hlambda_pos :
∀ j, 0 < lambda_n j
hlambda_lt :
∀ j, lambda_n j < 2
regime :
LocalizedRegimes S TC sample sc { uniform := bias, lambda_pos := hlambda_pos n } (split.n₁ n) (delta n)
hn :
1 ≤ split.n₁ n
zeta :
ℝ
hzeta_pos :
0 < zeta
hzeta_lt :
zeta < 1
floor :
peeling :
PeelingFloor regime (zeta / 4)
∃ A : Set Omega,
mu A ≥ 1 - ofReal zeta
conclusion 1
omega ∈ A :
(S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem)) ^ 2
≤ (2 * 320 + 2 * 320 * bias.C + 4 * bias.C) * ((delta n) ^ 2 / lambda_n n + S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ (min beta 1))
Proof (Lean source)
theorem trae_primal_rate {S : OperatorSystem Omega mu} {TC : TRAEClasses S} {P_W : Measure S.𝒲} {sample : IIDSample Omega S.𝒲 mu P_W} {split : OneShotSplit sample} {lambda_n : ℕ → ℝ} {beta : ℝ} {delta : ℕ → ℝ} {h_hat : ℕ → Omega → S.𝒳 → ℝ} {n : ℕ} (is_estimator : IsTRAEPrimalEstimatorSequence S TC sample split lambda_n h_hat) (sc : SourceCondition S beta) (bias : TikhonovBiasBound S beta sc) [IsProbabilityMeasure mu] (hlambda_pos : ∀ j, 0 < lambda_n j) (hlambda_lt : ∀ j, lambda_n j < 2) (regime : LocalizedRegimes S TC sample sc { uniform := bias, lambda_pos := hlambda_pos n } (split.n₁ n) (delta n)) (hn : 1 ≤ split.n₁ n) {zeta : ℝ} (hzeta_pos : 0 < zeta) (hzeta_lt : zeta < 1) (floor : PerSampleConfidenceFloor regime zeta) (peeling : PeelingFloor regime (zeta / 4)) : ∃ A : Set Omega, MeasurableSet A ∧ mu A ≥ 1 - ofReal zeta ∧ ∀ omega ∈ A, (S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem)) ^ 2 ≤ (2 * 320 + 2 * 320 * bias.C + 4 * bias.C) * ((delta n) ^ 2 / lambda_n n + S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ (min beta 1)) := by let tb : TikhonovBiasBoundAt S beta (lambda_n n) sc := { uniform := bias, lambda_pos := hlambda_pos n } obtain ⟨A, hAmeas, hAmass, hA⟩ := per_sample_empirical_process_event is_estimator sc tb regime hn hzeta_pos hzeta_lt (hlambda_pos n).le floor peeling let Cstrong := 2 * 320 + 2 * 320 * bias.C + 4 * bias.C refine ⟨A, hAmeas, hAmass, ?_⟩ · intro omega homega let hh := TC.H_subset (is_estimator.mem_H n omega) have hsc := tb.strong_convexity (h_hat n omega) hh have hep := hA omega homega have hcombined : lambda_n n * (S.strongNorm (S.hL2 hh - S.hL2 tb.h_lambda_star_mem)) ^ 2 + (S.weakNorm (S.hL2 hh - S.hL2 tb.h_lambda_star_mem)) ^ 2 ≤ 320 * ((S.weakNorm (S.hL2 tb.h_lambda_star_mem - S.hL2 S.h₀_mem)) ^ 2 + (delta n) ^ 2) := by let x := S.strongNorm (S.hL2 hh - S.hL2 tb.h_lambda_star_mem) let y := S.weakNorm (S.hL2 hh - S.hL2 tb.h_lambda_star_mem) let d := delta n have hpre : lambda_n n * x ^ 2 + y ^ 2 ≤ 50 * d ^ 2 + lambda_n n * (10 * d * x + 5 * d ^ 2) := by simpa [x, y, d, hh] using hsc.trans hep have hyoung : 10 * d * x ≤ (1 / 2 : ℝ) * x ^ 2 + 50 * d ^ 2 := by nlinarith [sq_nonneg (x - 10 * d)] have hyoung_lambda := mul_le_mul_of_nonneg_left hyoung (hlambda_pos n).le have hlambda_d : lambda_n n * d ^ 2 ≤ 2 * d ^ 2 := mul_le_mul_of_nonneg_right (hlambda_lt n).le (sq_nonneg d) have hdelta : lambda_n n * x ^ 2 + y ^ 2 ≤ 320 * d ^ 2 := by nlinarith [hpre, hyoung_lambda, hlambda_d, sq_nonneg y] calc _ ≤ 320 * d ^ 2 := hdelta _ ≤ 320 * ((S.weakNorm (S.hL2 tb.h_lambda_star_mem - S.hL2 S.h₀_mem)) ^ 2 + d ^ 2) := by nlinarith [sq_nonneg (S.weakNorm (S.hL2 tb.h_lambda_star_mem - S.hL2 S.h₀_mem))] have hrate := strong_rate_at_of_combined sc tb (S.hL2 hh) (hlambda_lt n) (by norm_num : (0 : ℝ) ≤ 320) hcombined simpa [Cstrong, hh, tb] using hrate
theorem primal_strongNorm_tendstoInProb_of_rates reviewed
Causalean.Estimation.NPIV.Primal

For a primal TRAE estimator sequence, a positive source exponent with source condition and uniform bias certificate, positive regularization levels below two, localized regimes, fixed-confidence critical-radius floors, and fixed-level peeling floors, suppose the failure probabilities vanish while remaining strictly between zero and one, the localization radii vanish, the regularization levels vanish, and the variance term delta n² / lambda_n n vanishes. Then the primal strong-norm error converges to zero in probability.

Formal statement
Omega :
Type u_1
Measure Omega
shared
TC :
P_W :
Measure S.𝒲
IIDSample Omega S.𝒲 mu P_W
split :
lambda_n :
ℕ → ℝ
beta :
ℝ
delta zeta :
ℕ → ℝ
h_hat :
ℕ → Omega → S.𝒳 → ℝ
is_estimator :
IsTRAEPrimalEstimatorSequence S TC sample split lambda_n h_hat
sc :
bias :
hbeta :
0 < beta
hlambda_pos :
∀ n, 0 < lambda_n n
hlambda_lt :
∀ n, lambda_n n < 2
regimes :
∀ n,
LocalizedRegimes S TC sample sc { uniform := bias, lambda_pos := hlambda_pos n } (split.n₁ n) (delta n)
hzeta_pos :
∀ n, 0 < zeta n
hzeta_lt :
∀ n, zeta n < 1
floors :
∀ n, PerSampleConfidenceFloor (regimes n) (zeta n)
peeling :
∀ n, PeelingFloor (regimes n) (zeta n / 4)
hzeta_zero :
Tendsto zeta atTop (nhds 0)
hdelta_zero :
Tendsto delta atTop (nhds 0)
hlambda_zero :
Tendsto lambda_n atTop (nhds 0)
hdelta_sq_div_lambda_zero :
Tendsto (fun n => (delta n) ^ 2 / lambda_n n) atTop (nhds 0)
Modes.TendstoInProbability (fun _ : ℕ => mu) (fun n omega => S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem)) atTop (fun _ _ => 0)
Proof (Lean source)
theorem primal_strongNorm_tendstoInProb_of_rates {S : OperatorSystem Omega mu} {TC : TRAEClasses S} {P_W : Measure S.𝒲} {sample : IIDSample Omega S.𝒲 mu P_W} {split : OneShotSplit sample} {lambda_n : ℕ → ℝ} {beta : ℝ} {delta zeta : ℕ → ℝ} {h_hat : ℕ → Omega → S.𝒳 → ℝ} (is_estimator : IsTRAEPrimalEstimatorSequence S TC sample split lambda_n h_hat) (sc : SourceCondition S beta) (bias : TikhonovBiasBound S beta sc) [IsProbabilityMeasure mu] (hbeta : 0 < beta) (hlambda_pos : ∀ n, 0 < lambda_n n) (hlambda_lt : ∀ n, lambda_n n < 2) (regimes : ∀ n, LocalizedRegimes S TC sample sc { uniform := bias, lambda_pos := hlambda_pos n } (split.n₁ n) (delta n)) (hzeta_pos : ∀ n, 0 < zeta n) (hzeta_lt : ∀ n, zeta n < 1) (floors : ∀ n, PerSampleConfidenceFloor (regimes n) (zeta n)) (peeling : ∀ n, PeelingFloor (regimes n) (zeta n / 4)) (hzeta_zero : Tendsto zeta atTop (nhds 0)) (hdelta_zero : Tendsto delta atTop (nhds 0)) (hlambda_zero : Tendsto lambda_n atTop (nhds 0)) (hdelta_sq_div_lambda_zero : Tendsto (fun n => (delta n) ^ 2 / lambda_n n) atTop (nhds 0)) : Modes.TendstoInProbability (fun _ : ℕ => mu) (fun n omega => S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem)) atTop (fun _ _ => 0) := by have _hdelta_sq_zero : Tendsto (fun n => (delta n) ^ 2) atTop (nhds 0) := by simpa [pow_two] using hdelta_zero.mul hdelta_zero let p : ℝ := min beta 1 have hp : 0 < p := lt_min hbeta (by norm_num) have hlambda_pow : Tendsto (fun n => (lambda_n n) ^ p) atTop (nhds 0) := by have h := hlambda_zero.rpow_const (inr hp.le) simpa [Real.zero_rpow hp.ne'] using h have hbias_rate : Tendsto (fun n => S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ p) atTop (nhds 0) := by simpa using tendsto_const_nhds.mul hlambda_pow have htotal_rate : Tendsto (fun n => (delta n) ^ 2 / lambda_n n + S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ p) atTop (nhds 0) := by simpa using hdelta_sq_div_lambda_zero.add hbias_rate let C : ℝ := 2 * 320 + 2 * 320 * bias.C + 4 * bias.C have hC_rate : Tendsto (fun n => C * ((delta n) ^ 2 / lambda_n n + S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ p)) atTop (nhds 0) := by simpa using tendsto_const_nhds.mul htotal_rate rw [Tendsto_inProb_iff] rw [tendstoInMeasure_iff_norm] intro epsilon hepsilon have hsmall : ∀ᶠ n in atTop, C * ((delta n) ^ 2 / lambda_n n + S.strongNorm (S.hL2 sc.w₀_mem) * (lambda_n n) ^ p) < epsilon ^ 2 := (tendsto_order.1 hC_rate).2 (epsilon ^ 2) (sq_pos_of_pos hepsilon) have hzeta_enn : Tendsto (fun n => ofReal (zeta n)) atTop (nhds 0) := by simpa using ENNReal.tendsto_ofReal hzeta_zero have hn : ∀ᶠ n in atTop, 1 ≤ split.n₁ n := (Filter.tendsto_atTop.1 split.grow) 1 refine tendsto_of_tendsto_of_tendsto_of_le_of_le' tendsto_const_nhds hzeta_enn (Filter.Eventually.of_forall fun _ => bot_le) ?_ filter_upwards [hsmall, hn] with n hnsmall hn_pos obtain ⟨A, hAmeas, hAmass, hAbound⟩ := trae_primal_rate is_estimator sc bias hlambda_pos hlambda_lt (regimes n) hn_pos (hzeta_pos n) (hzeta_lt n) (floors n) (peeling n) have hbad_subset : {omega | epsilon ≤ ‖S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem) - 0‖} ⊆ Aᶜ := by intro omega homega by_contra homega_compl have homega_A : omega ∈ A := by simpa using homega_compl have hnorm_nonneg : 0 ≤ S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem) := norm_nonneg _ simp only [Set.mem_setOf_eq, sub_zero, Real.norm_eq_abs, abs_of_nonneg hnorm_nonneg] at homega have hsq := hAbound omega homega_A change _ ≤ C * _ at hsq change _ < epsilon ^ 2 at hnsmall simp only [p] at hsq hnsmall have : epsilon ^ 2 ≤ (S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem)) ^ 2 := by nlinarith nlinarith calc mu {omega | epsilon ≤ ‖S.strongNorm (S.hL2 (TC.H_subset (is_estimator.mem_H n omega)) - S.hL2 S.h₀_mem) - 0‖} ≤ mu Aᶜ := measure_mono hbad_subset _ ≤ ofReal (zeta n) := by rw [measure_compl hAmeas (measure_ne_top _ _), measure_univ] exact tsub_le_iff_right.mpr <| by simpa [add_comm] using tsub_le_iff_left.mp hAmass
1 supporting declaration (lemmas, instances)
  • lambda_balance_identity theorem — For a positive smoothness exponent, a positive critical radius, and the power-balancing regularization level, the sum of delta^2/lambda and lambda^(min beta 1) equals twice their common power of delta.
    beta delta lambda :
    ℝ
    hbeta :
    0 < beta
    hdelta :
    0 < delta
    hlambda :
    lambda = delta ^ (2 / (min beta 1 + 1))
    delta ^ 2 / lambda + lambda ^ (min beta 1)
    = 2 * delta ^ (2 * min beta 1 / (min beta 1 + 1))
    Proof (Lean source)
    theorem lambda_balance_identity {beta delta lambda : ℝ} (hbeta : 0 < beta) (hdelta : 0 < delta) (hlambda : lambda = delta ^ (2 / (min beta 1 + 1))) : delta ^ 2 / lambda + lambda ^ (min beta 1) = 2 * delta ^ (2 * min beta 1 / (min beta 1 + 1)) := by subst lambda let a := min beta 1 have ha : 0 < a := lt_min hbeta (by norm_num) have hden : a + 1 ≠ 0 := by linarith have hdelta_nonneg : 0 ≤ delta := hdelta.le have hfirst : delta ^ 2 / delta ^ (2 / (a + 1)) = delta ^ (2 * a / (a + 1)) := by rw [← Real.rpow_natCast] rw [← Real.rpow_sub hdelta] congr 1 field_simp [hden] ring have hsecond : (delta ^ (2 / (a + 1))) ^ a = delta ^ (2 * a / (a + 1)) := by rw [← Real.rpow_mul hdelta_nonneg] congr 1 ring rw [show min beta 1 = a by rfl, hfirst, hsecond] ring
    Causalean.Estimation.NPIV.Primal.lambda_balance_identity · Causalean/Estimation/NPIV/Primal/RateSequence.lean:378