|context> => |context: prolog example> mother |sally> => |trude> child |trude> = > |sally> father |sally> => |tom> child |tom> => |sally> father |erica> => |tom> child |tom> +=> |erica> father |tom> => |mike> child |mike> => |tom> parent |*> #=> mother |_self> + father |_self> sibling |*> #=> child parent |_self> sibling-clean |*> #=> drop (child parent |_self> + -|_self>) exit sw http://en.wikipedia.org/wiki/Prolog Has this prolog, lets convert it to BKO. mother_child(trude, sally). father_child(tom, sally). father_child(tom, erica). father_child(mike, tom). sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). parent_child(X, Y) :- father_child(X, Y). parent_child(X, Y) :- mother_child(X, Y). This results in the following query being evaluated as true: ?- sibling(sally, erica). Yes