Invited speakers at BCTCS in alphabetical order:

*(*LMS Keynote Speaker in Discrete Mathematics)*

Martin Abadi | Towards Correct Programming with Transactional Memory | 2008 |

Samson Abramsky | A Cooks Tour of the Finitary Non-Well-Founded Sets | 1988 |

Samson Abramsky | From Quantum Mechanics to Logic, Databases, Constraints, and Complexity | 2013 |

Samson Abramsky | Contextuality: At the Border of Paradox | 2015 |

Dimitris Achlioptas | Random Constraint Satisfaction Problems: from Physics to Algorithms | 2007 |

Peter Aczel | Formalising Abstract Algebra in Constructive Type Theory | 1996 |

Andrew Adamatzky | Liquid Computers | 2019 |

Susanne Albers^{*} |
Energy Efficient Algorithms | 2013 |

Noga Alon^{*} |
Combinatorial Reasoning in Information Theory | 2009 |

Steven Alpern | Search Games and Utilitarian Postman Paths on Networks | 2007 |

Martyn Amos | The Complexity and Viability of DNA Computation | 1997 |

Alberto Apostolico | Parallel Algorithms on Words | 1989 |

Malcolm Atkinson | The Capability of Priority Queues as Data Transformers | 1993 |

László Babai* | Graph Isomorphism | 2017 |

Roland Backhouse | Making Formalism Work for Us | 1989 |

Roland Backhouse | Games for Algorithmic Problem Solving | 2005 |

Jose Luis Balcazar | The Structural Approach to Complexity Theory | 1992 |

Henk Barendregt | Feasible Full Formalisation | 1991 |

Howard Barringer | The Future of Imperative Logic | 1990 |

Trevor Bench-Capon | Machines Can’t Think | 1997 |

Ulrich Berger | IFP – A Logic for Program Extraction | 2019 |

Richard Bird | Relational Program Derivation | 1994 |

Graham Birtwistle | Specifying and Verifying AMULET in CCS | 1996 |

Julian Bradfield | How user-friendly is independence-friendly logic? | 2007 |

Edwin Brady | State Machines All The Way Down | 2017 |

David Bree | The Semantics of Natural Language Temporal Prepositions and Conjunctions | 1994 |

Ed Brinksma | Formal Models for Testing: An Interaction between Theory and Practice | 1996 |

Hajo Broersma^{*} |
Toughness in Graphs: Structural and Algorithmic Aspects | 2006 |

Alan Bundy | Automatic Generation of Program Synthesis Proofs | 1991 |

Rod Burstall | Teaching Logic to Programmers | 1998 |

Michael J Butler | Verification Patterns for Refinement | 2016 |

Muffy Calder | A Day in the Life of a Spin Doctor | 2001 |

Luca Cardelli | Membrane Interactions | 2004 |

Simon Chadwick | Formal Verification – The Journey from Theory towards Practice | 2020 |

Maria Chudnovsky | Detecting Odd Holes | 2019 |

Agata Ciabattoni | Intermediate Logics: from Hypersequents to Parallel Computations | 2018 |

Richard Cole | A Promising Approach to Complexity Measures for Computation over Splay Trees | 1989 |

Robert Constable^{*} |
Implementing Elements of Intuitionistic Mathematics in Nuprl | 2020 |

Stephen Cook | A Tutorial on Proof Complexity | 2006 |

Robert Cori | Building Automata with Time Stamps | 1994 |

José Félix Costa | Physics and Computation: An Essay on the Unity of Science through Computability | 2008 |

Sharon Curtis | Functional Fractal Image Compression | 2004 |

Artur Czumai | Sublinear-time Algorithms | 2008 |

John Davenport | Is Computer Algebra the Same as Computer Symbolic Mathematics? | 1998 |

Neil Davies | Engineering with Randomness | 2002 |

Anuj Dawar | Complexity as Expressive Power | 2002 |

Jaco de Bakker | Metric Semantics | 1995 |

Erik Demaine | Algorithms Meet Art, Puzzles, and Magic | 2010 |

John Dixon | Computations in Galois Theory | 1989 |

Rod Downey^{*} |
Fundamentals of Parametrized Complexity | 2012 |

Paul Dunne | Introduction to Boolean Function Complexity | 1994 |

Paul Dunne | An Overview of Lower Bound Techniques in Monotone Boolean Function Complexity | 1997 |

Paul Dunne | Computational Problems (Some Directions but No Solutions) | 2000 |

Martin Dyer | Volume and Related Computational Problems | 1991 |

Abbas Edalat | Exact Real Number Computation Using Linear Fractional Transformations | 1998 |

