https://studiegids.vu.nl/en/courses/2024-2025/X_401011The objective of the course Equational Programming is to obtain a basic understanding of the foundations of functional programming via lambda calculus and equational reasoning and to acquire basic functional programming skills. For lambda calculus, at the end of the course, the student will: Knowledge and understanding:know alpha-conversion, lambda terms, beta-reduction, reduction sequences, reduction graphs,know fixed points,know weak and strong normalization and confluence,know several reduction strategies,know the encoding of several data types,know simple types and be familiar with its typing system;Applying knowledge and understanding:be able to give reduction sequences and reduction graphs,be able to reason about fixed points,be able to reason about weak and strong normalization and uniqueness of normal forms,be able to apply a reduction strategy,be able to encode elementary data types and recursive functions,be able to give elementary typing derivations;Making judgements:be able to analyze reduction graphs,be able to reason about encodings.For the equational specification part, at the end of the course, the student will Knowledge and understanding:know equational specifications,know algebras, models, initial models,know the notions of syntactic derivability and semantic consequence, know Birkhoff's theorem,know the notion of initial specification,know homomorphisms and isomorphisms between Sigma-algebras;Applying knowledge and understanding:be able to give a derivation,be able to define an (initial) specification,be able to give an (initial) model,be able to give or show non-existence of an isomorphism;Making judgements:be able to analyze with respect to being a model, containing junk or confusion, being an initial modelbe able to reflect on specifications and their relation with functional programs;Communication:be able to write proofs and derivations;For the functional programming part, at the end of the course, the student will Knowledge and understanding:be familiar with the basics of the functional programming language Haskell: pattern matching, recursive functions, algebraic data types, and the basics of monads;Applying knowledge and understanding:be able to write small Haskell programs with pattern matching, and recursion,be able to deal with partial functions using monads.Learning skills: have acquired flexibility in using the functional style of programming.In the practical work, we use the functional programming language Haskell. We practice with the basics such as lists, recursion, data-types, and a bit of monads. The theoretical part is concerned with the foundations of functional programming in the form of lambda calculus and equational specifications. We study untyped lambda calculus reduction theory and expressive power: beta reduction, reduction strategies, confluence, encoding of data types, fixed-point combinators, and recursive functions. In addition, we study the lambda-calculus with simple types, its typing system and a type inference algorithm, and possibly strong normalization of simply-typed lambda-calculus. In the equational specifications part, we study the syntax and semantics of equational systems, and we work towards the results that all initial models are equal up to isomorphism and that the term model is an initial model.We have two on campus lectures per week for the duration of seven weeks. Twelve lectures discuss material and two lectures are meant for questions and wrap-up. We have one on campus exercise class per week for the duration of seven weeks. The lectures are concerned with the theoretical part, so lambda calculus and equational specifications. In addition, we have one online Q&A afternoon per week for the functional programming part, for the duration of six weeks.There are three obligatory programming assignments with grade pass/fail. All three must be pass in order to pass the course.A fail grade for an assignment can during the course be improved to a pass grade using the feedback. After the course, there is only a resit possibility for the programming part for those students who already actively participated (as in: handed in all assignments) and have a pass grade for the exam, in consultation with the teacher.There is a written closed book midterm exam in week 4 of the course about the lambda calculus part that counts for 45%.There is a written closed book final exam in week 8 of the course about the equational specifications part and a bit of functional programming that counts for 55%.Both parts should have grade at least 5.0 in order to pass the course.In addition, the calculated final grade must be at least 5.5 to pass the course.The resit is either about one of the two parts, or about both parts.Course notes, slides, and exercise sheets provided via Canvas. We further refer to various online material about Haskell for example the Haskell wiki.Bachelor Econometrics and Operations Research (year 3)Minor Applied MathematicsMinor Deep ProgrammingFor the theoretical part, some familiarity with formal reasoning is recommended (as for example taught in the course Logic and Modelling).We use Canvas for the schedule of the course, and to make available the course notes and the slides for the lectures, the exercises for the exercise classes, and the programming assignments.We use Canvas further to provide feedback to the obligatory programming assignments, and to the non-obligatory homework assignments, to give the grade for the midterm, and for announcements.