OAI/Combinatorics/EditApproximation/Probability/ExactSampling.lean
37 declarations, 0 contain sorry, 0 declared as axioms
Exact fair-bit sampling of the optimizer mixture
The finite-word rejection calculation follows Section 9. The random trial is encoded from actual Boolean bits. First-success trace probabilities determine the output law and expected number of trials.
- def
OAI.EditApproximation.binaryWordline 20Source documentation
Little-endian encoding of a finite Boolean word.
def binaryWord : (B : ℕ) → (Fin B → Bool) → Fin (2 ^ B) | 0, _ => ⟨0, by norm_num⟩ | B + 1, bits => ⟨(if bits 0 then 1 else 0) + 2 * (binaryWord B (fun i => bits i.succ)).val, by have hword := (binaryWord B (fun i => bits i.succ)).isLt … - theorem
OAI.EditApproximation.binaryWord_injectiveline 28 - theorem
OAI.EditApproximation.binaryWord_bijectiveline 46 - theorem
OAI.EditApproximation.uniform_map_of_bijectiveline 51Source documentation
A bijection carries the uniform finite law to the uniform finite law.
theorem uniform_map_of_bijective {α β : Type*} [Fintype α] [Fintype β] [Nonempty α] [Nonempty β] (f : α → β) (hf : Function.Bijective f) : (PMF.uniformOfFintype α).map f = PMF.uniformOfFintype β := by … - theorem
OAI.EditApproximation.binaryWord_uniformline 64Source documentation
Independent fair Boolean words encode a uniform power-of-two range.
theorem binaryWord_uniform (B : ℕ) : (PMF.uniformOfFintype (Fin B → Bool)).map (binaryWord B) = PMF.uniformOfFintype (Fin (2 ^ B)) := by …Mentions: OAI.EditApproximation.binaryWord
- theorem
OAI.EditApproximation.rejectionWord_rangeline 72Source documentation
Number of fair bits per rejection trial.
theorem rejectionWord_range (N : ℕ) (hN : 0 < N) : N ≤ 2 ^ rejectionBitCount N ∧ 2 ^ rejectionBitCount N < 2 * N := by …Mentions: OAI.EditApproximation.rejectionBitCount
- def
OAI.EditApproximation.rejectionTrialline 90Source documentation
A trial accepts exactly the words lying in the requested range.
def rejectionTrial (N R : ℕ) (word : Fin R) : Option (Fin N) := …
- def
OAI.EditApproximation.rejectionPrefixline 95Source documentation
Executable finite prefix of the rejection loop. Each failed trial is discarded before the next trial is examined.
def rejectionPrefix (N R : ℕ) : List (Fin R) → Option (Fin N) | [] => none | word :: words => match rejectionTrial N R word with | some accepted => some accepted | none => rejectionPrefix N R wordsMentions: OAI.EditApproximation.rejectionTrial
- theorem
OAI.EditApproximation.rejectionTrial_none_iffline 101 - theorem
OAI.EditApproximation.rejectionTrial_some_iffline 105 - theorem
OAI.EditApproximation.rejectionPrefix_none_iffline 113 - theorem
OAI.EditApproximation.rejectionPrefix_first_successline 127 - def
OAI.EditApproximation.firstSuccessEventline 144Source documentation
Finite traces with
nfailed words followed by the specified accepted integer.def firstSuccessEvent (N R n : ℕ) (accepted : Fin N) : Set ((Fin n → Fin R) × Fin R) := … - def
OAI.EditApproximation.firstSuccessEquivline 150Source documentation
Each failed word is represented uniquely by its offset above
N; the final accepted word is fixed.def firstSuccessEquiv (N R n : ℕ) (hNR : N ≤ R) (accepted : Fin N) : firstSuccessEvent N R n accepted ≃ (Fin n → Fin (R - N)) where …Mentions: OAI.EditApproximation.firstSuccessEvent
- theorem
OAI.EditApproximation.firstSuccessEvent_runsline 181Source documentation
First-success events are actual terminating executions of the finite-prefix rejection program.
theorem firstSuccessEvent_runs (N R n : ℕ) (accepted : Fin N) (samples : (Fin n → Fin R) × Fin R) (hsamples : samples ∈ firstSuccessEvent N R n accepted) : rejectionPrefix N R (List.ofFn samples.1 ++ [samples.2]) = some accepted := by …Mentions: OAI.EditApproximation.firstSuccessEvent, OAI.EditApproximation.rejectionPrefix
- theorem
OAI.EditApproximation.firstSuccessEvent_probabilityline 191Source documentation
Exact finite counting probability for
nfailures and then a specified accepted value, under independent uniform trial words.theorem firstSuccessEvent_probability (N R n : ℕ) (hN : 0 < N) (hNR : N ≤ R) (accepted : Fin N) : let : NeZero R := ⟨by omega⟩ … - def
OAI.EditApproximation.rejectionFailureProbabilityline 208Source documentation
Rejection probability per trial.
noncomputable def rejectionFailureProbability (N R : ℕ) : ℝ := ((R - N : ℕ) : ℝ) / R
- theorem
OAI.EditApproximation.rejectionFailureProbability_rangeline 210 - theorem
OAI.EditApproximation.rejection_exact_output_massline 223Source documentation
The sum over all first-success times is exactly uniform on the requested range. This also establishes total terminating mass one.
theorem rejection_exact_output_mass (N R : ℕ) (hN : 0 < N) (hNR : N ≤ R) : HasSum (fun n : ℕ => ((R - N : ℕ) : ℝ) ^ n / ((R : ℝ) ^ n * R)) (1 / (N : ℝ)) := by … - theorem
OAI.EditApproximation.rejection_expected_trialsline 242Source documentation
The expected rejection-loop trial count is the sum of its failure tails, namely
R/N.theorem rejection_expected_trials (N R : ℕ) (hN : 0 < N) (hNR : N ≤ R) : HasSum (fun n : ℕ => rejectionFailureProbability N R ^ n) ((R : ℝ) / N) := by … - theorem
OAI.EditApproximation.rejection_fair_bits_expected_trials_lt_twoline 254 - theorem
OAI.EditApproximation.rejection_first_success_expected_trialsline 263Source documentation
The actual first-success trace law has expected trial count
R/N; this identifies the tail-sum calculation with the terminating executions.theorem rejection_first_success_expected_trials (N R : ℕ) (hN : 0 < N) (hNR : N ≤ R) : HasSum (fun n : ℕ => ((n : ℝ) + 1) * N * (((R - N : ℕ) : ℝ) ^ n / ((R : ℝ) ^ n * R))) ((R : ℝ) / N) := by … - def
OAI.EditApproximation.rejectionTransitionline 296Source documentation
A streaming rejection sampler only retains its current accepted value and the current bounded-width random word.
def rejectionTransition (N R : ℕ) (state : Option (Fin N)) (word : Fin R) : Option (Fin N) := …
- theorem
OAI.EditApproximation.rejectionTransition_absorbsline 301 - theorem
OAI.EditApproximation.rejection_fixed_state_spaceline 305Source documentation
The sampler state space is independent of the number of failures.
theorem rejection_fixed_state_space (N R : ℕ) : Fintype.card (Option (Fin N)) = N + 1 ∧ Fintype.card (Fin R) = R := by … - theorem
OAI.EditApproximation.rejection_output_is_uniformline 311Source documentation
Summing the first-success trace probabilities gives exactly the probability of each value in the uniform target distribution.
theorem rejection_output_is_uniform (N R : ℕ) (hN : 0 < N) (hNR : N ≤ R) (accepted : Fin N) : let : NeZero N := ⟨Nat.ne_of_gt hN⟩ … - theorem
OAI.EditApproximation.rejection_terminating_massline 321Source documentation
Total mass of terminating rejection executions is one.
theorem rejection_terminating_mass (N R : ℕ) (hN : 0 < N) (hNR : N ≤ R) : (∑ _ : Fin N, ∑' n : ℕ, ((R - N : ℕ) : ℝ) ^ n / ((R : ℝ) ^ n * R)) = 1 := by … - theorem
OAI.EditApproximation.fair_bit_word_probabilityline 329Source documentation
The finite fair-word law factors into the independent fair-bit laws.
theorem fair_bit_word_probability (B : ℕ) (bits : Fin B → Bool) : PMF.uniformOfFintype (Fin B → Bool) bits = ∏ i : Fin B, PMF.uniformOfFintype Bool (bits i) := by … - theorem
OAI.EditApproximation.rejection_fair_bits_failure_lt_halfline 334 - theorem
OAI.EditApproximation.optimizerTriangularMass_monotoneline 344 - theorem
OAI.EditApproximation.optimizerTriangularMass_positiveline 350 - theorem
OAI.EditApproximation.triangularChoice_fiberline 361Source documentation
The lookup assigns precisely the
j+1integers in blockj.theorem triangularChoice_fiber (K : ℕ) (integer : Fin (optimizerTriangularMass K)) (j : ℕ) (hj : j < K) : (triangularChoice K integer).val = j ↔ optimizerTriangularMass j ≤ integer.val ∧ integer.val < optimizerTriangularMass (j + 1) := by …Mentions: OAI.EditApproximation.optimizerTriangularMass, OAI.EditApproximation.triangularChoice
- def
OAI.EditApproximation.triangularChoiceFiberEquivline 395Source documentation
Each triangular lookup fiber is exactly a finite interval of the claimed integer length.
def triangularChoiceFiberEquiv (K j : ℕ) (hj : j < K) : {integer : Fin (optimizerTriangularMass K) // (triangularChoice K integer).val = j} ≃ Fin (j + 1) where …Mentions: OAI.EditApproximation.optimizerTriangularMass, OAI.EditApproximation.triangularChoice
- theorem
OAI.EditApproximation.triangularChoice_fiber_cardline 424 - theorem
OAI.EditApproximation.triangularChoice_uniform_weightsline 431Source documentation
Uniform integer rejection followed by triangular lookup gives the stored exact optimizer weights.
theorem triangularChoice_uniform_weights (K : ℕ) (hK : 0 < K) (j : Fin K) : let : NeZero (optimizerTriangularMass K) := ⟨Nat.ne_of_gt (optimizerTriangularMass_positive K hK)⟩ …Mentions: OAI.EditApproximation.optimizerTriangularMass, OAI.EditApproximation.optimizerTriangularMass_positive
- theorem
OAI.EditApproximation.triangularChoice_coordinate_meanline 454Source documentation
Exact coordinate mean of the sampler, including repeated selected actions, equals the actual rational optimizer iterate.
theorem triangularChoice_coordinate_mean {ι : Type*} (initial : ι → ℚ) (selected : ℕ → ι → ℚ) (K : ℕ) (hK : 0 < K) (i : ι) : (∑ integer : Fin (optimizerTriangularMass K), selected (triangularChoice K integer).val i) / optimizerTriangularMass K = rationalOptimizerIterate initial selected K i := by …Mentions: OAI.EditApproximation.optimizerTriangularMass, OAI.EditApproximation.triangularChoice, OAI.EditApproximation.rationalOptimizerIterate
- theorem
OAI.EditApproximation.finiteRationalOptimizer_sampler_meanline 475Source documentation
The exactly sampled action has the mean computed by the finite rational optimizer, with no distinction assumption on its selections.
theorem finiteRationalOptimizer_sampler_mean {ι : Type*} (coordinates : Finset ι) (vertices : List (ι → ℚ)) (linear : ι → ℚ) (G K : ℕ) (hK : 0 < K) (i : ι) : (∑ integer : Fin (optimizerTriangularMass K), finiteOptimizerSelection coordinates vertices linear G (triangularChoice K integer).val i) / optimizerTriangularMass K = finiteRationalOptimizer coordinates vertices linear G K i := by …Mentions: OAI.EditApproximation.optimizerTriangularMass, OAI.EditApproximation.finiteOptimizerSelection, OAI.EditApproximation.triangularChoice, OAI.EditApproximation.finiteRationalOptimizer