Mike Edmunds | The Antikythera Mechanism and the Early History of Mechanical Computing | 2012 |

Edith Elkind | Hedonic diversity games | 2020 |

Javier Esparza | Model-Checking Pushdown Automata | 1997 |

Matthew Fairtlough | Abstraction, Constraints and the Lambda Calculus | 1997 |

Jose Fiadeiro | Software Architectures in 3D | 2004 |

Felix Fischer | Truthful Outcomes from Non-Truthful Position Auctions | 2017 |

Philippe Flajolet | Some Recent Trends in the Average-Case Analysis of Algorithms | 1990 |

Wan Fokkink | Within ARMs Reach: Compilation of Rewrite Systems | 1999 |

Leszek Gąsieniec | Distributed Maintenance of Mobile Entities | 2014 |

Ian Gent | Two Become One: Theory and Experiment | 1998 |

Alan Gibbons | Implementing P-RAM Algorithms on Distributed Memory Models of Parallel Pomputation | 1992 |

Alan Gibbons^{*} |
The Soft Machines: Computing with the Code of Life | 2005 |

Rob Gilles | Consent in Network Formation: Game Theoretic Solutions | 2016 |

Joseph Goguen | Object Oriented Programming as a Natural Extension of Functional Programming | 1989 |

Leslie Goldberg | Contention Resolution in Multiple-Access Channels | 1998 |

Paul Goldberg | Recent Progress in Computing Approximate Nash Equilibrium | 2009 |

Shafi Goldwasser | Zero Knowledge Interactive Proofs | 1990 |

Andrew Gordon | Samoa: Formal Tools for Securing Web Services | 2005 |

Andrew Gordon | Principles and Applications of Refinement Types | 2009 |

Mike Gordon | Event and Cycle Semantics of Hardware Description Languages | 1997 |

Georg Gottlob | Living with Computational Complexity | 2007 |

Timothy Gowers | Extreme Human-Oriented Theorem Proving | 2015 |

Yuri Gurevich | Evolving Algebras | 1992 |

Reiner Hähnle | Formal Verification of Software Product Families | 2012 |

Thomas Hales^{*} |
The Formal Proof of the Kpeler Conjecture | 2015 |

Magnús Halldórsson | “What problem should I solve?” and Efficiency in Wireless Networks | 2016 |

Keith Hanna | Reasoning about Digital Systems | 1996 |

Johan Håstad | Approximation Resistance | 2010 |

Anne Haxthausen | The RobustRailS Verification Method for Railway Interlocking Systems | 2020 |

Jan Heering | Algebraic Specifications and Proofs by Induction | 1995 |

Matthew Hennessy | Higher-Order Processes and Their Models | 1995 |

Matthew Hennessy | Behavioural Theories for Co-operating Transactions | 2016 |

Martin Henson | Varieties of Schema Calculus | 2008 |

Jane Hillston | Stochastic Process Algebra: Bringing Performance to Life (Tutorial) | 2009 |

Roger Hindley | The Coppo-Denzani Type System | 1989 |

Roger Hindley | Counting the Inhabitants of a Type | 1995 |

Ralf Hinze | Number Systems and Data Structures | 2005 |

Tony Hoare | Unifying theories of concurrency | 2006 |

Tony Hoare | Laws of Programming with Concurrency | 2015 |

Wilfred Hodges | The Logical Background to Specification | 1992 |

Martin Hofmann | Linear Types and Non-Size Increasing Polynomial Time Computation | 1999 |

Mike Holcombe | X-Machines – What Are They? | 1994 |

Furio Honsell | The Edinburgh LF – A Framework for Describing Logical Systems | 1988 |

John E. Hopcroft* | Research in Deep Learning | 2018 |

John Hughes | Naturality, Polymorphism and Compile-Time Analysis | 1991 |

Martin Hyland | Synthetic Domain Theory – The Story So Far | 1990 |

Rob Irving | Fifty Years of Stable Marriage | 2004 |

Mark Jerrum | The Computational Complexity of Counting | 1994 |

Mark Jerrum | A Tutorial on Efficient Sampling | 2006 |

David S. Johnson^{*} |
Bin Packing: From Theory to Experiment and Back Again | 2011 |

Cliff Jones | Interference Resumed | 1991 |

Cliff Jones | AI4FM – How To Say “Why” In Proofs | 2011 |

Richard Jozsa | Quantum Computation – Principles and Achievements | 2007 |

Richard Jozsa | Clifford operations and the verification of quantum computations | 2019 |

Achim Jung | Probabilities in Semantics – Some Progress, Some Open Problems | 2003 |

