Introduzione


Del Prolog, linguaggio di programmazione logica che fino al 1980 era considerato il linguaggio dell'IA creato in Europa e in competizione con il LISP, oggi si parla poco, poco si insegna ed è difficile che chi programma per mestiere lo incontri.
Tuttavia può ancora essere utile per risolvere in poche righe di codice un problema con vincoli, regole o deduzioni, quando con linguaggi di programmazione procedurali sarebbero necessari troppi `if` annidati.

Del Prolog esistono inoltre moderni sviluppi che lo ibridano con altri paradigmi:

In queste pagine ci interesseremo di quest'ultima evoluzione.
ProbLog nasce in Belgio alla Katholieke Universiteit Leuven nei primi anni 2000 aggiungendo fondamentalmente un fattore di probabilità a ogni fatto o regola della base di conoscenza in un programma Prolog. Come Prolog usa l'unificazione e il backtracking per trovare tutte le dimostrazioni di una query ma ogni dimostrazione ha una probabilità associata che ProbLog combina trattando i fatti come variabili booleane indipendenti e calcolando la probabilità che almeno una dimostrazione sia vera.
Infatti per ogni query, ProbLog trova tutte le possibili spiegazioni (proof trees); ogni spiegazione, ovvero una derivazione che parte dalla query e arriva fino ai fatti probabilistici e ai fatti deterministici, è una “storia” coerente del mondo in cui la query risulta vera, l'insieme di fatti probabilistici che devono essere veri affinché quella derivazione funzioni; la probabilità finale è la probabilità che almeno una di queste spiegazioni sia vera.

Per far girare un programma ProbLog potremmo utilizzare l'editor on line, ad esempio facendo un copia-incolla di quello proposto di seguito e, dopo aver selezionato uno dei modelli forniti, eseguirlo con Solve.

0.5::freddo. 0.3::umido. neve :- freddo, umido. query(neve).

Essendo scritto principalmente in Python, ad eccezione della fase di compilazione della conoscenza che è in C, si può importare ProbLog come pacchetto Python, la libreria problog.
Qui proponiamo l'uso di Python in ambiente Google Colab per eseguire codice ProbLog.

!pip install problog
Il semplicissimo esempio introduttivo sarà allora qui proposto nel modo seguente.
from problog import get_evaluatable prog = """ 0.5::freddo. 0.3::umido. neve :- freddo, umido. query(neve). """ get_evaluatable().create_from(prog).evaluate()
{neve: 0.15}

ProbLog viene dunque usato in problemi dove la conoscenza è incerta o rumorosa ma si vuole mantenere la struttura logica come:

Riferimenti sito/bibliografici