This document presents a tutorial on program verification and synthesis using constraint solving and machine learning, highlighting the importance of reliability in safety-critical systems. It discusses methodologies for both proving program correctness and synthesizing programs from specifications, focusing on constrained horn clauses and predicate constraint satisfaction. Ongoing research includes exploiting AI techniques for formal specification, program synthesis, and verification techniques relevant to the era of AI.