ETAPS 2014 Tutorials
Tutorial I - Tuesday, April 8
Andrew D. Gordon ( (Microsoft Research and University of Edinburgh, UK)
Probabilistic Programming: what the Practical Programmer needs to know!
http://research.microsoft.com/fun
Abstract: Probabilistic programming is a declarative form of machine learning: the user writes a probabilistic model of their data as a short piece of code, while the compiler turns the code into an efficient inference routine to learn and predict properties of the data. A remarkably wide range of machine learning tasks - regression, classification, ranking, recommendation, and so on - can all be expressed as probabilistic programs. The hope of the field is that practical programmers without PhDs in machine learning can get to grips with probabilistic models by writing and running pieces of probabilistic code. The purpose of this tutorial is to introduce the area from first principles, and show how to develop a series of models of data from scratch. Running examples are all based on the Tabular system from Microsoft Research. No previous experience with machine learning or probabilistic models is assumed. Come to this tutorial to understand how many machine learning problems can be coded as probabilistic functional programs.
Tutorial II - Thursday, April 10
Bernd Finkbeiner (Saarland University, Germany)
Synthesizing reactive components and systems
Abstract: The goal of synthesis is to automatically generate correct implementations from specifications. This challenge, originally formulated by Alonzo Church more than 50 years ago, has lead to celebrated results in automata and game theory and, especially in the last five to ten years, to the development of practical algorithms and tools for the efficient synthesis of hardware circuits, protocols, and even software. In the tutorial, I will trace this remarkable progress and then focus on the challenges and open questions that remain today. A key difference between synthesis and verification is that synthesis must deal with incomplete information: reactive components only observe the part of their environment that is visible at their interface. In a distributed system, different components have incomparable knowledge about the global system state. This phenomenon makes synthesis expensive and, for distributed systems, in general undecidable. Dealing with incomplete information efficiently requires new solutions in specification languages, abstraction techniques, and synthesis algorithms.