This document discusses using relations and relational calculus to specify programs in a more natural way. It proposes enhancing data types with invariants to tame non-determinism and partiality in relational specifications. This allows inferring checkable domain and range predicates for relations to optimize execution. Bidirectional transformations are also specified relationally to maximize updatability.