@@ -37,50 +37,50 @@ module Uniform.Model {
37
37
Monad. Map (Sample(b - a), x => a + x)
38
38
}
39
39
40
- /* lemma SampleTerminates(n: nat)
41
- requires n > 0
42
- ensures
43
- && Independence.IsIndep(Proposal(n))
44
- && Quantifier.WithPosProb(Loops.ProposalIsAccepted(Proposal(n), Accept(n)))
45
- && Loops.UntilTerminatesAlmostSurely(Proposal(n), Accept(n))
46
- {
47
- assert Independence.IsIndep(Proposal(n)) by {
48
- UniformPowerOfTwo.Correctness.SampleIsIndep(2 * n);
49
- }
50
- var e := iset s | Loops.ProposalIsAccepted(Proposal(n), Accept(n))(s);
51
- assert e in Rand.eventSpace by {
52
- var ltN := iset m: nat | m < n;
53
- var resultsLtN := Monad.ResultsWithValueIn(ltN);
54
- assert e == Measures.PreImage(UniformPowerOfTwo.Model.Sample(2 * n), resultsLtN);
55
- assert Measures.PreImage(UniformPowerOfTwo.Model.Sample(2 * n), resultsLtN) in Rand.eventSpace by {
56
- assert Independence.IsIndep(UniformPowerOfTwo.Model.Sample(2 * n)) by {
57
- UniformPowerOfTwo.Correctness.SampleIsIndep(2 * n);
58
- }
59
- assert Measures.IsMeasurable(Rand.eventSpace, Monad.natResultEventSpace, UniformPowerOfTwo.Model.Sample(2 * n)) by {
60
- Independence.IsIndepImpliesMeasurableNat(UniformPowerOfTwo.Model.Sample(2 * n));
61
- }
62
- assert resultsLtN in Monad.natResultEventSpace by {
63
- Monad.LiftInEventSpaceToResultEventSpace(ltN, Measures.natEventSpace);
64
- }
40
+ /* lemma SampleTerminates(n: nat)
41
+ requires n > 0
42
+ ensures
43
+ && Independence.IsIndep(Proposal(n))
44
+ && Quantifier.WithPosProb(Loops.ProposalIsAccepted(Proposal(n), Accept(n)))
45
+ && Loops.UntilTerminatesAlmostSurely(Proposal(n), Accept(n))
46
+ {
47
+ assert Independence.IsIndep(Proposal(n)) by {
48
+ UniformPowerOfTwo.Correctness.SampleIsIndep(2 * n);
65
49
}
66
- }
67
- assert Quantifier.WithPosProb(Loops.ProposalIsAccepted(Proposal(n), Accept(n))) by {
68
- assert Rand.prob(e) > 0.0 by {
69
- assert e == (iset s | UniformPowerOfTwo.Model.Sample(2 * n)(s).value < n);
70
- assert n <= Helper.Power(2, Helper.Log2Floor(2 * n)) by {
71
- Helper.NLtPower2Log2FloorOf2N(n);
50
+ var e := iset s | Loops.ProposalIsAccepted(Proposal(n), Accept(n))(s);
51
+ assert e in Rand.eventSpace by {
52
+ var ltN := iset m: nat | m < n;
53
+ var resultsLtN := Monad.ResultsWithValueIn(ltN);
54
+ assert e == Measures.PreImage(UniformPowerOfTwo.Model.Sample(2 * n), resultsLtN);
55
+ assert Measures.PreImage(UniformPowerOfTwo.Model.Sample(2 * n), resultsLtN) in Rand.eventSpace by {
56
+ assert Independence.IsIndep(UniformPowerOfTwo.Model.Sample(2 * n)) by {
57
+ UniformPowerOfTwo.Correctness.SampleIsIndep(2 * n);
58
+ }
59
+ assert Measures.IsMeasurable(Rand.eventSpace, Monad.natResultEventSpace, UniformPowerOfTwo.Model.Sample(2 * n)) by {
60
+ Independence.IsIndepImpliesMeasurableNat(UniformPowerOfTwo.Model.Sample(2 * n));
61
+ }
62
+ assert resultsLtN in Monad.natResultEventSpace by {
63
+ Monad.LiftInEventSpaceToResultEventSpace(ltN, Measures.natEventSpace);
64
+ }
72
65
}
73
- calc {
74
- Rand.prob(e);
75
- == { UniformPowerOfTwo.Correctness.UnifCorrectness2Inequality(2 * n, n); }
76
- n as real / (Helper.Power(2, Helper.Log2Floor(2 * n)) as real);
77
- >
78
- 0.0;
66
+ }
67
+ assert Quantifier.WithPosProb(Loops.ProposalIsAccepted(Proposal(n), Accept(n))) by {
68
+ assert Rand.prob(e) > 0.0 by {
69
+ assert e == (iset s | UniformPowerOfTwo.Model.Sample(2 * n)(s).value < n);
70
+ assert n <= Helper.Power(2, Helper.Log2Floor(2 * n)) by {
71
+ Helper.NLtPower2Log2FloorOf2N(n);
72
+ }
73
+ calc {
74
+ Rand.prob(e);
75
+ == { UniformPowerOfTwo.Correctness.UnifCorrectness2Inequality(2 * n, n); }
76
+ n as real / (Helper.Power(2, Helper.Log2Floor(2 * n)) as real);
77
+ >
78
+ 0.0;
79
+ }
79
80
}
80
81
}
81
- }
82
- assert Loops.UntilTerminatesAlmostSurely(Proposal(n), Accept(n)) by {
83
- Loops.EnsureUntilTerminates(Proposal(n), Accept(n));
84
- }
85
- } */
82
+ assert Loops.UntilTerminatesAlmostSurely(Proposal(n), Accept(n)) by {
83
+ Loops.EnsureUntilTerminates(Proposal(n), Accept(n));
84
+ }
85
+ } */
86
86
}
0 commit comments