(deffacts data (vector a b c d e f g) ) (defrule init (not (inverse $?)) => (assert (inverse)) ) (defrule inverse ?idx <- (vector ?x $?rest) ?idxi <- (inverse $?inv) => (retract ?idx ?idxi) (assert (vector $?rest) (inverse ?x $?inv)) ) (defrule final ?a <- (vector) ?b <- (inverse $?ceva) => (retract ?a ?b) (assert (vector $?ceva)) (halt) )