
| α causes β,   | α causes β0,   | β2 causes γ,   | β1 causes γ,   |
|---------------|----------------|----------------|----------------|
| β3 causes ǫ,  | γ1 causes δ,   | γ3 causes δ,   | ǫ3 causes γ3;  |
| β →IS−A β2,   | β1 →IS−A β,    | β3 →IS−A β0,   | β3 →IS−A β1,   |
| γ1 →IS−A γ,   | γ2 →IS−A γ,    | γ2 →IS−A γ3,   | γ2 →IS−A ǫ,    |
| ǫ1 →IS−A ǫ,   | ǫ2 →IS−A ǫ,    | ǫ1 →IS−A ǫ3,   | ǫ2 →IS−A ǫ3.   |

This example shows various different "explaining paths" from a few given causal and ontological atoms. Here there is a first "explaining path" from α to δ

![0_image_0.png](0_image_0.png)

(Figure 1, see also path (1a**) on Figure 2). We get successively:**α explains β2 bec *poss* {α},
α explains γ1 bec *poss* {α, γ1}**, and** α explains δ bec *poss* {**α, γ**1}.

As another "explaining path", we get: α explains β1 bec *poss* {**α, β**1}
α explains γ1 bec *poss* {α, β1, γ1}**, and** α explains δ bec *poss* {α, β1, γ1}.

This second path is clearly not "optimal" since {α, γ1} **is strictly included**
in {α, β1, γ1}**. The simplifying rule produces** α explains δ bec *poss* {α, γ1} **from** α explains δ bec *poss* {α, β1, γ1} **but, from a computational point of view, it is**
better not to generate the second path at all.

Here there are the four "optimal" explanation atoms from α to δ **(see Figure 2**
for the precise paths):
(1a) α explains δ bec *poss* {**α, γ**1} (1b) α explains δ bec *poss* {**α, γ**2} (2a) α explains δ bec *poss* {α, β3, ǫ1} (2b) α explains δ bec *poss* {α, β3, ǫ2}.

We have implemented a program in DLV [LPF+**06] (an implementation of**
the Answer Set Programming (known as ASP) formalism [Bar03]) that **takes**
only a few seconds to give all the results σ1 explains σ2 bec *poss* **Φ, for all**
examples of this kind, including as here when different explanation paths exist
(less than one second for the theory depicted in Figures 1 and 2). See [Moi07]