Institute for Categorical Cybernetics

Governance and control for the age of AI

Our mission is to develop theory and software for governing systems that learn and make decisions, for the benefit of their users and of humanity.

Latest posts

  • The Untapped Potential of Game Theory in Revenue Management

    Revenue management has evolved significantly since its origins in 1980s airline yield management. Travel, logistics, and hospitality industries employ it to maximize occupancies; e-commerce platforms use it to schedule promotion campaigns. It is the go-to tool across industries to match resource availability with consumer demand. But most current approaches still rely on relatively simple demand forecasting and optimization. The behaviour of other players in the market (for example competitors) is rarely explicitly accounted for, even though their behaviour implicitly shows up in the data used to estimate the models. Game theory — which has emerged as the dominant tool for modeling strategic dynamics — offers powerful potential to change this.
  • An Invitation to Neural Picture Alchemy

    If you're reading this, you're probably already comfortable with string diagrams and category theory, so I won't belabour the basics. Usually when people draw string diagrams for deep learning, they're depicting architectures, or something that's compositional with respect to architectures such as backpropagation. Unfortunately this tensor-plumbery is a bit rizzless, since autograd and einops means IRL chad DL-engineers already don't break a sweat over these aspects. So instead of the syntax of DL, let's turn towards the semantics: the relationship between the objective functions and the behaviours of the trained models.
  • Pipelines Part 2: Categorical Pipelines

    Programming large complex software requires the right abstractions to make the work as easy as possible. Pipelines help writing programs by leveraging dependent types, but we can do better. By abstracting over the category in which we work, we can implement pipelines for effectful programs, bidirectional programs using dependent lenses, and even graded programs.
  • What Is the CyberCat Institute?

    CyberCat is a network of researchers established in 2022 with the common goal to develop leading-edge knowledge in categorical cybernetics and applied category theory, and to show its economic usefulness. The Institute for Categorical Cybernetics was incorporated as a non-profit in 2024 to provide an institutional backbone for the network's activities. Its purpose is to support CyberCat's whole innovation pipeline from basic research to spinning off high-tech ventures. At the basic research level, it coordinates research activities among its members including funding and joint implementation of research projects, as well as hosting informal and formal events. At the other end of the funnel, the Institute acts as an incubator for ventures with the express goal to discover and commercialize economically useful technologies.
  • Bidirectional Typechecking with Dependent Lenses

    Bidirectional Type checking as a lens is possible, and makes use of monadic traversals. Can we do the same with dependent lenses? We sure can! It turns out the equivalent representation is the Kleene star on containers and we are going to use it to rebuild the same bidirectional typechecker using dependent lenses only.
  • Generalized Transformers from Applicative Functors

    Transformers are a machine-learning model at the foundation of many state-of-the-art systems in modern AI. In this post, we are going to build a generalization of Transformer models that can operate on (almost) arbitrary structures such as functions, graphs, probability distributions, not just matrices and vectors.
  • Bidirectional Typechecking is Bidirectional

    For a while I've had an intuition that typechecking should be optical, with subterms going forwards and types (and type errors) for subterms going backwards. In this post I'll make sense of this idea, by implementing a bidirectional typechecker for simply typed lambda calculus as an optic, using Haskell's Control.Lens.
  • Optics for UI 1: Deconstructing React with Parametrised Lenses

    Lenses model a new paradigm of programming based on bidirectional processses. Recently André Videla has figured out how use them to implement RESTful servers, and as we will see in this blog post, they can also capture UIs. In this blog post we will look at UI frameworks like React and The Elm Architecture and see how to express them using parametrised lenses.
  • Programming Pipelines Using Dependent Types

    Sometimes, writing a large program is conceptually as simple as translating from a big unstructured input into a more and more structured output. In this post, we present a data structure to talk about such programs and demonstrate its use and flexbility using a single-pass compiler as case-study.
  • Foundations of Bidirectional Programming IV: Running Forwards and Running Backwards

    We are now at the point where we can write an interpreter to run some programs. To be clear, this is mainly for demonstration and debugging purposes, and the eventual goal is to write an optimising compiler. By the end of this post we will be able to demonstrate interpreting some very simple straight-line differentiable programs, and also demonstrate just how horrendous it is to actually write programs in our kernel syntax. This will motivate several follow-up posts where we slowly work upwards towards a human-usable surface language.
  • Mathematics for Governance Design

    Recently we held a workshop in Edinburgh titled Mathematics for Governance Design, consisting of a roughly 50/50 split between social scientists and category theorists.
  • On Hopfield Networks and Boltzmann Machines

    In which we connect the physics Nobel Prize to machine learning and economic design.
  • Foundations of Bidirectional Programming III: The Logic of Lenses

    In this post we will make probably the single most important step from a generic type theory to one specialised to bidirecional programming.
  • Foundations of Bidirectional Programming II: Negative Types

    In this post we'll begin designing a kernel language in which all programs are optics. What I mean by a "kernel language" is that it will serve as a compiler intermediate representation, with a surface language compiling down to it. I intend the surface language to be imperative style like the current Open Game Engine (with an approximately Python-like syntax), but the kernel language will reflect the category theory as closely as possible. I plan the kernel language to be well typed by construction, something that seems like overkill until I think about the problem of figuring out how pattern matching should work in a bidirectional language.
  • On Modelling

    In which we learn why "flat earth" is a perfectly sound scientific proposition and why being wrong two thirds of the time can actually be quite lucrative.