@lapxo/obligations 0.4.4 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -3
- package/TARGET.bound +147 -4
- package/contracts/extension-lineage-participation.json +30 -0
- package/contracts/m0-allocation.json +6 -0
- package/contracts/m0-binomial-bridge.json +6 -0
- package/contracts/m0-diagonal-conditional.json +15 -0
- package/contracts/m0-finite-grid.json +6 -0
- package/contracts/m0-keff-interval.json +27 -0
- package/contracts/m0-limit-diag.json +6 -0
- package/contracts/m0-limit-offdiag.json +6 -0
- package/contracts/m0-moment-identification.json +42 -0
- package/contracts/m0-pair-coincidence.json +6 -0
- package/contracts/m1-diagonal-regions.json +45 -0
- package/contracts/m1-generator-binomial.json +26 -0
- package/contracts/m1-offdiag-limit.json +42 -0
- package/contracts/m1-subcauses.json +66 -0
- package/contracts/model-collapse-1a.json +16 -0
- package/contracts/projection-chain.json +20 -0
- package/docs/contracts/experiment1a-public-attribution.md +1 -0
- package/docs/contracts/extension-lineage-participation.md +13 -0
- package/docs/contracts/installation-046-inputs.md +1 -0
- package/docs/contracts/m0-allocation.md +1 -0
- package/docs/contracts/m0-binomial-bridge.md +1 -0
- package/docs/contracts/m0-diagonal-lindeberg.md +1 -0
- package/docs/contracts/m0-diagonal-moments.md +1 -0
- package/docs/contracts/m0-diagonal-symmetric.md +1 -0
- package/docs/contracts/m0-diagonal-threshold.md +1 -0
- package/docs/contracts/m0-finite-grid.md +1 -0
- package/docs/contracts/m0-keff-floor-refutation.md +1 -0
- package/docs/contracts/m0-keff-interval.md +1 -0
- package/docs/contracts/m0-limit-diag.md +1 -0
- package/docs/contracts/m0-limit-offdiag.md +1 -0
- package/docs/contracts/m0-moment-identification.md +1 -0
- package/docs/contracts/m0-pair-coincidence.md +1 -0
- package/docs/contracts/m0-refuted-inverses.md +1 -0
- package/docs/contracts/m0-wf-floor-refutation.md +1 -0
- package/docs/contracts/m1-diagonal-regions.md +1 -0
- package/docs/contracts/m1-generator-binomial.md +1 -0
- package/docs/contracts/m1-offdiag-limit.md +1 -0
- package/docs/contracts/model-collapse-1a.md +11 -0
- package/docs/contracts/projection-chain.md +1 -0
- package/docs/proofs/floor-limit-diag.proof.json +29 -0
- package/package.json +1 -1
- package/proofs/definitions-046/declaration.json +11 -0
- package/proofs/experiment1a-046/declaration.json +11 -0
- package/proofs/m0-045/Obligations045/ConsensusGrid.lean +72 -0
- package/proofs/m0-045/Obligations045/M0Coincidence.lean +39 -0
- package/proofs/m0-045/Obligations045/M0Diagonal.lean +18 -0
- package/proofs/m0-045/Obligations045/M0Limit.lean +134 -0
- package/proofs/m0-045/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m0-045/Obligations045.lean +5 -0
- package/proofs/m0-045/lake-manifest.json +116 -0
- package/proofs/m0-045/lakefile.toml +9 -0
- package/proofs/m0-045/lean-toolchain +1 -0
- package/proofs/m0-046/BridgeNegatives.lean +23 -0
- package/proofs/m0-046/M0Bridge.lean +300 -0
- package/proofs/m0-046/Obligations045/ConsensusGrid.lean +72 -0
- package/proofs/m0-046/Obligations045/M0Coincidence.lean +39 -0
- package/proofs/m0-046/Obligations045/M0Diagonal.lean +18 -0
- package/proofs/m0-046/Obligations045/M0Limit.lean +134 -0
- package/proofs/m0-046/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m0-046/Obligations045.lean +5 -0
- package/proofs/m0-046/lake-manifest.json +116 -0
- package/proofs/m0-046/lakefile.toml +14 -0
- package/proofs/m0-046/lean-toolchain +1 -0
- package/proofs/m0-046-diagonal/BridgeNegatives.lean +23 -0
- package/proofs/m0-046-diagonal/M0Bridge.lean +300 -0
- package/proofs/m0-046-diagonal/M0Diagonal046.lean +235 -0
- package/proofs/m0-046-diagonal/M0Lindeberg046.lean +92 -0
- package/proofs/m0-046-diagonal/M0Moments046.lean +295 -0
- package/proofs/m0-046-diagonal/M0Threshold046.lean +278 -0
- package/proofs/m0-046-diagonal/Obligations045/ConsensusGrid.lean +72 -0
- package/proofs/m0-046-diagonal/Obligations045/M0Coincidence.lean +39 -0
- package/proofs/m0-046-diagonal/Obligations045/M0Diagonal.lean +18 -0
- package/proofs/m0-046-diagonal/Obligations045/M0Limit.lean +134 -0
- package/proofs/m0-046-diagonal/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m0-046-diagonal/Obligations045.lean +5 -0
- package/proofs/m0-046-diagonal/lake-manifest.json +116 -0
- package/proofs/m0-046-diagonal/lakefile.toml +26 -0
- package/proofs/m0-046-diagonal/lean-toolchain +1 -0
- package/proofs/m0-046-identification/M0Identification046.lean +209 -0
- package/proofs/m0-046-identification/Obligations045/M0Coincidence.lean +39 -0
- package/proofs/m0-046-identification/lake-manifest.json +116 -0
- package/proofs/m0-046-identification/lakefile.toml +12 -0
- package/proofs/m0-046-identification/lean-toolchain +1 -0
- package/proofs/m0-046-uncertainty/BridgeNegatives.lean +23 -0
- package/proofs/m0-046-uncertainty/M0BlockCoverage046.lean +163 -0
- package/proofs/m0-046-uncertainty/M0Bridge.lean +300 -0
- package/proofs/m0-046-uncertainty/M0Diagonal046.lean +235 -0
- package/proofs/m0-046-uncertainty/M0FiniteDiscord046.lean +207 -0
- package/proofs/m0-046-uncertainty/M0Interval046.lean +82 -0
- package/proofs/m0-046-uncertainty/M0Lindeberg046.lean +92 -0
- package/proofs/m0-046-uncertainty/M0Moments046.lean +295 -0
- package/proofs/m0-046-uncertainty/M0Threshold046.lean +278 -0
- package/proofs/m0-046-uncertainty/Obligations045/ConsensusGrid.lean +72 -0
- package/proofs/m0-046-uncertainty/Obligations045/M0Coincidence.lean +39 -0
- package/proofs/m0-046-uncertainty/Obligations045/M0Diagonal.lean +18 -0
- package/proofs/m0-046-uncertainty/Obligations045/M0Limit.lean +134 -0
- package/proofs/m0-046-uncertainty/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m0-046-uncertainty/Obligations045.lean +5 -0
- package/proofs/m0-046-uncertainty/lake-manifest.json +116 -0
- package/proofs/m0-046-uncertainty/lakefile.toml +35 -0
- package/proofs/m0-046-uncertainty/lean-toolchain +1 -0
- package/proofs/m1-046-bridge/M0Bridge.lean +300 -0
- package/proofs/m1-046-bridge/M1Bridge046.lean +359 -0
- package/proofs/m1-046-bridge/Obligations045/M0Limit.lean +134 -0
- package/proofs/m1-046-bridge/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m1-046-bridge/lake-manifest.json +116 -0
- package/proofs/m1-046-bridge/lakefile.toml +29 -0
- package/proofs/m1-046-bridge/lean-toolchain +1 -0
- package/proofs/m1-046-diagonal/M0Bridge.lean +300 -0
- package/proofs/m1-046-diagonal/M0Diagonal046.lean +235 -0
- package/proofs/m1-046-diagonal/M0Lindeberg046.lean +92 -0
- package/proofs/m1-046-diagonal/M0Moments046.lean +295 -0
- package/proofs/m1-046-diagonal/M0Threshold046.lean +278 -0
- package/proofs/m1-046-diagonal/M1Bridge046.lean +359 -0
- package/proofs/m1-046-diagonal/M1Diagonal046.lean +334 -0
- package/proofs/m1-046-diagonal/M1Offdiag046.lean +270 -0
- package/proofs/m1-046-diagonal/Obligations045/M0Limit.lean +134 -0
- package/proofs/m1-046-diagonal/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m1-046-diagonal/lake-manifest.json +116 -0
- package/proofs/m1-046-diagonal/lakefile.toml +35 -0
- package/proofs/m1-046-diagonal/lean-toolchain +1 -0
- package/proofs/m1-046-offdiag/M0Bridge.lean +300 -0
- package/proofs/m1-046-offdiag/M0Diagonal046.lean +235 -0
- package/proofs/m1-046-offdiag/M0Moments046.lean +295 -0
- package/proofs/m1-046-offdiag/M1Bridge046.lean +359 -0
- package/proofs/m1-046-offdiag/M1Offdiag046.lean +270 -0
- package/proofs/m1-046-offdiag/Obligations045/M0Limit.lean +134 -0
- package/proofs/m1-046-offdiag/Obligations045/M0Offdiag.lean +171 -0
- package/proofs/m1-046-offdiag/lake-manifest.json +116 -0
- package/proofs/m1-046-offdiag/lakefile.toml +32 -0
- package/proofs/m1-046-offdiag/lean-toolchain +1 -0
- package/proofs/projection-chain.md +11 -0
- package/protocols/model-collapse-1a.json +108 -0
- package/receipts.bound +684 -208
- package/samples/laws/definitions/no/sample.json +26 -0
- package/samples/laws/definitions/yes/sample.json +12 -0
- package/samples/laws/experiment1a/no/sample.json +16 -0
- package/samples/laws/experiment1a/yes/sample.json +8 -0
- package/samples/laws/m0-allocation/no/sample.json +5 -0
- package/samples/laws/m0-allocation/yes/sample.json +7 -0
- package/samples/laws/m0-binomial-bridge/no/pairwise-is-not-joint.json +59 -0
- package/samples/laws/m0-binomial-bridge/no/sample.json +13 -0
- package/samples/laws/m0-binomial-bridge/yes/sample.json +16 -0
- package/samples/laws/m0-binomial-bridge/yes/small-binomial-table.json +100 -0
- package/samples/laws/m0-diagonal-conditional/no/sample.json +5 -0
- package/samples/laws/m0-diagonal-conditional/yes/sample.json +7 -0
- package/samples/laws/m0-finite-grid/no/sample.json +5 -0
- package/samples/laws/m0-finite-grid/yes/sample.json +7 -0
- package/samples/laws/m0-keff-interval/no/sample.json +215 -0
- package/samples/laws/m0-keff-interval/yes/api-rows.json +2002 -0
- package/samples/laws/m0-keff-interval/yes/sample.json +70 -0
- package/samples/laws/m0-limit-diag/no/sample.json +5 -0
- package/samples/laws/m0-limit-diag/yes/sample.json +7 -0
- package/samples/laws/m0-limit-offdiag/no/sample.json +5 -0
- package/samples/laws/m0-limit-offdiag/yes/sample.json +7 -0
- package/samples/laws/m0-moment-identification/no/sample.json +47 -0
- package/samples/laws/m0-moment-identification/yes/sample.json +97 -0
- package/samples/laws/m0-pair-coincidence/no/sample.json +5 -0
- package/samples/laws/m0-pair-coincidence/yes/sample.json +7 -0
- package/samples/laws/m1-diagonal-regions/no/sample.json +44 -0
- package/samples/laws/m1-diagonal-regions/yes/sample.json +45 -0
- package/samples/laws/m1-generator-binomial/no/sample.json +21 -0
- package/samples/laws/m1-generator-binomial/yes/sample.json +290 -0
- package/samples/laws/m1-offdiag-limit/no/sample.json +17 -0
- package/samples/laws/m1-offdiag-limit/yes/sample.json +87 -0
- package/samples/laws/projection-chain/no/sample.json +26 -0
- package/samples/laws/projection-chain/yes/sample.json +25 -0
- package/samples/no/installed-artifact.json +2 -2
- package/samples/yes/installed-artifact.json +2 -2
- package/src/laws/laws.bound +146 -0
- package/vectors/laws/a7-t90.json +72 -0
- package/vectors/laws/a9-t99.json +110 -0
- package/vectors/laws/definitions.native-capture.json +326 -0
- package/vectors/laws/definitions.native.json +82 -0
- package/vectors/laws/experiment1a-protocol.native-capture.json +391 -0
- package/vectors/laws/experiment1a-protocol.native.json +64 -0
- package/vectors/laws/experiment1a-public-input.native-capture.json +224 -0
- package/vectors/laws/m0-allocation.lean.json +150 -0
- package/vectors/laws/m0-allocation.native.json +104 -0
- package/vectors/laws/m0-binomial-bridge.lean.json +185 -0
- package/vectors/laws/m0-diagonal-lindeberg.lean.json +167 -0
- package/vectors/laws/m0-diagonal-moments.lean.json +185 -0
- package/vectors/laws/m0-diagonal-symmetric.lean.json +188 -0
- package/vectors/laws/m0-diagonal-threshold.lean.json +199 -0
- package/vectors/laws/m0-finite-grid.lean.json +144 -0
- package/vectors/laws/m0-finite-grid.native.json +104 -0
- package/vectors/laws/m0-identification.lean.json +136 -0
- package/vectors/laws/m0-identification.native-capture.json +230 -0
- package/vectors/laws/m0-keff-interval.json +569 -0
- package/vectors/laws/m0-limit-diag.lean.json +141 -0
- package/vectors/laws/m0-limit-diag.native.json +108 -0
- package/vectors/laws/m0-limit-offdiag.lean.json +143 -0
- package/vectors/laws/m0-limit-offdiag.native.json +104 -0
- package/vectors/laws/m0-pair-coincidence.lean.json +139 -0
- package/vectors/laws/m0-pair-coincidence.native.json +104 -0
- package/vectors/laws/m0-uncertainty-blocks.lean.json +201 -0
- package/vectors/laws/m0-uncertainty-finite-discord.lean.json +194 -0
- package/vectors/laws/m0-uncertainty-interval.lean.json +189 -0
- package/vectors/laws/m0-uncertainty.native-capture.json +651 -0
- package/vectors/laws/m1-diagonal-partial.lean.json +192 -0
- package/vectors/laws/m1-diagonal-partial.native-capture.json +275 -0
- package/vectors/laws/m1-generator-binomial.lean.json +162 -0
- package/vectors/laws/m1-generator-binomial.native-capture.json +245 -0
- package/vectors/laws/m1-offdiag-limit.lean.json +166 -0
- package/vectors/laws/m1-offdiag-limit.native-capture.json +260 -0
- package/vectors/laws/model-collapse-1a.json +12 -0
- package/vectors/laws/projection-chain.json +61 -0
- package/vectors/laws/projection-chain.native-capture.json +311 -0
- package/vectors/laws/projection-chain.native.json +56 -0
- package/vectors/measures/installed-artifact.cli.json +6 -6
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import Mathlib.Topology.Instances.Real.Lemmas
|
|
2
|
+
import Mathlib.Data.Real.Archimedean
|
|
3
|
+
import Mathlib.Topology.Algebra.Order.Field
|
|
4
|
+
import Mathlib.Algebra.Order.Floor.Ring
|
|
5
|
+
import Mathlib.Tactic.Linarith
|
|
6
|
+
import Mathlib.Tactic.Ring
|
|
7
|
+
import Mathlib.Tactic.NormNum
|
|
8
|
+
import Mathlib.Tactic.Positivity
|
|
9
|
+
|
|
10
|
+
open scoped BigOperators
|
|
11
|
+
open Filter Topology
|
|
12
|
+
noncomputable section
|
|
13
|
+
open Classical
|
|
14
|
+
namespace Obligations045.M0
|
|
15
|
+
|
|
16
|
+
/-- Declared binary M0 domain. This structure contains no limiting-probability axiom. -/
|
|
17
|
+
structure Domain where
|
|
18
|
+
K : ℕ
|
|
19
|
+
K_pos : 0 < K
|
|
20
|
+
p : ℝ
|
|
21
|
+
c : ℝ
|
|
22
|
+
p_half : (1:ℝ)/2 < p
|
|
23
|
+
p_lt_one : p < 1
|
|
24
|
+
c_nonneg : 0 ≤ c
|
|
25
|
+
c_lt_one : c < 1
|
|
26
|
+
w : ℕ → ℝ
|
|
27
|
+
w_nonneg : ∀ i, 0 ≤ w i
|
|
28
|
+
weights_sum : ∑ i ∈ Finset.range K, w i = 1
|
|
29
|
+
|
|
30
|
+
def cumulative (w : ℕ → ℝ) (i : ℕ) : ℝ := ∑ j ∈ Finset.range i, w j
|
|
31
|
+
|
|
32
|
+
def allocation (w : ℕ → ℝ) (N i : ℕ) : ℕ :=
|
|
33
|
+
⌊(N:ℝ) * cumulative w (i+1)⌋₊ - ⌊(N:ℝ) * cumulative w i⌋₊
|
|
34
|
+
|
|
35
|
+
theorem prefix_succ (w : ℕ → ℝ) (i : ℕ) :
|
|
36
|
+
cumulative w (i+1) = cumulative w i + w i := by simp [cumulative, Finset.sum_range_succ]
|
|
37
|
+
|
|
38
|
+
theorem prefix_monotone (w : ℕ → ℝ) (hw : ∀ i, 0 ≤ w i) : Monotone (cumulative w) := by
|
|
39
|
+
apply monotone_nat_of_le_succ
|
|
40
|
+
intro i
|
|
41
|
+
rw [prefix_succ]
|
|
42
|
+
exact le_add_of_nonneg_right (hw i)
|
|
43
|
+
|
|
44
|
+
theorem allocation_sum (M : Domain) (N : ℕ) :
|
|
45
|
+
∑ i ∈ Finset.range M.K, allocation M.w N i = N := by
|
|
46
|
+
let f : ℕ → ℕ := fun i => ⌊(N:ℝ) * cumulative M.w i⌋₊
|
|
47
|
+
have hf : Monotone f := fun i j hij =>
|
|
48
|
+
Nat.floor_mono (mul_le_mul_of_nonneg_left (prefix_monotone M.w M.w_nonneg hij) (by positivity))
|
|
49
|
+
change ∑ i ∈ Finset.range M.K, (f (i+1) - f i) = N
|
|
50
|
+
rw [Finset.sum_range_tsub hf]
|
|
51
|
+
simp [f, cumulative, M.weights_sum]
|
|
52
|
+
|
|
53
|
+
theorem allocation_discrepancy (M : Domain) (N i : ℕ) :
|
|
54
|
+
-1 < (allocation M.w N i : ℝ) - (N:ℝ)*M.w i ∧
|
|
55
|
+
(allocation M.w N i : ℝ) - (N:ℝ)*M.w i < 1 := by
|
|
56
|
+
have hpre : 0 ≤ cumulative M.w i := Finset.sum_nonneg (fun j _ => M.w_nonneg j)
|
|
57
|
+
have hnext : 0 ≤ cumulative M.w (i+1) := Finset.sum_nonneg (fun j _ => M.w_nonneg j)
|
|
58
|
+
have hm : ⌊(N:ℝ)*cumulative M.w i⌋₊ ≤ ⌊(N:ℝ)*cumulative M.w (i+1)⌋₊ :=
|
|
59
|
+
Nat.floor_mono (mul_le_mul_of_nonneg_left (prefix_monotone M.w M.w_nonneg (Nat.le_succ i)) (by positivity))
|
|
60
|
+
have a := Nat.floor_le (mul_nonneg (Nat.cast_nonneg N) hpre)
|
|
61
|
+
have b := Nat.lt_floor_add_one ((N:ℝ)*cumulative M.w i)
|
|
62
|
+
have c := Nat.floor_le (mul_nonneg (Nat.cast_nonneg N) hnext)
|
|
63
|
+
have d := Nat.lt_floor_add_one ((N:ℝ)*cumulative M.w (i+1))
|
|
64
|
+
have hs := prefix_succ M.w i
|
|
65
|
+
simp only [allocation, Nat.cast_sub hm]
|
|
66
|
+
constructor <;> nlinarith
|
|
67
|
+
|
|
68
|
+
def q (M : Domain) (a : Bool) : ℝ := (1-M.c)*M.p + if a then M.c else 0
|
|
69
|
+
|
|
70
|
+
theorem q_pos (M : Domain) (a : Bool) : 0 < q M a := by
|
|
71
|
+
have hp : 0 < M.p := by linarith [M.p_half]
|
|
72
|
+
cases a <;> simp only [q, Bool.false_eq_true, ite_false, add_zero, ite_true] <;>
|
|
73
|
+
nlinarith [M.c_nonneg, M.c_lt_one]
|
|
74
|
+
|
|
75
|
+
theorem q_lt_one (M : Domain) (a : Bool) : q M a < 1 := by
|
|
76
|
+
have hp : 0 < M.p := by linarith [M.p_half]
|
|
77
|
+
cases a <;> simp only [q, Bool.false_eq_true, ite_false, add_zero, ite_true] <;>
|
|
78
|
+
nlinarith [M.c_nonneg, M.c_lt_one, M.p_lt_one]
|
|
79
|
+
|
|
80
|
+
def score (M : Domain) (a : Fin M.K → Bool) : ℝ :=
|
|
81
|
+
∑ i : Fin M.K, M.w i * q M (a i)
|
|
82
|
+
|
|
83
|
+
def latentMass (M : Domain) (a : Fin M.K → Bool) : ℝ :=
|
|
84
|
+
∏ i : Fin M.K, if a i then M.p else 1-M.p
|
|
85
|
+
|
|
86
|
+
def fairLoss (correct total : ℕ) : ℝ :=
|
|
87
|
+
if 2*correct < total then 1 else if 2*correct = total then 1/2 else 0
|
|
88
|
+
|
|
89
|
+
/-- The exact finite conditional error, using independent binomial counts in each lineage. -/
|
|
90
|
+
noncomputable def conditionalError (M : Domain) (N : ℕ) (a : Fin M.K → Bool) : ℝ :=
|
|
91
|
+
∑ x : (i : Fin M.K) → Fin (allocation M.w N i + 1),
|
|
92
|
+
(∏ i : Fin M.K,
|
|
93
|
+
(Nat.choose (allocation M.w N i) (x i) : ℝ) *
|
|
94
|
+
q M (a i) ^ (x i : ℕ) *
|
|
95
|
+
(1-q M (a i)) ^ (allocation M.w N i - (x i : ℕ))) *
|
|
96
|
+
fairLoss (∑ i : Fin M.K, (x i : ℕ)) N
|
|
97
|
+
|
|
98
|
+
noncomputable def error (M : Domain) (N : ℕ) : ℝ :=
|
|
99
|
+
∑ a : Fin M.K → Bool, latentMass M a * conditionalError M N a
|
|
100
|
+
|
|
101
|
+
noncomputable def limitingLoss (s : ℝ) : ℝ :=
|
|
102
|
+
if s < 1/2 then 1 else if s = 1/2 then 1/2 else 0
|
|
103
|
+
|
|
104
|
+
noncomputable def floor (M : Domain) : ℝ :=
|
|
105
|
+
∑ a : Fin M.K → Bool, latentMass M a * limitingLoss (score M a)
|
|
106
|
+
|
|
107
|
+
/-- Explicit proof obligations, NOT assumptions hidden inside the generative model.
|
|
108
|
+
The strict branches require concentration. The equality branch requires a CLT.
|
|
109
|
+
This certificate has no constructed instance in this project. -/
|
|
110
|
+
def ConditionalTailLimits (M : Domain) : Prop :=
|
|
111
|
+
(∀ a, score M a < 1/2 → Tendsto (fun N => conditionalError M N a) atTop (𝓝 1)) ∧
|
|
112
|
+
(∀ a, 1/2 < score M a → Tendsto (fun N => conditionalError M N a) atTop (𝓝 0)) ∧
|
|
113
|
+
(∀ a, score M a = 1/2 → Tendsto (fun N => conditionalError M N a) atTop (𝓝 (1/2)))
|
|
114
|
+
|
|
115
|
+
/-- Kernel checked finite-mixture transfer. This is intentionally conditional;
|
|
116
|
+
it does not claim that ConditionalTailLimits follows from Domain. -/
|
|
117
|
+
theorem limit_of_conditional_tail_limits (M : Domain) (h : ConditionalTailLimits M) :
|
|
118
|
+
Tendsto (error M) atTop (𝓝 (floor M)) := by
|
|
119
|
+
have hcase : ∀ a, Tendsto (fun N => conditionalError M N a) atTop
|
|
120
|
+
(𝓝 (limitingLoss (score M a))) := by
|
|
121
|
+
intro a
|
|
122
|
+
by_cases hl : score M a < 1/2
|
|
123
|
+
· rw [limitingLoss, if_pos hl]
|
|
124
|
+
exact h.1 a hl
|
|
125
|
+
· by_cases he : score M a = 1/2
|
|
126
|
+
· rw [limitingLoss, if_neg hl, if_pos he]
|
|
127
|
+
exact h.2.2 a he
|
|
128
|
+
· have hg : 1/2 < score M a := lt_of_le_of_ne (le_of_not_gt hl) (Ne.symm he)
|
|
129
|
+
rw [limitingLoss, if_neg hl, if_neg he]
|
|
130
|
+
exact h.2.1 a hg
|
|
131
|
+
unfold error floor
|
|
132
|
+
exact tendsto_finset_sum _ (fun a _ => tendsto_const_nhds.mul (hcase a))
|
|
133
|
+
|
|
134
|
+
end Obligations045.M0
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import Obligations045.M0Limit
|
|
2
|
+
import Mathlib.Probability.StrongLaw
|
|
3
|
+
import Mathlib.MeasureTheory.Integral.DominatedConvergence
|
|
4
|
+
open scoped BigOperators
|
|
5
|
+
open Filter Topology MeasureTheory ProbabilityTheory
|
|
6
|
+
noncomputable section
|
|
7
|
+
namespace Obligations045.M0
|
|
8
|
+
|
|
9
|
+
theorem floor_quota_bounds (M : Domain) (N i : ℕ) :
|
|
10
|
+
(∑ j ∈ Finset.range M.K, allocation M.w N j = N) ∧
|
|
11
|
+
(-1 < (allocation M.w N i : ℝ)-(N:ℝ)*M.w i ∧
|
|
12
|
+
(allocation M.w N i : ℝ)-(N:ℝ)*M.w i < 1) :=
|
|
13
|
+
⟨allocation_sum M N, allocation_discrepancy M N i⟩
|
|
14
|
+
|
|
15
|
+
theorem allocation_ratio (M : Domain) (i : ℕ) :
|
|
16
|
+
Tendsto (fun N : ℕ => (allocation M.w N i : ℝ)/(N:ℝ)) atTop (𝓝 (M.w i)) := by
|
|
17
|
+
have hInv : Tendsto (fun N : ℕ => (1:ℝ)/(N:ℝ)) atTop (𝓝 0) :=
|
|
18
|
+
tendsto_const_nhds.div_atTop tendsto_natCast_atTop_atTop
|
|
19
|
+
apply tendsto_of_tendsto_of_tendsto_of_le_of_le'
|
|
20
|
+
(by simpa using tendsto_const_nhds.sub hInv)
|
|
21
|
+
(by simpa using tendsto_const_nhds.add hInv)
|
|
22
|
+
· filter_upwards [eventually_ge_atTop 1] with N hN
|
|
23
|
+
have hp : 0 < (N:ℝ) := by exact_mod_cast (lt_of_lt_of_le Nat.zero_lt_one hN)
|
|
24
|
+
rw [le_div_iff₀ hp, sub_mul, inv_mul_cancel₀ hp.ne']
|
|
25
|
+
linarith [(allocation_discrepancy M N i).1]
|
|
26
|
+
· filter_upwards [eventually_ge_atTop 1] with N hN
|
|
27
|
+
have hp : 0 < (N:ℝ) := by exact_mod_cast (lt_of_lt_of_le Nat.zero_lt_one hN)
|
|
28
|
+
rw [div_le_iff₀ hp, add_mul, inv_mul_cancel₀ hp.ne']
|
|
29
|
+
linarith [(allocation_discrepancy M N i).2]
|
|
30
|
+
|
|
31
|
+
theorem allocation_zero (M : Domain) (i : ℕ) (hw : M.w i = 0) (N : ℕ) :
|
|
32
|
+
allocation M.w N i = 0 := by
|
|
33
|
+
simp [allocation, prefix_succ, hw]
|
|
34
|
+
|
|
35
|
+
theorem allocation_atTop (M : Domain) (i : ℕ) (hw : 0 < M.w i) :
|
|
36
|
+
Tendsto (fun N => allocation M.w N i) atTop atTop := by
|
|
37
|
+
apply (tendsto_natCast_atTop_iff (R := ℝ)).mp
|
|
38
|
+
apply tendsto_atTop.2
|
|
39
|
+
intro r
|
|
40
|
+
have he : ∀ᶠ N : ℕ in atTop, (r+1)/M.w i ≤ (N:ℝ) :=
|
|
41
|
+
tendsto_natCast_atTop_atTop.eventually (eventually_ge_atTop _)
|
|
42
|
+
filter_upwards [he] with N hN
|
|
43
|
+
have hmul := (div_le_iff₀ hw).mp hN
|
|
44
|
+
linarith [(allocation_discrepancy M N i).1]
|
|
45
|
+
|
|
46
|
+
theorem lineage_quota_limit (M : Domain) (i : ℕ) (z : ℕ → ℝ) (q : ℝ)
|
|
47
|
+
(hz0 : z 0 = 0)
|
|
48
|
+
(hz : Tendsto (fun n : ℕ => z n/(n:ℝ)) atTop (𝓝 q)) :
|
|
49
|
+
Tendsto (fun N : ℕ => z (allocation M.w N i)/(N:ℝ)) atTop (𝓝 (M.w i*q)) := by
|
|
50
|
+
by_cases hw : M.w i = 0
|
|
51
|
+
· simp [allocation_zero M i hw, hz0, hw]
|
|
52
|
+
· have hp : 0 < M.w i := lt_of_le_of_ne (M.w_nonneg i) (Ne.symm hw)
|
|
53
|
+
have h := (allocation_ratio M i).mul (hz.comp (allocation_atTop M i hp))
|
|
54
|
+
convert h using 1
|
|
55
|
+
funext N
|
|
56
|
+
by_cases hn : allocation M.w N i = 0
|
|
57
|
+
· simp [hn, hz0]
|
|
58
|
+
· dsimp
|
|
59
|
+
rw [div_mul_div_comm, mul_comm (allocation M.w N i : ℝ), mul_div_mul_right _ _ (by exact_mod_cast hn : (allocation M.w N i : ℝ) ≠ 0)]
|
|
60
|
+
|
|
61
|
+
/-- The imported strong law is applied to actual lineage variables; no convergence certificate. -/
|
|
62
|
+
theorem lineage_lgn {Ω : Type*} [MeasurableSpace Ω] (μ : Measure Ω)
|
|
63
|
+
(X : ℕ → Ω → ℝ) (q : ℝ)
|
|
64
|
+
(hint : Integrable (X 0) μ)
|
|
65
|
+
(hindep : Pairwise (fun i j : ℕ => IndepFun (X i) (X j) μ))
|
|
66
|
+
(hident : ∀ i, IdentDistrib (X i) (X 0) μ μ)
|
|
67
|
+
(hmean : ∫ ω, X 0 ω ∂μ = q) :
|
|
68
|
+
∀ᵐ ω ∂μ, Tendsto (fun n : ℕ => (∑ j ∈ Finset.range n, X j ω)/(n:ℝ))
|
|
69
|
+
atTop (𝓝 q) := by
|
|
70
|
+
simpa only [hmean] using strong_law_ae_real X hint hindep hident
|
|
71
|
+
|
|
72
|
+
def memberAverage {Ω : Type*} (M : Domain) (X : Fin M.K → ℕ → Ω → ℝ)
|
|
73
|
+
(N : ℕ) (ω : Ω) : ℝ :=
|
|
74
|
+
∑ i : Fin M.K, (∑ j ∈ Finset.range (allocation M.w N i), X i j ω)/(N:ℝ)
|
|
75
|
+
|
|
76
|
+
theorem member_average_lgn {Ω : Type*} [MeasurableSpace Ω]
|
|
77
|
+
(M : Domain) (a : Fin M.K → Bool) (μ : Measure Ω)
|
|
78
|
+
(X : Fin M.K → ℕ → Ω → ℝ)
|
|
79
|
+
(hint : ∀ i, Integrable (X i 0) μ)
|
|
80
|
+
(hindep : ∀ i, Pairwise (fun j k : ℕ => IndepFun (X i j) (X i k) μ))
|
|
81
|
+
(hident : ∀ i j, IdentDistrib (X i j) (X i 0) μ μ)
|
|
82
|
+
(hmean : ∀ i, ∫ ω, X i 0 ω ∂μ = q M (a i)) :
|
|
83
|
+
∀ᵐ ω ∂μ, Tendsto (fun N => memberAverage M X N ω) atTop (𝓝 (score M a)) := by
|
|
84
|
+
have hall : ∀ᵐ ω ∂μ, ∀ i : Fin M.K,
|
|
85
|
+
Tendsto (fun n : ℕ => (∑ j ∈ Finset.range n, X i j ω)/(n:ℝ))
|
|
86
|
+
atTop (𝓝 (q M (a i))) := by
|
|
87
|
+
rw [ae_all_iff]
|
|
88
|
+
intro i
|
|
89
|
+
exact lineage_lgn μ (X i) (q M (a i)) (hint i) (hindep i) (hident i) (hmean i)
|
|
90
|
+
filter_upwards [hall] with ω hω
|
|
91
|
+
unfold memberAverage score
|
|
92
|
+
apply tendsto_finset_sum
|
|
93
|
+
intro i _
|
|
94
|
+
exact lineage_quota_limit M i (fun n => ∑ j ∈ Finset.range n, X i j ω)
|
|
95
|
+
(q M (a i)) (by simp) (hω i)
|
|
96
|
+
|
|
97
|
+
theorem floor_limit_offdiag_scalar {f : ℕ → ℝ} {s : ℝ}
|
|
98
|
+
(hf : Tendsto f atTop (𝓝 s)) (hne : s ≠ (1:ℝ)/2) :
|
|
99
|
+
Tendsto (fun N => limitingLoss (f N)) atTop (𝓝 (limitingLoss s)) := by
|
|
100
|
+
by_cases hs : s < (1:ℝ)/2
|
|
101
|
+
· have he : ∀ᶠ N in atTop, f N < (1:ℝ)/2 := hf.eventually (Iio_mem_nhds hs)
|
|
102
|
+
have hEq : (fun N => limitingLoss (f N)) =ᶠ[atTop] (fun _ => (1:ℝ)) :=
|
|
103
|
+
he.mono (fun N hN => by change limitingLoss (f N) = 1; rw [limitingLoss, if_pos hN])
|
|
104
|
+
rw [limitingLoss, if_pos hs]
|
|
105
|
+
exact tendsto_const_nhds.congr' hEq.symm
|
|
106
|
+
· have hg : (1:ℝ)/2 < s := lt_of_le_of_ne (le_of_not_gt hs) (Ne.symm hne)
|
|
107
|
+
have he : ∀ᶠ N in atTop, (1:ℝ)/2 < f N := hf.eventually (Ioi_mem_nhds hg)
|
|
108
|
+
have hEq : (fun N => limitingLoss (f N)) =ᶠ[atTop] (fun _ => (0:ℝ)) :=
|
|
109
|
+
he.mono (fun N hN => by
|
|
110
|
+
change limitingLoss (f N) = 0
|
|
111
|
+
rw [limitingLoss, if_neg (not_lt.mpr hN.le), if_neg (Ne.symm hN.ne)])
|
|
112
|
+
rw [limitingLoss, if_neg hs, if_neg hne]
|
|
113
|
+
exact tendsto_const_nhds.congr' hEq.symm
|
|
114
|
+
|
|
115
|
+
/-- Off-diagonal passage from actual sample averages to error probabilities.
|
|
116
|
+
Unlike the diagonal, no CLT is needed. The lineage strong laws and quota
|
|
117
|
+
composition must supply haverage for the chosen M0 array. -/
|
|
118
|
+
theorem floor_limit_offdiag {Ω : Type*} [MeasurableSpace Ω]
|
|
119
|
+
(μ : Measure Ω) [IsProbabilityMeasure μ]
|
|
120
|
+
(average : ℕ → Ω → ℝ) (s : ℝ)
|
|
121
|
+
(hmeas : ∀ N, AEStronglyMeasurable (fun ω => limitingLoss (average N ω)) μ)
|
|
122
|
+
(haverage : ∀ᵐ ω ∂μ, Tendsto (fun N => average N ω) atTop (𝓝 s))
|
|
123
|
+
(hne : s ≠ (1:ℝ)/2) :
|
|
124
|
+
Tendsto (fun N => ∫ ω, limitingLoss (average N ω) ∂μ)
|
|
125
|
+
atTop (𝓝 (limitingLoss s)) := by
|
|
126
|
+
have hbound : ∀ N, ∀ᵐ ω ∂μ, ‖limitingLoss (average N ω)‖ ≤ (1:ℝ) := by
|
|
127
|
+
intro N
|
|
128
|
+
filter_upwards [] with ω
|
|
129
|
+
unfold limitingLoss
|
|
130
|
+
split_ifs <;> norm_num
|
|
131
|
+
have hlim : ∀ᵐ ω ∂μ, Tendsto (fun N => limitingLoss (average N ω))
|
|
132
|
+
atTop (𝓝 (limitingLoss s)) := haverage.mono (fun ω hω => floor_limit_offdiag_scalar hω hne)
|
|
133
|
+
simpa using tendsto_integral_of_dominated_convergence (fun _ => (1:ℝ)) hmeas
|
|
134
|
+
(integrable_const (1:ℝ)) hbound hlim
|
|
135
|
+
|
|
136
|
+
/-- M0 off-diagonal probability limit from declared lineage laws and the proved quotas.
|
|
137
|
+
The only extra technical input is measurability of the loss; no asymptotic
|
|
138
|
+
convergence hypothesis and no CLT certificate is assumed. -/
|
|
139
|
+
theorem floor_limit_offdiag_M0 {Ω : Type*} [MeasurableSpace Ω]
|
|
140
|
+
(M : Domain) (a : Fin M.K → Bool) (μ : Measure Ω) [IsProbabilityMeasure μ]
|
|
141
|
+
(X : Fin M.K → ℕ → Ω → ℝ)
|
|
142
|
+
(hint : ∀ i, Integrable (X i 0) μ)
|
|
143
|
+
(hindep : ∀ i, Pairwise (fun j k : ℕ => IndepFun (X i j) (X i k) μ))
|
|
144
|
+
(hident : ∀ i j, IdentDistrib (X i j) (X i 0) μ μ)
|
|
145
|
+
(hmean : ∀ i, ∫ ω, X i 0 ω ∂μ = q M (a i))
|
|
146
|
+
(hmeas : ∀ N, AEStronglyMeasurable (fun ω => limitingLoss (memberAverage M X N ω)) μ)
|
|
147
|
+
(hoff : score M a ≠ (1:ℝ)/2) :
|
|
148
|
+
Tendsto (fun N => ∫ ω, limitingLoss (memberAverage M X N ω) ∂μ)
|
|
149
|
+
atTop (𝓝 (limitingLoss (score M a))) := by
|
|
150
|
+
exact floor_limit_offdiag μ (memberAverage M X) (score M a) hmeas
|
|
151
|
+
(member_average_lgn M a μ X hint hindep hident hmean) hoff
|
|
152
|
+
|
|
153
|
+
theorem floor_limit_offdiag_mixture {Ω : Type*} [MeasurableSpace Ω]
|
|
154
|
+
(M : Domain) (μ : Measure Ω) [IsProbabilityMeasure μ]
|
|
155
|
+
(X : (Fin M.K → Bool) → Fin M.K → ℕ → Ω → ℝ)
|
|
156
|
+
(hint : ∀ a i, Integrable (X a i 0) μ)
|
|
157
|
+
(hindep : ∀ a i, Pairwise (fun j k : ℕ => IndepFun (X a i j) (X a i k) μ))
|
|
158
|
+
(hident : ∀ a i j, IdentDistrib (X a i j) (X a i 0) μ μ)
|
|
159
|
+
(hmean : ∀ a i, ∫ ω, X a i 0 ω ∂μ = q M (a i))
|
|
160
|
+
(hmeas : ∀ a N, AEStronglyMeasurable (fun ω => limitingLoss (memberAverage M (X a) N ω)) μ)
|
|
161
|
+
(hoff : ∀ a, score M a ≠ (1:ℝ)/2) :
|
|
162
|
+
Tendsto (fun N => ∑ a : Fin M.K → Bool, latentMass M a *
|
|
163
|
+
∫ ω, limitingLoss (memberAverage M (X a) N ω) ∂μ)
|
|
164
|
+
atTop (𝓝 (floor M)) := by
|
|
165
|
+
unfold floor
|
|
166
|
+
apply tendsto_finset_sum
|
|
167
|
+
intro a _
|
|
168
|
+
exact tendsto_const_nhds.mul (floor_limit_offdiag_M0 M a μ (X a)
|
|
169
|
+
(hint a) (hindep a) (hident a) (hmean a) (hmeas a) (hoff a))
|
|
170
|
+
|
|
171
|
+
end Obligations045.M0
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.1.0",
|
|
3
|
+
"packagesDir": ".lake/packages",
|
|
4
|
+
"packages": [
|
|
5
|
+
{
|
|
6
|
+
"url": "https://github.com/leanprover-community/plausible",
|
|
7
|
+
"type": "git",
|
|
8
|
+
"subDir": null,
|
|
9
|
+
"scope": "leanprover-community",
|
|
10
|
+
"rev": "77e08eddc486491d7b9e470926b3dbe50319451a",
|
|
11
|
+
"name": "plausible",
|
|
12
|
+
"manifestFile": "lake-manifest.json",
|
|
13
|
+
"inputRev": "main",
|
|
14
|
+
"inherited": true,
|
|
15
|
+
"configFile": "lakefile.toml"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"url": "https://github.com/leanprover-community/LeanSearchClient",
|
|
19
|
+
"type": "git",
|
|
20
|
+
"subDir": null,
|
|
21
|
+
"scope": "leanprover-community",
|
|
22
|
+
"rev": "25078369972d295301f5a1e53c3e5850cf6d9d4c",
|
|
23
|
+
"name": "LeanSearchClient",
|
|
24
|
+
"manifestFile": "lake-manifest.json",
|
|
25
|
+
"inputRev": "main",
|
|
26
|
+
"inherited": true,
|
|
27
|
+
"configFile": "lakefile.toml"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"url": "https://github.com/leanprover-community/import-graph",
|
|
31
|
+
"type": "git",
|
|
32
|
+
"subDir": null,
|
|
33
|
+
"scope": "leanprover-community",
|
|
34
|
+
"rev": "e6a9f0f5ee3ccf7443a0070f92b62f8db12ae82b",
|
|
35
|
+
"name": "importGraph",
|
|
36
|
+
"manifestFile": "lake-manifest.json",
|
|
37
|
+
"inputRev": "main",
|
|
38
|
+
"inherited": true,
|
|
39
|
+
"configFile": "lakefile.toml"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"url": "https://github.com/leanprover-community/ProofWidgets4",
|
|
43
|
+
"type": "git",
|
|
44
|
+
"subDir": null,
|
|
45
|
+
"scope": "leanprover-community",
|
|
46
|
+
"rev": "c4919189477c3221e6a204008998b0d724f49904",
|
|
47
|
+
"name": "proofwidgets",
|
|
48
|
+
"manifestFile": "lake-manifest.json",
|
|
49
|
+
"inputRev": "v0.0.57",
|
|
50
|
+
"inherited": true,
|
|
51
|
+
"configFile": "lakefile.lean"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"url": "https://github.com/leanprover-community/aesop",
|
|
55
|
+
"type": "git",
|
|
56
|
+
"subDir": null,
|
|
57
|
+
"scope": "leanprover-community",
|
|
58
|
+
"rev": "5d50b08dedd7d69b3d9b3176e0d58a23af228884",
|
|
59
|
+
"name": "aesop",
|
|
60
|
+
"manifestFile": "lake-manifest.json",
|
|
61
|
+
"inputRev": "master",
|
|
62
|
+
"inherited": true,
|
|
63
|
+
"configFile": "lakefile.toml"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"url": "https://github.com/leanprover-community/quote4",
|
|
67
|
+
"type": "git",
|
|
68
|
+
"subDir": null,
|
|
69
|
+
"scope": "leanprover-community",
|
|
70
|
+
"rev": "fa4f7f15d97591a9cf3aa7724ba371c7fc6dda02",
|
|
71
|
+
"name": "Qq",
|
|
72
|
+
"manifestFile": "lake-manifest.json",
|
|
73
|
+
"inputRev": "master",
|
|
74
|
+
"inherited": true,
|
|
75
|
+
"configFile": "lakefile.toml"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"url": "https://github.com/leanprover-community/batteries",
|
|
79
|
+
"type": "git",
|
|
80
|
+
"subDir": null,
|
|
81
|
+
"scope": "leanprover-community",
|
|
82
|
+
"rev": "f5d04a9c4973d401c8c92500711518f7c656f034",
|
|
83
|
+
"name": "batteries",
|
|
84
|
+
"manifestFile": "lake-manifest.json",
|
|
85
|
+
"inputRev": "main",
|
|
86
|
+
"inherited": true,
|
|
87
|
+
"configFile": "lakefile.toml"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"url": "https://github.com/leanprover/lean4-cli",
|
|
91
|
+
"type": "git",
|
|
92
|
+
"subDir": null,
|
|
93
|
+
"scope": "leanprover",
|
|
94
|
+
"rev": "02dbd02bc00ec4916e99b04b2245b30200e200d0",
|
|
95
|
+
"name": "Cli",
|
|
96
|
+
"manifestFile": "lake-manifest.json",
|
|
97
|
+
"inputRev": "main",
|
|
98
|
+
"inherited": true,
|
|
99
|
+
"configFile": "lakefile.toml"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"url": "https://github.com/leanprover-community/mathlib4.git",
|
|
103
|
+
"type": "git",
|
|
104
|
+
"subDir": null,
|
|
105
|
+
"scope": "",
|
|
106
|
+
"rev": "c44e0c8ee63ca166450922a373c7409c5d26b00b",
|
|
107
|
+
"name": "mathlib",
|
|
108
|
+
"manifestFile": "lake-manifest.json",
|
|
109
|
+
"inputRev": "c44e0c8ee63ca166450922a373c7409c5d26b00b",
|
|
110
|
+
"inherited": false,
|
|
111
|
+
"configFile": "lakefile.lean"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"name": "obligations_lineage",
|
|
115
|
+
"lakeDir": ".lake"
|
|
116
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name = "obligations_lineage"
|
|
2
|
+
version = "0.0.0"
|
|
3
|
+
defaultTargets = ["Obligations045"]
|
|
4
|
+
[[require]]
|
|
5
|
+
name = "mathlib"
|
|
6
|
+
git = "https://github.com/leanprover-community/mathlib4.git"
|
|
7
|
+
rev = "c44e0c8ee63ca166450922a373c7409c5d26b00b"
|
|
8
|
+
[[lean_lib]]
|
|
9
|
+
name = "Obligations045"
|
|
10
|
+
|
|
11
|
+
[[lean_lib]]
|
|
12
|
+
name = "M0Bridge"
|
|
13
|
+
[[lean_lib]]
|
|
14
|
+
name = "BridgeNegatives"
|
|
15
|
+
|
|
16
|
+
[[lean_lib]]
|
|
17
|
+
name = "M0Diagonal046"
|
|
18
|
+
|
|
19
|
+
[[lean_lib]]
|
|
20
|
+
name = "M0Moments046"
|
|
21
|
+
|
|
22
|
+
[[lean_lib]]
|
|
23
|
+
name = "M0Lindeberg046"
|
|
24
|
+
|
|
25
|
+
[[lean_lib]]
|
|
26
|
+
name = "M0Threshold046"
|
|
27
|
+
|
|
28
|
+
[[lean_lib]]
|
|
29
|
+
name = "M1Bridge046"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
leanprover/lean4:v4.19.0
|