Parsed program: parent(abraham,ishmael). parent(abraham,isaac). parent(isaac,esau). parent(isaac,jacob). grandparent(X,Y) :- parent(X,Z),parent(Z,Y). descendant(X,Y) :- parent(Y,X). descendant(X,Y) :- parent(Z,X),descendant(Z,Y). Parsed query: grandparent(X,Y). Entering BC Current goal: grandparent(X,Y). Additional goals: 0 Unified goal grandparent(X,Y). and clause grandparent(X1,Y1) :- parent(X1,Z1),parent(Z1,Y1). Substitution: 'X1' 'X' 'Y1' 'Y' Entering BC Current goal: parent(X,Z1). Additional goals: 1 Unified goal parent(X,Z1). and clause parent(abraham,ishmael). Substitution: 'X' 'abraham' 'Z1' 'ishmael' Entering BC Current goal: parent(ishmael,Y). Additional goals: 0 Exiting BC Unified goal parent(X,Z1). and clause parent(abraham,isaac). Substitution: 'X' 'abraham' 'Z1' 'isaac' Entering BC Current goal: parent(isaac,Y). Additional goals: 0 Unified goal parent(isaac,Y). and clause parent(isaac,esau). Substitution: 'Y' 'esau' Entering BC Found answer 'X1' 'X' 'Y1' 'Y' 'X' 'abraham' 'Z1' 'isaac' 'Y' 'esau' Unified goal parent(isaac,Y). and clause parent(isaac,jacob). Substitution: 'Y' 'jacob' Entering BC Found answer 'X1' 'X' 'Y1' 'Y' 'X' 'abraham' 'Z1' 'isaac' 'Y' 'jacob' Exiting BC Unified goal parent(X,Z1). and clause parent(isaac,esau). Substitution: 'X' 'isaac' 'Z1' 'esau' Entering BC Current goal: parent(esau,Y). Additional goals: 0 Exiting BC Unified goal parent(X,Z1). and clause parent(isaac,jacob). Substitution: 'X' 'isaac' 'Z1' 'jacob' Entering BC Current goal: parent(jacob,Y). Additional goals: 0 Exiting BC Exiting BC Exiting BC Query: grandparent(X,Y). Yes answer = 'X' 'abraham' 'Y' 'esau' answer = 'X' 'abraham' 'Y' 'jacob'