Davies-Putnam algorithm