(work in progress) - cs.ox.ac.uk · (work in progress) hongseok yang university of oxford joint...
TRANSCRIPT
![Page 1: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/1.jpg)
Program transformation for probabilistic programs
(work in progress)Hongseok Yang
University of Oxford
Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood
![Page 2: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/2.jpg)
Can program language techniques be used to do efficient inference on Anglican programs?
![Page 3: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/3.jpg)
1. Small. No assignments.2. Continuous distributions.3. High-order functions.4. Lisp-style quote/eval.
Can program language techniques be used to do efficient inference on Anglican programs?
![Page 4: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/4.jpg)
Can program language techniques be used to do efficient inference on Anglican programs?
help MC inference algorithms for
![Page 5: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/5.jpg)
Can program language techniques be used to do efficient inference on Anglican programs?
help MC inference algorithms for
Yes sometimes.1. Marginalise some latent variables.2. Compute posterior wrt. some data.
![Page 6: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/6.jpg)
Take-home message
PL techniques might help develop symbolic techniques for optimising prob. programs locally.
![Page 7: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/7.jpg)
p
m1
m2
xi
yi
i=1..50
xk
yk
k=51..55
p ~ beta(1,1) m1 ~ normal(10,10) m2 ~ normal(10,10) yi ~ flip(p) xi ~ normal(myi,10) yk ~ flip(p) xk ~ normal(myk,10) for i = 1..50, k = 51..55
Q: posterior of p?
![Page 8: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/8.jpg)
p
m1
m2
xi
i=1..50
xk
yk
k=51..55
p ~ beta(1,1) m1 ~ normal(10,10) m2 ~ normal(10,10) xi ~ p*normal(m1,10) + (1-p)*normal(m2,10) yk ~ flip(p) xk ~ normal(myk,10) for i = 1..50, k = 51..55
Q: posterior of p?
Marginalise yi.Post. wrt. yk.Post. wrt. xk.Run MC.
![Page 9: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/9.jpg)
p
m1
m2
xi
i=1..50
xk
k=51..55
p ~ beta(…, …) m1 ~ normal(10,10) m2 ~ normal(10,10) xi ~ p*normal(m1,10) + (1-p)*normal(m2,10) yk ~ flip(p) xk ~ normal(myk,10) for i = 1..50, k = 51..55
Q: posterior of p?
Marginalise yi.Post. wrt. yk.Post. wrt. xk.Run MC algo.
![Page 10: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/10.jpg)
p
m1
m2
xi
i=1..50
p ~ beta(…, …) m1 ~ normal(…, …) m2 ~ normal(…, …) xi ~ p*normal(m1,10) + (1-p)*normal(m2,10)
for i = 1..50
Q: posterior of p?
Marginalise yi.Post. wrt. yk.Post. wrt. xk.Run MC.
![Page 11: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/11.jpg)
p
m1
m2
xi
i=1..50
p ~ beta(…, …) m1 ~ normal(…, …) m2 ~ normal(…, …) xi ~ p*normal(m1,10) + (1-p)*normal(m2,10)
for i = 1..50
Q: posterior of p?
Marginalise yi.Post. wrt. yk.Post. wrt. xk.Run MC algo.
![Page 12: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/12.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.)) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) y0) (observe (if y0 (normal m1 10.) (normal m2 10.)) x0) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50)
![Page 13: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/13.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) y0) (observe (if y0 (normal m1 10.) (normal m2 10.)) x0) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 14: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/14.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) y0) (observe (if y0 (normal m1 10.) (normal m2 10.)) x0) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 15: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/15.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) y0) (observe (if y0 (normal m1 10.) (normal m2 10.)) x0) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 16: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/16.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 17: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/17.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 18: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/18.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 19: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/19.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 20: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/20.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
1. ERPify.2. Move observe
backwards.
![Page 21: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/21.jpg)
Elementary random procedure (ERP)
Examples:
flip, normal, gamma, …
Non-examples:
(lambda (P) (not (sample (flip P))))
![Page 22: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/22.jpg)
Elementary random procedure (ERP)
Procedure that creates an object ob with the following two methods:
(sample ob) for sampling a value
(observe ob v) for computing log pdf / pmf
![Page 23: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/23.jpg)
Erpification• Generates an ERP from a normal procedure.
• Finds a formula for log pdf/pmf.
• Results expressed in terms of existing ERPs.
(lambda (P) (not (sample (flip P))))
(lambda (P) (flip (- 1 P))))
![Page 24: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/24.jpg)
Erpification• Generates an ERP from a normal procedure.
• Finds a formula for log pdf/pmf.
• Results expressed in terms of existing ERPs.
(lambda (P) (not (sample (flip P))))
(lambda (P) (flip (- 1 P))))
(lambda (P M1 M2) (if (sample (flip P)) (sample (normal M1 1)) (sample (normal M2 1))))
(lambda (P M1 M2) (mixture-dist [[P (normal M1 1)] [(- 1 P) (normal M2 1)]]))
![Page 25: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/25.jpg)
ErpificationSuppose erpify(f) = f-erp.• Then, (f p) = (sample (f-erp p)).• Can: (observe (f-erp p) false). • Cannot: (observe (f p) false).
(lambda (P) (not (sample (flip P))))
(lambda (P) (flip (- 1 P))))
(lambda (P M1 M2) (if (sample (flip P)) (sample (normal M1 1)) (sample (normal M2 1))))
(lambda (P M1 M2) (mixture-dist [[P (normal M1 1)] [(- 1 P) (normal M2 1)]]))
![Page 26: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/26.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
![Page 27: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/27.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
![Page 28: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/28.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
{ (false, P, []), (true, 1-P, []) }
![Page 29: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/29.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
{ (false, P, []), (true, 1-P, []) }
(flip (- 1 P))
![Page 30: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/30.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
{ (false, P, []), (true, 1-P, []) }
(flip (- 1 P))
(lambda (P M1 M2) (if (sample (flip P)) (sample (normal M1 1)) (let ((R2 (sample (normal M2 1)))) (sample (normal (+ R2 5) 1)))))
![Page 31: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/31.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
{ (false, P, []), (true, 1-P, []) }
(flip (- 1 P))
(lambda (P M1 M2) (if (sample (flip P)) (sample (normal M1 1)) (let ((R2 (sample (normal M2 1)))) (sample (normal (+ R2 5) 1)))))
{ (R1, P, [R1:(normal M1 1)]), (R3, 1-P, [R2:(normal M2 1), R3:(normal (* R2 2) 1)]) }
![Page 32: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/32.jpg)
1. Symbolically enumerate all possible outputs.
2. Express the outputs using existing ERPs.
(lambda (P) (not (sample (flip P))))
{ (false, P, []), (true, 1-P, []) }
(flip (- 1 P))
(lambda (P M1 M2) (if (sample (flip P)) (sample (normal M1 1)) (let ((R2 (sample (normal M2 1)))) (sample (normal (+ R2 5) 1)))))
{ (R1, P, [R1:(normal M1 1)]), (R3, 1-P, [R2:(normal M2 1), R3:(normal (* R2 2) 1)]) }
(mixture-dist [[P (normal M1 1)] [(- 1 P) (normal (* M2 2) (sqrt 5))]])
![Page 33: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/33.jpg)
(erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
![Page 34: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/34.jpg)
(erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(lambda (P M1 M2) (sample (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
![Page 35: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/35.jpg)
(erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(lambda (P M1 M2) (sample (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
{ (R1, P, [R1:(normal M1 10.)]), (R2, 1-P, [R2:(normal M2 10.)]) }
![Page 36: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/36.jpg)
(erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])
(lambda (P M1 M2) (sample (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
{ (R1, P, [R1:(normal M1 10.)]), (R2, 1-P, [R2:(normal M2 10.)]) }
![Page 37: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/37.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
1. ERPify.2. Move observe
backwards.
![Page 38: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/38.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
1. ERPify.2. Move observe
backwards.
![Page 39: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/39.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
1. ERPify.2. Move observe
backwards.
![Page 40: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/40.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 41: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/41.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (observe (flip p) false) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 42: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/42.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (observe (flip p) false) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 43: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/43.jpg)
p
m1
m2
xi
i=1..50
x0
y0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.)))(assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 44: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/44.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 45: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/45.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
p not defined. Hence, independent.Beta-Flip conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 46: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/46.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
1. ERPify.2. Move observe
backwards.
![Page 47: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/47.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.normal-normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 48: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/48.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (normal m2 10.) 102.3)
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.normal-normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 49: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/49.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (normal m2 10.) 102.3)
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.normal-normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 50: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/50.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.))) (observe (normal m2 10.) 102.3) (assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.normal-normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 51: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/51.jpg)
p
m1
m2
xi
i=1..50
x0
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.))) (observe (normal m2 10.) 102.3) (assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.Normal-Normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 52: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/52.jpg)
p
m1
m2
xi
i=1..50
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (observe (normal … …) 102.3) (assume m2 (sample (normal … …))) (assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.Normal-Normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 53: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/53.jpg)
p
m1
m2
xi
i=1..50
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (observe (normal … …) 102.3) (assume m2 (sample (normal … …))) (assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.Normal-Normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 54: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/54.jpg)
p
m1
m2
xi
i=1..50
(observe (flip 0.5) false) (assume p (sample (beta 1. 2.))) (assume m1 (sample (normal 10. 10.))) (observe (normal … …) 102.3) (assume m2 (sample (normal … …))) (assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
Partial evaluation.m2 and f are different.Normal-Normal conjugacy.Constant importance weight.
1. ERPify.2. Move observe
backwards.
![Page 55: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/55.jpg)
Gibbs-like algorithm (LHM) applied to original program
10K samples. 26 different samples.
posterior mean of mixing prob. p
![Page 56: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/56.jpg)
Gibbs-like algorithm (LHM) applied to original program
10K samples. 26 different samples.
posterior mean of mixing prob. p
transformed program
2721
![Page 57: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/57.jpg)
ERPification is correct sometimes, but not always.
![Page 58: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/58.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.)))(assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3)
(observe (f p m1 m2) x1) … (observe (f p m1 m2) x50) (predict p)
![Page 59: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/59.jpg)
p
m1
m2
xi
yi
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (assume dist (f p m1 m2)) (observe dist x1) … (observe dist x50) (predict p)
![Page 60: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/60.jpg)
p
m1
m2
xi
y
i=1..50
x0
y0
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (erpify-dist (lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.))))))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (assume dist (f p m1 m2)) (observe dist x1) … (observe dist x50) (predict p)
![Page 61: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/61.jpg)
(assume p (sample (beta 1. 1.))) (assume m1 (sample (normal 10. 10.))) (assume m2 (sample (normal 10. 10.)))
(assume f (lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
(observe (flip p) false) (observe (if false (normal m1 10.) (normal m2 10.)) 102.3) (assume dist (f p m1 m2)) (observe dist x1) … (observe dist x50) (predict p)
p
m1
m2
xi
yi
i=1..50
x0
y0
![Page 62: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/62.jpg)
• Correct only if proc is called at most once.
• Need to checked by, e.g., a type system.
(lambda (P M1 M2) (let ((y (sample (flip P)))) (if y (normal M1 10.) (normal M2 10.)))))
(lambda (P M1 M2) (mixture-dist [[P (normal M1 10.)] [(- 1. P) (normal M2 10.)]])))
: R × R × R ⟶ dist(R)flip
: R × R × R ⟶ dist(R)
Old
New
![Page 63: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/63.jpg)
ERPification can fail.
![Page 64: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/64.jpg)
Absence of density (wrt. Lebesque measure)
(lambda (P) (if (sample (flip P)) (sample (normal 0. 1.)) 2))
![Page 65: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/65.jpg)
Incompleteness of our method
(lambda (X) (+ (sample (gamma 3. 2.)) (sample (normal X 2.))))
![Page 66: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/66.jpg)
Similarity with algorithms for graphical models
![Page 67: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/67.jpg)
• Symbolic enumeration of all outputs.
• Variable elimination.
• Moving observe backwards.
• Backward algorithm for HMM.
![Page 68: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/68.jpg)
• Symbolic enumeration of all outputs.
• Variable elimination.
• Moving observe backwards.
• Backward algorithm for HMM.
![Page 69: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/69.jpg)
[ , ](let [is-cloudy (sample (flip P)) is-raining (if is-cloudy (sample (flip .8)) (sample (flip .1)))) is-wet (if is-raining (sample (flip Q)) (sample (flip .1)))] is-wet)
1
is-cloudy is-raining is-wet
![Page 70: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/70.jpg)
[ , ]
[ , ](let [is-raining (if true (sample (flip .8)) (sample (flip .1)))) is-wet (if is-raining (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-raining (if false (sample (flip .8)) (sample (flip .1)))) is-wet (if is-raining (sample (flip Q)) (sample (flip .1)))] is-wet)
P
1-P
![Page 71: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/71.jpg)
[ , ]
[ , ]
[ , ]
(let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
P*0.8
P*0.2
(let [is-raining (if false (sample (flip .8)) (sample (flip .1)))) is-wet (if is-raining (sample (flip Q)) (sample (flip .1)))] is-wet)
1-P
![Page 72: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/72.jpg)
[ , ]
[ , ]
[ , ][ , ]
(let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(1-P)*0.1
(1-P)*0.9
P*0.8
P*0.2
![Page 73: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/73.jpg)
[ , ]
[ , ]
[ , ][ , ]
(let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(1-P)*0.1
(1-P)*0.9
P*0.8
P*0.2
![Page 74: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/74.jpg)
[ , ](let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
0.1+P*0.7
[ , ]
[ , ]
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(1-P)*0.9
P*0.2
![Page 75: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/75.jpg)
[ , ](let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
0.1+P*0.7
[ , ]
[ , ]
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
(1-P)*0.9
P*0.2
![Page 76: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/76.jpg)
[ , ](let [is-wet (if true (sample (flip Q)) (sample (flip .1)))] is-wet)
0.1+P*0.7
[ , ](let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
0.9-P*0.7
![Page 77: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/77.jpg)
[ , ]true Q*(0.1+P*0.7)
[ , ]false (1-Q)*(0.1+P*0.7)
[ , ](let [is-wet (if false (sample (flip Q)) (sample (flip .1)))] is-wet)
0.9-P*0.7
![Page 78: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/78.jpg)
[ , ]true 0.1*(0.9-P*0.7)
[ , ]false 0.9*(0.9-P*0.7)
[ , ]true Q*(0.1+P*0.7)
[ , ]false (1-Q)*(0.1+P*0.7)
![Page 79: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/79.jpg)
[ , ]true0.1*Q - 0.07*P + 0.7*PQ + 0.09
[ , ]false
[ , ]false
0.9*(0.9-P*0.7)
(1-Q)*(0.1+P*0.7)
![Page 80: (work in progress) - cs.ox.ac.uk · (work in progress) Hongseok Yang University of Oxford Joint work with David Tolpin, Jan-Willem van de Meent, Frank Wood. Can program language techniques](https://reader033.vdocuments.site/reader033/viewer/2022042305/5f0869aa7e708231d421e2d4/html5/thumbnails/80.jpg)
[ , ]true
[ , ]false -0.1*Q + 0.07*P - 0.7*PQ + 0.91
0.1*Q - 0.07*P + 0.7*PQ + 0.09