First-Order Dynamic Logic by David Harel