K is a rewrite-based executable semantic framework in which programming languages, type systems and formal analysis tools can be defined using configurations, computations and rules. Configurations organize the state in units called cells, which are labeled and can be nested. Computations carry computational meaning as special nested list structures sequentializing computational tasks, such as fragments of program. Computations extend the original language abstract syntax. K (rewrite) rules make it explicit which parts of the term they read-only, write-only, read-write, or do not care about. This makes K suitable for defining truly concurrent languages even in the presence of sharing. Computations are like any other terms in a rewriting environment: they can be matched, moved from one place to another, modified, or deleted. This makes K suitable for defining control-intensive features such as abrupt termination, exceptions or call/cc.


K Tool Download

  • The provided K tool binaries are supported on Linux, OS X, and Windows. Other platforms may or may not work correctly. We welcome information about usability of unsupported platforms or bugs in the supported platforms.
  • Try our Editor Support page for links to K syntax highlighting definitions for various popular editors/IDEs. Please feel free to contribute.
  • The source code (Java) is available on GitHub, where you can also report bugs (please do so).

Learn K

  • K webpage at UAIC (Romania).
  • Matching logic webpage at UIUC (USA).
  • Online K Discussion Channel for K users (Slack & Riot). This is the recommended way to ask questions about K and interact with the K community.
  • Stackoverflow for general questions to the K user community (use the channel above if you want quick answers).