This course introduces the mathematical foundations of computation through the study of automata theory and formal languages. It explores how abstract machines can model computational processes and provides the basis for understanding the limits of what computers can and cannot do. Key topics include finite automata, regular languages, context-free grammars, pushdown automata. Students learn to design and analyze automata, construct grammars for language recognition, and understand language classification and decidability. By the end of the course, students gain a strong theoretical background necessary for advanced studies in computer science, including complexity theory and computation models.