Skip to content

LoLa

LoLa is a declarative language for PLC logic whose semantics are defined by SMT. Every program you write is a set of equations, rules and invariants; the compiler proves them with Z3 before any code is emitted — the solver is the single source of truth, not a linter bolted on after the fact.

FUNCTION_BLOCK StartStop
VAR_INPUT  Start : BOOL; Stop : BOOL; END_VAR
VAR_OUTPUT Running : BOOL; END_VAR
VAR        latch : RS; END_VAR
IMPLEMENTATION
    latch(S := Start, R1 := Stop);
    Running := latch.Q1;
END_IMPLEMENTATION
END_FUNCTION_BLOCK

Where to go

  • Tutorial — introduction by example: the language from first contact to proven blocks.
  • How-to guides: task-oriented recipes — run a program, compose components, diagnose a proof failure.
  • Reference: the normative language definition, CLI, assurance claims and configuration.
  • Explanation: why the language is built this way — scan semantics, ownership, the assurance model.

Backends and toolchain

LoLa compiles to Structured Text (IEC 61131-3) and Rust from one proven model, with a reproducible Nix toolchain and a native no_std runtime architecture. See Architecture for the full picture.