; Relatii de rudenie (deffacts rude ; (par ) (par Ion m Dana Dan) (par Maria f Dana Dan) (par Vasile m Dana Dan) (par Dan m Doina Gheorghe) (par Dana f Angela Ioan) (par Ioana f Doina Gheorghe) (par Ionel m Ileana Florin) (par Daniela f Angela Ioan) (par Marius m Daniela Dan) (par Victor m Ioana Ionel) (par Ana f Ioana Ionel) (faza1) ) ; Regulile frati-buni plaseaza in multimi 'frati' disjuncte toti fratii buni (defrule frati-buni1 (faza1) (par ?x ? ?m ?t) (par ?y&:(not (eq ?x ?y)) ? ?m ?t) ; (not (frati-buni ?x ?y)) (not (frati-buni ?y ?x)) => (assert (frati-buni ?x ?y)) ) (defrule frati-buni2 (declare (salience -10)) ?idx <- (faza1) => (retract ?idx) (assert (faza2)) ) (defrule frati-buni3 ?idx <- (faza2) ?idx1 <- (frati-buni ?x ?y) => (retract ?idx ?idx1) (assert (frati ?x ?y) (faza3)) ) (defrule frati-buni4 (faza3) ?idx1 <- (frati $?beg ?x ?end) ?idx2 <- (frati-buni ?x ?z) => (retract ?idx1 ?idx2) (assert (frati $?beg ?x $?end ?z)) ) (defrule frati-buni5 (faza3) ?idx1 <- (frati $?beg ?x ?end) ?idx2 <- (frati-buni ?z ?x) => (retract ?idx1 ?idx2) (assert (frati $?beg ?x $?end ?z)) ) (defrule frati-buni6 (declare (salience -10)) ?idx <- (faza3) => (retract ?idx) (assert (faza2)) ) (defrule frati-buni7 (declare (salience -10)) (faza2) ?idx <- (frati $?beg ?x $?med ?x $?end) => (retract ?idx) (assert (frati $?beg ?x $?med $?end)) )