I wonder if instead of
{begin bc(goal(G),dg(goal(G)))} ... {end}
it wouldn't make more sense to be
{begin bc(dg(goal(G)))} ... {end}
or
{begin bc(goal(G),dg)} ... {end}
{begin bc(dg,goal(G))} ... {end}