name(s) of variable(s).descendants(x,v) retrieves variables that are are reachable from v via
a directed path.
ancestors(x,v) retrieves variables from which v is reachable via a
directed path.
children(x,v) finds all variables w connected to v
by an edge $v$ -> $w$.
parents(x,v) finds all variables w connected to v
by an edge $w$ -> $v$.
markovBlanket(x,v) returns x's parents, its children, and all other
parents of its children. The Markov blanket always renders x independent
of all other nodes in the graph.
By convention, descendants(x,v) and ancestors(x,v) include
v but children(x,v) and parents(x,v) do not.