Tutorials


September 29-30

Éric Tanter

Éric Tanter

University of Chile, Chile

Gradual Typing


Abstract

Gradual typing enables the smooth integration of static and dynamic typechecking. In this tutorial, we will review the core concepts of gradual typing, informed by a formal framework to derive the semantics of a gradually-typed language from a statically-typed counterpart. We will then discuss some applications of gradual typing to challenging typing disciplines.


Jurriaan Hage

Jurriaan Hage

Heriot-Watt University, Edinburgh, UK

Type-based Static Analysis of Functional Languages


Abstract

Static type systems are an excellent light-weight tool to improve code quality. Every compile your program is checked so that interfaces between parts of your system are verified to be correct, and depending on how strong the type system is, many important invariants are verified quickly and soundly. In this tutorial I shall discuss how to set up a static type system for a functional language and we shall be looking at Damas-Milner’s algorithm W for performing the inference. We shall then look at how you can implement a static analysis on top of a a type system, taking advantage of the underlying type system’s implementation. No knowledge of functional programming is assumed, but it can be helpful.


TxPipe

TxPipe

TxPipe

Development of dApps in the UTxO model


TBA

Marco T. Morazán

Seton Hall University, South Orange, USA

Programming-Based Automata Theory


Abstract

Formal Languages and Automata Theory (FLAT) courses present challenges for both the students and the instructors. Many students dislike such a course given the mathematical and theoretical nature of the topics as well as the formal notation used. In many cases, this leads to apathy among Computer Science students that enjoy and prefer programming courses. In turn, this presents a problem for instructors that frequently struggle to motivate their students to master the material. To address poor motivation and apathy, many FLAT instructors turn to constructivism to formulate classroom strategies and pedagogic tools. Constructivism is a theory of learning that postulates that knowledge is not passively absorbed through lectures and textbooks and, instead, knowledge is actively constructed by students engaged in building activities such as designing and implementing programs. A modern trend in FLAT education adopts a programming-based methodology to deliver FLAT courses. This tutorial illustrates how to deliver a programming-based course using FSM (Functional State Machines). FSM is a domain-specific language embedded in Racket that provides the programmer with the ability to design, implement, test, and verify state-based machines, grammars, regular expressions, and associated algorithms typically developed as part of the constructive proofs students are exposed to in a FLAT course. FSM is tightly coupled with a powerful suite of visualization tools and the textbook, Programming-Based Formal Languages and Automata Theory, that presents design recipes for the implementation of machines, grammars, and regular expressions. The tutorial focuses on how FSM may be used in the FLAT classroom without sacrificing content or rigor.
To fully participate in hands-on exercises participants ought to install on their machines, prior to the tutorial, the following software: