This lecture provides an in-depth exploration of Hoare Logic, a formal system for reasoning about the correctness of computer programs. It begins with a review of different semantics, including operational, denotational, and axiomatic semantics, emphasizing the role of assertions in defining program properties. The instructor discusses the historical context of Hoare Logic, highlighting its development by pioneers such as Floyd and Dijkstra. The lecture covers the definition of partial and total correctness, illustrating these concepts with examples and quizzes. The instructor explains the significance of preconditions and postconditions in program specifications, demonstrating how to establish validity through proof rules. The lecture also introduces the syntax and rules of Hoare Logic, including rules for assignment, sequencing, conditionals, and loops. The soundness and completeness of the logic are discussed, along with its applications in program verification and reasoning about imperative programs. The session concludes with a discussion on the limitations of Hoare Logic and the emergence of separation logic as a more modular approach to reasoning about program correctness.