My execution model is pretty simplistic.  It basically does forward chaining (not backtracking which is what a real Prolog interpreter would do).  The reason is that we have the core set of true terms up front, and we can just run the rules to derive more and more terms until we hit the solution, and because of the way the rules are written, we (hopefully!) won&#x27;t get a combinatorial explosion of terms.<p>This naive execution model is described here:<p><a href="https:&#x2F;&#x2F;github.com&#x2F;rwmjones&#x2F;libguestfs&#x2F;blob&#x2F;inspection-expert-system&#x2F;inspection&#x2F;guestfs-inspection.pod" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;rwmjones&#x2F;libguestfs&#x2F;blob&#x2F;inspection-exper...</a><p>under the section &quot;Program evaluation&quot;.