Achim Jung | A modal Belnap logic | 2014 |

Gil Kalai^{*} |
Analysis and Probability of Boolean Functions | 2010 |

Bruce Kapron | Gambling, Computational Information, and Encryption Security | 2016 |

Vivian Kendon | Continuous-time quantum computing | 2019 |

Valerie King * | Tossing a Collective Coin and Coming to Agreement | 2016 |

Timo Kötzing | Recent Advances in Inductive Inference | 2014 |

Demetres Kouvatsos | An Extended Analytic Methodology for Arbitrary Queueing Networks | 2002 |

Daniel Kroening | SAT over an Abstract Domain | 2012 |

Andrei Krokhin | The Complexity of General-Valued CSPs | 2015 |

Marta Kwiatkowska | Safety Verification for Deep Neural Networks | 2018 |

Kim Larsen | Verifying LEGO: Validation and Synthesis of Embedded Software | 2010 |

Bill Lawvere | The Boolean Algebra Classifying Topos and the Complexity of Finite Automata | 2003 |

Chris Lengauer | Systolic Design and Systolising Compilation | 1990 |

Leonid Libkin | Databases Meet Verification; or Nested Words and XML Documents | 2008 |

John Lloyd | Current Theoretical Issues in Logic Programming | 1989 |

John Lloyd | Declarative Logic Programming | 1993 |

Bas Luttik | Supporting Railway Infrastructure Managers with Formal Models and Analyses | 2020 |

Bill McColl | BSP Computing | 1999 |

Angus MacIntyre | Connections between Model Theory and Volume Estimates | 1998 |

Assia Mahboubl | Computer-checked Mathematics | 2013 |

Tom Maibaum | Design Structures: Configuring Specifications | 1992 |

David Manlove | Assigning junior doctors to hospitals – what makes it so hard? | 2020 |

Ursula Martin | What Can You Do with an Equational Reasoning Theorem Prover? | 1990 |

Ursula Martin | The Princess and the Plumber: The Role of Mathematics in Computer Science | 1996 |

Ursula Martin | Computational Math: The Bew Challenge for Computational Logic | 2001 |

Per Martin-Löf | Spreads, Repetitive Structure, Functional Causal Models | 2015 |

Brian McBride | A Tail of a Dog | 2002 |

Conor McBride | Dependently Typed Programming: An Epigram Induction | 2005 |

Conor McBride | Syntax: What’s it like? | 2017 |

Kitty Meeks | From decision to (approximate) counting | 2019 |

Kurt Mehlhorn | Certifying Algorithms | 2003 |

Robin Milner | What Use are Process Algebras? | 1988 |

Robin Milner | Biographical Reactive Systems | 2002 |

Faron Moller | The Computational Complexity of Bisimilarity | 1995 |

Faron Moller | Techniques for Decidability and Undecidability for Bisimilarity (Tutorial) | 2001 |

Peter Mosses | The Meaning of It All: Programming Language Semantics, From Scott and Strachey to Semantics/Online | 2006 |

S Muthu Muthukrishnan | Data Stream Algorithmics | 2003 |

Rolf Niedermeier | Trends in Parameterized Algorithmics | 2008 |

Rachel Norman | Modelling of Biological Systems (Tutorial) | 2004 |

Colm O’Dunlaing | Computational Problems in Geometry | 1991 |

Luke Ong | Game Semantics | 1998 |

Catuscia Palamidessi | Information-Theoretic Approaches to Information Flow | 2010 |

Prakash Panangaden | Epistemic Strategies and Games on Concurrent Processes | 2011 |

Joachim Parrow | An Introduction to the pi-Calculus (Tutorial) | 2001 |

Mike Paterson | Getting your Message Across, but Nicely: An Introduction to Contention Resolution | 2001 |

Jan Peleska | Advances in Railway Control Systems Architectures and Related Challenges for Verification and Validation | 2020 |

Simon Peyton-Jones | Asynchronous Exceptions in Concurrent Haskell | 2001 |

Jean-Eric Pin | Logic and Automata | 2003 |

Gordon Plotkin | A Logic for Parametric Polymorphism | 1993 |

Ian Pratt | Qualitative Spatial Reasoning and the Semantic Knife-Edge | 1999 |

David Pym | Reasource Semantics, Bunched Logic and a Relevant Logical Framework | 1999 |

Alexander Rabinovich | Temporal Logic over Branching Time: Expressiveness and Complexity | 2001 |

Rajeev Raman | Succinctness | 2005 |

MS Ramanujan | Lossy kernelization | 2020 |

