{"id":16315606,"url":"https://github.com/andreasabel/proposal-agda-tutorial","last_synced_at":"2026-02-09T08:34:19.717Z","repository":{"id":74481583,"uuid":"152739104","full_name":"andreasabel/proposal-agda-tutorial","owner":"andreasabel","description":"Proposal for an Agda tutorial","archived":false,"fork":false,"pushed_at":"2018-10-15T17:09:13.000Z","size":18,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-12-25T08:45:01.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreasabel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-12T11:12:32.000Z","updated_at":"2021-03-05T12:08:13.000Z","dependencies_parsed_at":"2023-03-13T20:17:16.411Z","dependency_job_id":null,"html_url":"https://github.com/andreasabel/proposal-agda-tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasabel%2Fproposal-agda-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasabel%2Fproposal-agda-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasabel%2Fproposal-agda-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasabel%2Fproposal-agda-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreasabel","download_url":"https://codeload.github.com/andreasabel/proposal-agda-tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239171812,"owners_count":19594045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T21:57:58.803Z","updated_at":"2026-02-09T08:34:14.683Z","avatar_url":"https://github.com/andreasabel.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Correct-by-construction programming in Agda\n\nProposal for an Agda tutorial at POPL 2019\n\n## Presenters\n\n- Andreas Abel, Gothenburg University, andreas.abel@gu.se\n- Jesper Cockx, Gothenburg University, jesper.cockx@gu.se\n\n## Description\n\n### Objectives\n\nThe objective of this tutorial is to learn how to implement a\ncorrect-by-construction typechecker and interpreter in the dependently\ntyped programming language Agda. In the process, we will touch upon\nseveral modern features of the Agda language, such as do-notation,\ncopattern matching, instance arguments, sized types, and the Haskell\nFFI.\n\nIn this tutorial we focus on practical programming using dependent\ntypes, so we avoid writing separate proofs of programs whenever possible. Instead, we\nuse indexed datatypes with strong invariants and dependent pattern matching to assign\ntypes to the program that guarantee the properties we care about.\n\n### Topics\n\n- Agda basics (dependent types, pattern matching, parametrized modules, standard library)\n- Representing intrinsically typed syntax in Agda\n- Monads and do-notation\n- Instance arguments and type classes\n- Copatterns\n- Coinduction using sized types\n- Foreign function interface to Haskell\n\n### Presentation approach\n\nThe tutorial consists of lectures and supervised exercises.\n\nIn the lecture, we will present the necessary concepts by illustrative\nexamples, doing live interactive programming in Agda.\n\nIn the exercises, the attendees will be able to practice interactive\nprogramming in Agda, given a program stub with holes that can be\nfilled with some guidance by the Agda interactive programming system.\nThere will be teaching assistants roaming around the tutorial room to \nhelp the attendees with the programming exercises.\n\n### Target audience\n\n- PhD students\n- Researchers\n- Teachers\n- Professionals\n\n### Prerequisite knowledge\n\n- Excellent knowledge of strongly-typed functional programming\n  (e.g. Haskell, ML, OCaml, Scala, ...)\n- Some familiarity with monads and indexed data types (GADTs) is recommended\n- Basic aquaintance with emacs is beneficial\n\n### Previous iterations\n\nThis tutorial will be held at POPL 2019 for the first time (if accepted).\n\n## Publicity abstract\n\nIn a dependently typed programming language you can get much stronger\nstatic guarantees about the correctness of your program than in most\nother languages. At the same time, dependent types enable new forms of\n*interactive programming*, by letting the types guide the construction\nof the program. Dependently typed languages have existed for many\nyears, but only recently have they become usable for practical\nprogramming.\n\nIn this tutorial, you will learn how to write correct-by-construction\nprograms in the dependently typed programming language\nAgda. Concretely, we will together implement a verified typechecker\nand interpreter for a small C-like imperative language. Along the way,\nWe will explore several modern features of the Agda language that make\nthis task more pleasant, such as dependent pattern matching, monads\nand do-notation, coinduction and copattern matching, instance\narguments, sized types, and the Haskell FFI.\n\n## Biography\n\n### Andreas Abel\n\nAndreas is a senior lecturer at Gothenburg University and researcher\nin dependent type theory.  He obtained PhD (2006) and habilitation (2013)\nfrom the University of Munich.  He has contributing to the development of Agda\nsince 2004; his contributions include the termination checker, sized types,\nproof irrelevance, copatterns, and many bug fixes and user experience\nimprovements.\n\n### Jesper Cockx\n\nJesper (PhD 2017) is a postdoctoral researcher at the Programming Logic group in\nGöteborg and has been working on the Agda language ever since he got\nhis hands on it during his Master's in 2013.  He contributed the present \nform of dependent (co)pattern matching compatible with Homotopy Type Theory,\na propositional universe hierarchy, and many bug fixes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasabel%2Fproposal-agda-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreasabel%2Fproposal-agda-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasabel%2Fproposal-agda-tutorial/lists"}