ruleset family{ } /* * Rule: parent(C,M) <= parents(C,M,D). */ rule parent1 { when { ?p : family.parents(?C: p1; ?M: p2; ?D: p3); } then { insert family.parent() { p1=?C; p2=?M; } } }; /* * parent(C,D) <= parents(C,M,D). */ rule parent2 { when { ?p: family.parents(?C: p1; ?M: p2; ?D: p3); } then { insert family.parent() { p1=?C; p2=?D; }; } }; /* * sibling(X,Y) <= parents(X,M,D) and parents(Y,M,D). */ rule sibling { when { ?ps1: family.parents(?X: p1; ?M: p2; ?D: p3); ?ps2: family.parents(?Y: p1; p2 == ?M; p3 == ?D; ?X != ?Y); } then { insert family.sibling() { p1=?X; p2=?Y; }; } }; /* * aORuDirect(C, A) <= parent(C,P) and sibling(P,A). */ rule aORuDirect { when { ?p: family.parent(?C: p1; ?P: p2); ?s: family.sibling(p1 == ?P; ?A: p2); } then { insert family.aORuDirect() { p1=?C; p2=?A; }; } }; /* * aORuMarr(C, A) <= aORuDirect(C,X) and married(X,A). */ rule aORuMarriage1 { when { ?ord: family.aORuDirect(?C: p1; ?X: p2); ?m: family.married(p1 == ?X; ?A: p2); } then { insert family.aORuMarriage() { p1=?C; p2=?A; }; } }; /* * aORuMarr(C, A) <= aORuDirect(C,X) and married(A,X). */ rule aORuMarriage2 { when { ?ord: family.aORuDirect(?C: p1; ?X: p2); m: family.married(?A: p1; p2 == ?X); } then { insert family.aORuMarriage() { p1=?C; p2=?A; }; } }; /* * aORu(C,A) <= aORuDirect(C,A). */ rule aORu1 { when { ?ao1: family.aORuDirect(?C: p1; ?A: p2); } then { insert family.aORu() { p1=?C; p2=?A; }; } }; /* * aORu(C,A) <= aORuMarr(C,A). */ rule aORu2 { when { ?ao2: family.aORuMarriage(?C: p1; ?A: p2); } then { insert family.aORu() {p1=?C; p2=?A; }; } };