for constructing well-behaved applications and for reasoning about their behavior and