[Haskell-cafe] Lazy Probabilistic Programming System in Haskell

Olaf Klinke olf at aatal-apotheke.de
Sat Jul 17 19:29:43 UTC 2021


>> 
>> On 7/16/21 8:27 AM, Olaf Klinke wrote:
>> 
>>> Hi,
>>> 
>>> My program BAli-Phy implements probabilistic programming with models 
>>> written as Haskell programs.
>>> 
>>> http://www.bali-phy.org/models.php
>> 
>> Dear Benjamin, 
>> 
>> last time you announced BAli-Phy I pestered you with questions about
>> semantics. In the meantime there was a discussion [1] on this list
>> regarding desirable properties of probabilistic languages and monads in
>> general. A desirable property of any probabilistic language is that
>> when you define a distribution but map a constant function over it,
>> then this has the same computational cost as returning the constant
>> directly. Can you say anything about that? 
>> 
>> Cheers,
>> Olaf
>> 
>> [1] 
>> 
>https://mail.haskell.org/pipermail/haskell-cafe/2020-November/132905.html
>> 
>> 
>> 
>
>On Fri, 16 Jul 2021, Benjamin Redelings wrote:
>
> 
> Hi Olaf,
> 
> Are you asking if
>
> 	run $ (const y) <$> normal 0 1 
> 
> has the same cost as
>
> 	run $ return y
> 
> for some interpreter `run`?
> 
> Yes, the cost is the same.  In do-notation, we would have
>
> 	run $ do
> 		x <- normal 0 1
> 		return $ (const y x)
> 
> Since `const y` never forces `x`, no time is spent evaluating `run $ normal 0 1`.  That is basically
> what I mean by saying that the language is lazy.
> 
> -BenRI
>

Awesome! That is something you can not have with (random number-)state 
based implementations, as far as I know, because
x <- normal 0 1
at least splits the random number generator. Hence running the above ten 
thousand times even without evaluating the x does have a non-neglegible 
cost. So how did you implement the lazyness you described above? Do you 
have thunks just like in Haskell?

Last time I remarked that the online documentation contains no proper 
definition of the model language. Some examples with explanations of 
individual lines are not enough, IMHO. That appears not to have changed 
since the last release. So why don't you include a list of keywords and 
built-in functions and their meaning/semantics?

Regards,
Olaf


More information about the Haskell-Cafe mailing list