Bahar Rastegari | Stable marriage with groups of similar agents | 2019 |

Edmund Robertson | Combinatorial and Decidability Questions in Semigroups of Words | 1997 |

Edmund Robinson | Logic and Logical Relations | 1997 |

Grzegorz Rozenberg | DNA Computing In Vivo – Gene Assembly in Ciliates | 2000 |

David Rydeheard | Category Theory and Game Semantics | 1995 |

Mehrnoosh Sadrzadeh | Monoids, Vectors, and Tensors for Natural Language | 2017 |

Ulrike Sattler | Automated Reasoning for Ontology Engineering | 2010 |

Thomas Sauerwald | Randomised Distributed Algorithms | 2018 |

John Savage | VLSI Analysis, Synthesis and Theory | 1992 |

Nicole Schweikardt | On the expressive power of logics with invariant uses of arithmetic predicates | 2012 |

Peter Selinger | Logical Methods in Quantum Information Theory | 2011 |

Jeffrey Shallit^{*} |
Open Problems in Automata Theory | 2014 |

Joseph Sifakis | Rigorous System Design | 2015 |

Alexandra Silva | Probabilistic Program Equivalence for NetKAT | 2018 |

Alistair Sinclair | Phase Transitions and Mixing Times | 2009 |

Nigel Smart | Homomorphic Encryption | 2011 |

Michiel Smid | Spanners: Approximating the Complete Euclidean Graph | 1996 |

Mike Smyth | The Thesis that Computable Functions are Uniformly Continuous | 1989 |

Paul Spirakis | Paradigms for Fast Parallel Approximations to Problems that are Hard to Parallelise | 1994 |

Paul Spirakis | Algorithmic Aspects of Game Theory | 2002 |

Bernhard von Stengel | Fast algorithms for rank-1 bimatrix games | 2019 |

Susan Stepney | Unconventional design of unconventional computers | 2019 |

Perdita Stevens | Bisimulations, Bidirectionality, and the Future of Software Engineering | 2017 |

Iain Stewart | Descriptive Complexity Theory | 1995 |

Jean-Marc Steyaert | On the Average Complexity of Rewriting Systems | 1993 |

Colin Stirling | Verification via Model Checking | 1992 |

Carl Sturtivant | Some Issues in Algebraic Complexity | 1991 |

Bob Tennant | Correctness of Data Representations in Algol-Like Languages | 1993 |

Rick Thomas | Syntactic Monoids – A Survey | 1998 |

Rick Thomas | Formal Languages and Word Problems of Groups (Tutorial) | 2004 |

Chris Tofts | Ants, Shrimps, and Other Asynchronous Hardware | 1997 |

Jacobo Toran | On the Complexity of the Graph Isomorphism Problem | 1996 |

Patrick Totzke | Playing with counters: how to solve games on infinite arenas | 2020 |

John Tucker | Synchronous Concurrent Algorithms | 1995 |

John Tucker | Computable and Hierarchical Models of Physical Systems | 2002 |

David Turner | Total Functional Programming | 1996 |

Ken Turner | Test Generation for Radiotherapy Accelerators | 2004 |

Leslie Valiant | Computationally Feasible Learning | 1988 |

Leslie Valiant | Robust Logic | 2000 |

Brigitte Vallee | Algorithms for Integer Factorization | 1991 |

Moshe Vardi | Alternation as an Algorithmic Construct | 2006 |

Kristina Vuskovic^{*} |
The Use of Decomposition in the Study of Graph Classes defined by Excluding Induced Subgraphs | 2007 |

Kristina Vuskovic | The induced disjoint paths problem on (theta, wheel)-free graphs | 2020 |

Bill Wadge | Infinitesimal Logic | 2009 |

Lincoln Wallen | From Proof Theory to Proof Search: Some Remarks on the Design of Proof Procedures | 1990 |

Angela Wallenburg | Proof and Test: Will They Blend? | 2013 |

Kurt Weihrauch | Computable Analysis | 2000 |

Glynn Winskel | Linearity in Distributed Computation | 1999 |

Carsten Witt | Bio-Inspired Computation Meets Theoretical Computer Science | 2011 |

Gerhard Woeginger^{*} |
Three Assignment Problems and One Theorem | 2008 |

Mike Wooldridge | The Verification Problem for Agent Communication Languages | 2000 |

Mike Worboys | Computing with Geospatial Data: Challenges to Theory | 1999 |

James Worrell | Synthesising polynomial program invariants | 2019 |

Xin Yao | Some Theoretical Issues in Evolutionary Computation | 2000 |

Chee Yap | Grobner Bases: Complexity and Applications | 1988 |