This document discusses improving type safety in programming languages. It presents examples of encoding natural numbers in μ-Java, handling potential errors from integer division, using invariant maps to prevent type errors, and abstracting control flow. The key ideas are growing language types to encode more domain details, preventing incorrect operations, and checking the "wiring" between functions through the type system.