add join-optional, remove select-transitive (replaced by dfs fn)