Programming languages used for probabilistic programming are referred to as "Probabilistic programming languages" (PPLs).
== Applications ==
Probabilistic reasoning has been used for a wide variety of tasks such as predicting stock prices, recommending movies, diagnosing computers, detecting cyber intrusions and image detection.<ref name="kurzweilai">{{cite news|url = http://www.kurzweilai.net/short-probabilistic-programming-machine-learning-code-replaces-complex-programs-for-computer-vision-tasks|title = Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks|last = |first = |date = April 13, 2015|work = KurzweilAI|access-date = 27 Nov 2017|via = }}</ref> However, until recently (partially due to limited computing power), probabilistic programming was limited in scope, and most inference algorithms had to be written manually for each task. ▼
Nevertheless, in 2015, a 50-line probabilistic [[computer vision]] program was used to generate 3D models of human faces based on 2D images of those faces. The program used inverse graphics as the basis of its inference method, and was built using the Picture package in [[Julia (programming language)|Julia]].<ref name="kurzweilai"/> This made possible "in 50 lines of code what used to take thousands".<ref>{{cite web |url=https://news.mit.edu/2015/better-probabilistic-programming-0413 |title=Graphics in reverse |first=Larry |last=Hardesty |date=April 13, 2015}}</ref><ref>{{cite web|url=https://www.theregister.co.uk/2015/04/14/mit_shows_off_machinelearning_script_to_make_creepy_heads/|title=MIT shows off machine-learning script to make CREEPY HEADS|publisher=}}</ref>
More recent work using the Gen programming system (also written in Julia) has applied probabilistic programming to a wide variety of tasks.<ref>{{Cite web|url=https://venturebeat.com/2019/06/27/mits-gen-programming-system-allows-users-to-easily-create-computer-vision-statistical-ai-and-robotics-programs/|title=MIT's Gen programming system flattens the learning curve for AI projects|date=2019-06-27|website=VentureBeat|language=en-US|access-date=2019-06-27}}</ref>
Probabilistic programming has also been combined with [[differentiable programming]] using the Julia package Zygote.jl, allowing it to be applied to additional tasks in which parts of the model need to be [[Differentiation (mathematics)|differentiated]].<ref name="diffprog-zygote">{{Citation|date=2019|title=∂P: A Differentiable Programming System to Bridge Machine Learning and Scientific Computing|arxiv=1907.07587}}</ref> The use of differentiable programming can also allow for the easier implementation of [[gradient]] based [[Markov chain Monte Carlo|MCMC]] inference methods such as [[Hamiltonian Monte Carlo|HMC]].
== Probabilistic programming languages ==
PPLs consists of two parts: a frontend ___domain specific language for specifying probabilistic models, and a backend inference engine implementing common inference algorithms. Specifically, the frontend implementations often extend from a basic language. The choice of underlying basic language depends on the similarity of the model to the basic language's [[Ontology (information science)|ontology]], as well as commercial considerations and personal preference. For instance, Dimple<ref name="DMPL"/> and Chimple<ref name="CHMPL"/> are based on [[Java (programming language)|Java]], [[Infer.NET]] is based on [[.NET framework|.NET]],<ref name="INFET"/> while PRISM extends from [[Prolog]].<ref name="PRISM"/> However, some PPLs such as [[WinBUGS]] and [[Stan (software)|Stan]] offer a self-contained language, with no obvious origin in another language.<ref name="BUGS"/><ref name="Stan"/> The choice of backend inference algorithms can often be categorised into gradient-based inference (e.g. Hamiltonian Monte Carlo), simulation-based inference (e.g. Approximate Bayesian Computation, Sequential Monte Carlo), and graph-based inference (e.g. Gibbs sampling in [[WinBUGS]], Message Passing).
Several PPLs are in active development, including some in beta test.
=== Relational ===
A '''probabilistic relational programming language''' (PRPL) is a PPL specially designed to describe and infer with [[probabilistic relational model]]s (PRMs).
A PRM is usually developed with a set of algorithms for reducing, inference about and discovery of concerned distributions, which are embedded into the corresponding PRPL.
=== List of probabilistic programming languages ===
{{Overly detailed|date=October 2019}}
| WebPPL<ref name="WebPPL"/>||JavaScript||JavaScript
|-
▲Probabilistic| reasoning has been used for a wide variety of tasks such as predicting stock prices, recommending movies, diagnosing computers, detecting cyber intrusions and image detection.Picture<ref name="kurzweilai">{{cite news|url = http://www.kurzweilai.net/short-probabilistic-programming-machine-learning-code-replaces-complex-programs-for-computer-vision-tasks|title = Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks|last = |first = |date = April 13, 2015|work = KurzweilAI|access-date = 27 Nov 2017|via = }}</ref> However, until recently (partially due to limited computing power), probabilistic programming was limited in scope, and most inference algorithms had to be written manually for each task.
| Picture<ref name="kurzweilai"/>
| Julia
| Julia
|