<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">probKanren: A Simple Probabilistic extension for microKanren</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Robert</forename><surname>Zinkov</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Dept. of Engineering Science</orgName>
								<orgName type="institution">University of Oxford</orgName>
								<address>
									<addrLine>25 Banbury Rd</addrLine>
									<settlement>Oxford</settlement>
									<country key="GB">UK</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">William</forename><forename type="middle">E</forename><surname>Byrd</surname></persName>
							<affiliation key="aff1">
								<orgName type="department">Hugh Kaul Precision Medicine Institute</orgName>
								<orgName type="institution">University of Alabama at Birmingham</orgName>
								<address>
									<addrLine>705 20th Street S</addrLine>
									<postCode>35233</postCode>
									<settlement>Birmingham</settlement>
									<region>AL</region>
									<country>United States of America</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">probKanren: A Simple Probabilistic extension for microKanren</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">C3E514A9D7D52F9D5CECDBFBD574460F</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T04:54+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Probabilistic Logic Programming</term>
					<term>miniKanren</term>
					<term>Probabilistic Programming</term>
					<term>Sequential Monte Carlo</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Probabilistic programming can be conceptually seen as generalisation of logic programming where instead of just returning a set of answers to a given query, we also return a probability distribution over those answers. But many contemporary probabilistic logic programming languages implementations are not simple extensions of existing logic programming languages but instead involve their own unique implementations. Here we introduce probKanren, a simple extension to microKanren that transforms it into a probabilistic programming language without needing to make any modifications to the underlying logic language's search. We use several illustrative examples from the probabilistic programming and program synthesis literature to demonstrate the practicality of the approach.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Conceptually, logic programming provides a way to model non-determinism. This is accomplished by maintaining a set of answers that satisfy a set of logical constraints. A natural generalisation to this domain is adding a notion of uncertainty to this set of answers by associating with them a probability distribution.</p><p>But the conceptual simplicity of this sort of generalisation is not reflected in the complexity of many existing probabilistic logic programming systems. They often involve implementing sophisticated inference algorithms and the underlying systems are not just implemented on top of existing logic programming systems.</p><p>We believe that a conceptually simple extension deserves a conceptually simple implementation to go along with it. We thus contribute a simple way to extend microKanren, a small logic programming domain-specific language such that it becomes a probabilistic programming language.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.1.">Illustrated Example</head><p>To help explain how to use probKanren we introduce the following example:</p><p>PLP 2021 Envelope zinkov@robots.ox.ac.uk (R. Zinkov); webyrd@uab.edu (W. E. Byrd) GLOBE https://zinkov.com/ (R. Zinkov); http://webyrd.net/ (W. E. Byrd) ( r u n 1 0 0 0 ( q ) ( c o n j ( n o r m a l 0 3 q ) ( n o r m a l q 2 4 ) ) )</p><p>In the above program, we have a probabilistic model for the Gaussian unknown mean problem. We observe a value 4 from the 𝒩 (𝑞, 2) distribution, and that 𝑞 has a prior distribution of 𝒩 (0, 3). This probKanren program draws 1000 samples from a conditional normal distribution that represents the posterior probability distribution associated with 𝑞.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Related Work</head><p>There is a rich history of extending logic programming formalisms to support probabilistic inference. Early systems like PRISM <ref type="bibr" target="#b0">[1]</ref> and ProbLog <ref type="bibr" target="#b1">[2]</ref> allowed associating discrete distributions with facts. Early versions of ProbLog were also built on top of Prolog, matching one of the goals of our work. Later work <ref type="bibr" target="#b2">[3]</ref> introduces distribution clauses so that some continuous distributions like Gaussians can be represented. Other work extended these methods further while focusing on efficient exact inference algorithms like weighted model integration <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b4">5]</ref>. Our work is most similar to <ref type="bibr" target="#b5">[6]</ref>, except that while they combine their forward reasoning with an importance sampler we use a particle cascade instead which can be more sample efficient.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Background</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1.">microKanren</head><p>microKanren <ref type="bibr" target="#b6">[7,</ref><ref type="bibr" target="#b7">8]</ref> is a pure logic programming language embedded in Scheme. The language consists of a set of terms, a set of goal primitives, and two run forms that turn goal queries into a set of answers. The goal primitives consist of a f r e s h form for introducing logic variables, a unification primitive = = , a conjunction combinator c o n j , a disjunction combinator d i s j , and ways to define and apply relations. Further forms are shown in detail in Figure <ref type="figure" target="#fig_0">1</ref>.</p><p>Goal expressions represent a possibly backtracking search procedure. These goals all take as input some state and output a stream of possible output states. We run these goals by starting with an initial state that holds an empty substitution dictionary, and passing it into the top-level goal expression which then passes it recursively down to sub-expressions. Encountering f r e s h extends the lexical environment with a binding between a lexical variable and a logic variable; c o n j will apply the first goal to the state passed in, and then apply the second goal to the states associated with each resulting stream from the first goal and finally unify the results; d i s j will apply both goals to the same input state and concatenate the resulting streams; and = = unifies its arguments in the context of the current state, discarding any streams which fail to unify.</p><p>To handle goal expressions that might diverge, the streams are expanded in an interleaving[9] fashion, giving each branch a chance to produce answers. This interleaving search is sound and complete <ref type="bibr" target="#b9">[10]</ref>. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.">Grammar and Definitions</head><p>To create probKanren, we extend this grammar with distribution clauses such as n o r m a l and b e r n . Distribution clauses take as arguments the parameters of the distribution and a last argument representing a draw from that distribution. For example, ( n o r m a l 0 1 x ) means x represents a draw from the 𝒩 (0, 1) distribution. These are just another type of goal expression. We do not need to add a notion of probabilistic variables to the language grammar, as they can treated as logic variables constrained in a particular way. The semantics of the language though does change from an answer set to a probability distribution on that answer set.</p><p>We follow the semantics of <ref type="bibr" target="#b10">[11]</ref>, this is a denotational semantics where each language form is associated with a measurable function, and an operational semantics of a sampler.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3.">Probabilistic Programming</head><p>Probabilistic Programming Languages <ref type="bibr" target="#b11">[12,</ref><ref type="bibr" target="#b12">13]</ref> are a family of domain-specific languages for posing and efficiently solving probabilistic modelling problems. At their core, all have a way to s a m p l e and o b s e r v e data under a probability distribution or Markov kernel.</p><p>There are many inference algorithms for probabilistic programming languages, but methods based on likelihood-weighting and Sequential Monte Carlo algorithms are the simplest to implement.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.4.">Sequential Monte Carlo</head><p>Sequential Monte Carlo <ref type="bibr" target="#b13">[14]</ref>(SMC) is an efficient online way to sample from probabilistic models, which is especially suited for state-space domains. If we imagine our probabilistic programs as straight-line programs with no control-flow we can imagine numbering every sample function 𝑓 1 , 𝑓 2 , … , 𝑓 𝑛 and every observe function 𝑔 1 , 𝑔 2 , … , 𝑔 𝑛 then our probability density over our latent variables 𝑥 0∶𝑇 and observed data 𝑦 0∶𝑇 can be defined as:</p><formula xml:id="formula_0">𝑝(𝑥 0∶𝑇 , 𝑦 0∶𝑇 ) = 𝑝(𝑥 0 ) 𝑇 ∏ 𝑡=1 𝑓 𝑡 (𝑥 𝑡 | 𝑥 𝑡−1 ) 𝑇 ∏ 𝑡=0 𝑔 𝑡 (𝑦 𝑡 | 𝑥 𝑡 )<label>(1)</label></formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.5.">Sequential Importance Sampling</head><p>The simplest way to sample from our target distribution 𝑝(𝑥 0∶𝑇 | 𝑦 0∶𝑇 ) is to sample from a sequence of intermediary distributions 𝑝(𝑥 0∶𝑡 | 𝑦 0∶𝑡 ) where 𝑡 goes from 1 to 𝑇. We do this by sampling a population of 𝑁 particles {𝑥 Thanks to the recurrence relation:</p><formula xml:id="formula_1">𝑝(𝑥 0∶𝑡 | 𝑦 0∶𝑡 ) = 𝑝(𝑥 0∶𝑡−1 | 𝑦 0∶𝑡−1 ) 𝑓 𝑡 (𝑥 𝑡 | 𝑥 𝑡−1 )𝑔 𝑡 (𝑦 𝑡 | 𝑥 𝑡 ) 𝑝(𝑦 𝑡 | 𝑦 0∶𝑡−1 )<label>(2)</label></formula><p>we know in 𝑇 rounds we compute the desired distribution as follows:</p><p>Initialise with:</p><formula xml:id="formula_2">𝑥 (𝑖) 0 ∼ 𝑝(𝑥 0 )<label>(3)</label></formula><formula xml:id="formula_3">𝑤 (𝑖) 0 = 1/𝑁<label>(4)</label></formula><p>Then for 𝑡 from 1 to 𝑇 𝑥</p><formula xml:id="formula_4">(𝑖) 𝑡 ∼ 𝑞(𝑥 𝑡 | 𝑥 (𝑖) 0∶𝑡−1 )<label>(5)</label></formula><formula xml:id="formula_5">𝑤 (𝑖) 𝑡 ∝ 𝑤 (𝑖) 𝑡−1 𝑓 (𝑥 (𝑖) 𝑡 | 𝑥 (𝑖) 𝑡−1 )𝑔(𝑦 𝑡 | 𝑥 (𝑖) 𝑡 ) 𝑞(𝑥 (𝑖) 𝑡 | 𝑥 (𝑖) 0∶𝑡−1 ) (6) We get the best results if 𝑞(𝑥 𝑡 | 𝑥 0∶𝑡−1 ) is equal to 𝑝(𝑥 𝑡 | 𝑥 0∶𝑡−1 , 𝑦 0∶𝑡 ).</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.6.">Sequential Importance Resampling</head><p>Unfortunately, over time SIS is likely to lead to most of the importance weight in a small fraction of the particles, with the rest of the particles having negligible weight. This is usually called weight degeneracy. We address this sample efficiency issue in the standard way by replicating the particles with high weight and dropping the ones with low weight. This is called a resampling step, and it happens after each round. Resampling effectively removes particles with low weight and duplicates particles with higher weight by sampling with replacement our existing particles.</p><formula xml:id="formula_6">𝑎 (𝑖) 𝑡 ∼ 𝑟(𝑤 (1∶𝑁 ) 𝑡−1 ) 𝑥 (𝑖) 𝑡 ∼ 𝑞(𝑥 𝑡 | 𝑥 (𝑎 (𝑖) 𝑡 ) 0∶𝑡−1 ) 𝑤 (𝑖) 𝑡 ∝ 𝑤 (𝑖) 𝑡−1 𝑓 (𝑥 (𝑖) 𝑡 | 𝑥 (𝑖) 𝑡−1 )𝑔(𝑦 𝑡 | 𝑥 (𝑖) 𝑡 ) 𝑞(𝑥 (𝑖) 𝑡 | 𝑥 (𝑖) 0∶𝑡−1 )</formula><p>For each particle 𝑖, resampling tells us which of the existing particles 𝑎 𝑖 will be its ancestor. We set 𝑟(𝑤) = Categorical(𝑤), which is called multinomial resampling but there are other methods as well <ref type="bibr" target="#b14">[15]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.7.">Particle Cascade</head><p>Unfortunately, SMC as defined here requires having access to all the particles at every step in the process. This conflicts with the functional nature of our implementation. Instead we make use of Particle Cascades <ref type="bibr" target="#b15">[16]</ref>, removing this barrier allowing every particle to be resampled asynchronously with the associated weights being relative to a global running average.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Proposed Method</head><p>We propose to extend microKanren by turning the search into an SMC sampler. We accomplish this by augmenting each of the search streams with a set of particles. These particles represent the empirical distribution of that stream. Each particle has associated with it a substitution of all the logic and random variables as well as a weight that is proportional to the likelihood of the substitution.</p><p>We follow <ref type="bibr" target="#b2">[3]</ref> and place the following restrictions on our distribution clauses and the random variables they specify.</p><p>Firstly, the arguments of distribution clauses must be grounded. Secondly, a random variable cannot unify with any arithmetic expression.</p><p>An initial set of particles is created from the probabilistic program when it is first run. When encountering primitives such as n o r m a l we first check if all the parameter terms are grounded and then if the last argument is fresh, we sample a value for it for each particle and then add this sampled value along with the associated logic variable to the substitution associated with that particle. If all the terms are ground, we treat the primitive like an observation statement and multiply the weights of each substitution with the likelihood of the observation.</p><p>As conjunctions (conj) are encountered, all particles in all output streams from the first goal become part of the initial states that are each passed to the second goal.</p><p>As disjunctions (disj) are encountered, we split evenly the number of particles allocated to each stream. Whenever we encounter a unification primitive, we run a resampling step. This helps to prune particles with low weight and replicate particles with high weight.</p><p>As an optimisation, we may create more particles during resampling based on a globally stored counter of the effective sample size of all particles across all streams. This extension does not modify the search and streams are managed exactly as in microKanren. An additional advantage, due to the microKanren search being complete, we are guaranteed to recover the true posterior as all paths of the search space will eventually be explored given enough particles.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Experiments</head><p>We validate that probKanren is at least as expressive as other probabilistic logic programming languages by implementing the Friends who Smoke model.</p><p>Friends who Smoke is a probabilistic logic program which models the social nature of who smokes cigarettes. The model predicts that people who are friends with people who smoke are more likely to smoke. We replicate the example on https://dtai.cs.kuleuven.be/problog/ tutorial/basic/05_smokers.html using 2000 particles and get an empirical distribution that seems to match up with the discrete distribution returned from ProbLog.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">Conclusions</head><p>We made a simple-to-implement extension to microKanren that lets us support probabilistic inference on both discrete and continuous distributions. The approach does not require modifying the underlying search algorithm or touching any of the backtracking code and comes with a theoretical guarantee that if the underlying search is complete then the probabilistic extension will recover the true posterior given enough particles.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Grammar for microKanren</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head></head><label></label><figDesc>} from a proposal distribution 𝑞(𝑥 𝑡 | 𝑥 0∶𝑡−1 , 𝑦 0∶𝑡 ), which when combined with a set of importance weights {𝑤 (1) 𝑡 , … , 𝑤 (𝑖) 𝑡 , … 𝑤 (𝑁 ) 𝑡 } lets us approximate each intermediary distribution.</figDesc></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Prism: a language for symbolic-statistical modeling</title>
		<author>
			<persName><forename type="first">T</forename><surname>Sato</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Kameya</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IJCAI</title>
				<imprint>
			<publisher>Citeseer</publisher>
			<date type="published" when="1997">1997</date>
			<biblScope unit="volume">97</biblScope>
			<biblScope unit="page" from="1330" to="1339" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Problog: A probabilistic prolog and its application in link discovery</title>
		<author>
			<persName><forename type="first">L</forename><surname>De Raedt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Kimmig</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Toivonen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IJCAI</title>
				<meeting><address><addrLine>Hyderabad</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="2462" to="2467" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Extending problog with continuous distributions</title>
		<author>
			<persName><forename type="first">B</forename><surname>Gutmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Jaeger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">De</forename><surname>Raedt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Inductive Logic Programming</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="76" to="91" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Inference in probabilistic logic programs with continuous random variables</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">A</forename><surname>Islam</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Ramakrishnan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Ramakrishnan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theory and Practice of Logic Programming</title>
		<imprint>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="page" from="505" to="523" />
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Probabilistic inference in hybrid domains by weighted model integration</title>
		<author>
			<persName><forename type="first">V</forename><surname>Belle</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Passerini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Van Den Broeck</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Twenty-Fourth International Joint Conference on Artificial Intelligence</title>
				<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">The magic of logical inference in probabilistic programming</title>
		<author>
			<persName><forename type="first">B</forename><surname>Gutmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Thon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Kimmig</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Bruynooghe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">De</forename><surname>Raedt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theory and Practice of Logic Programming</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="page" from="663" to="680" />
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A small embedding of logic programming with a simple complete search</title>
		<author>
			<persName><forename type="first">J</forename><surname>Hemann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">P</forename><surname>Friedman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">E</forename><surname>Byrd</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Might</surname></persName>
		</author>
		<idno type="DOI">10.1145/2989225.2989230</idno>
		<ptr target="https://doi.org/10.1145/2989225.2989230.doi:10.1145/2989225.2989230" />
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 12th Symposium on Dynamic Languages, DLS 2016</title>
				<meeting>the 12th Symposium on Dynamic Languages, DLS 2016</meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="96" to="107" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">The Reasoned Schemer</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">P</forename><surname>Friedman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">E</forename><surname>Byrd</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Kiselyov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hemann</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2018">2018</date>
			<publisher>MIT Press</publisher>
		</imprint>
	</monogr>
	<note>2nd ed</note>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Backtracking, interleaving, and terminating monad transformers: (functional pearl)</title>
		<author>
			<persName><forename type="first">O</forename><surname>Kiselyov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>-C. Shan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">P</forename><surname>Friedman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Sabry</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM SIGPLAN Notices</title>
		<imprint>
			<biblScope unit="volume">40</biblScope>
			<biblScope unit="page" from="192" to="203" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Certified semantics for minikanren</title>
		<author>
			<persName><forename type="first">D</forename><surname>Rozplokhas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Vyatkin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Boulytchev</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2019 miniKanren and Relational Programming Workshop</title>
				<meeting>the 2019 miniKanren and Relational Programming Workshop</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
			<biblScope unit="page" from="80" to="98" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Semantics for probabilistic programming: Higher-order functions, continuous distributions, and soft constraints</title>
		<author>
			<persName><forename type="first">S</forename><surname>Staton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Yang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Wood</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Heunen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Kammar</surname></persName>
		</author>
		<idno type="DOI">10.1145/2933575.2935313</idno>
		<idno>doi:10.1145/2933575.2935313</idno>
		<ptr target="https://doi.org/10.1145/2933575.2935313" />
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 31st Annual ACM/IEEE Symposium on Logic in Computer Science</title>
				<meeting>the 31st Annual ACM/IEEE Symposium on Logic in Computer Science<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="525" to="534" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">A new approach to probabilistic programming inference</title>
		<author>
			<persName><forename type="first">F</forename><surname>Wood</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">W</forename><surname>Meent</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Mansinghka</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Artificial Intelligence and Statistics</title>
				<meeting><address><addrLine>PMLR</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="1024" to="1032" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">An introduction to probabilistic programming</title>
		<author>
			<persName><forename type="first">J</forename><surname>Van De Meent</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Yang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Wood</surname></persName>
		</author>
		<idno>CoRR abs/1809.10756</idno>
		<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<author>
			<persName><forename type="first">N</forename><surname>Chopin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Papaspiliopoulos</surname></persName>
		</author>
		<title level="m">An Introduction to Sequential Monte Carlo</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2020">2020</date>
			<biblScope unit="volume">4</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Comparison of resampling schemes for particle filtering</title>
		<author>
			<persName><forename type="first">R</forename><surname>Douc</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Cappé</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 4th International Symposium on Image and Signal Processing and Analysis</title>
				<meeting>the 4th International Symposium on Image and Signal Processing and Analysis</meeting>
		<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2005">2005. 2005</date>
			<biblScope unit="page" from="64" to="69" />
		</imprint>
	</monogr>
	<note>ISPA 2005</note>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Asynchronous anytime sequential monte carlo</title>
		<author>
			<persName><forename type="first">B</forename><surname>Paige</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><forename type="middle">D</forename><surname>Wood</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Doucet</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><forename type="middle">W</forename><surname>Teh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Advances in Neural Information Processing Systems</title>
				<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="3410" to="3418" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
