概率程序的逆向抽象解释
1. 概率程序示例与权重函数
首先来看两个简单的概率程序示例:
程序一 :
double x, y;
... /* A */
y = centered_uniform()+centered_uniform();
x += y/2;
...
if (fabs(x) <= 1)
{
... /* B */
}
程序二 :
double x, y;
... /* A */
if (x+y >= -1)
{
x += 2;
}
y = centered_uniform()+centered_uniform();
x += y/2;
...
if (fabs(x) <= 1)
{
... /* B */
}
对于这两个程序,存在权重函数 (g),使得在步骤 (A) 给定概率测度 (\mu) 时,步骤 (B) 发生的概率为 (\int g d\mu)。具体来说:
- 若在步骤 (A) 中 (x) 按照 ([a, b]) 上的均匀分布取值,那么步骤 (B) 发生的概率为 (\int_{a}^{b} g(x) dx)。
- 若在步骤 (A) 中 (x) 被设为常数 (C),则步骤 (B) 发生的概率为 (g(C))。
集合 (g^{-1}(0)) 是步骤 (A) 中那些没有机会启动到达步骤 (B) 的程序轨迹的值的集合,但要注意它与那些根本无法