Need help with kore?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

kframework
133 Stars 29 Forks Other 3.6K Commits 150 Opened issues

Description

The symbolic execution engine powering the K Framework

Services available

!
?

Need anything else?

Contributors list

The Kore Language

Kore is the "core" part of the K framework.

What is Kore all about?

In short, we need a formal semantics of K. In K, users can define formal syntax and semantics of programming languages as K definitions, and automatically obtain parsers, interpreters, compilers, and various verification tools for their languages. Therefore K is a language-independent framework.

Thanks to years of research in matching logic and reachability logic, we know that all K does can be nicely formalized as logic reasoning in matching logic. To give K a formal semantics, we only need to formally specify the underlying matching logic theories with which K does reasoning. In practice, these underlying theories are complex and often infinite, and it is tricky to specify infinite theories without a carefully designed formal specification language. And Kore is such a language.

Structure of this project

The

/docs
directory contains a comprehensive document Semantics of K that describes the mathematical foundation of Kore, and a BNF grammar that defines the syntax of Kore language.

The

kore
project is an implementation in Haskell of a Kore parser and symbolic execution engine, for use with the K Framework as a backend.

Building

Besides git, you will need stack or cabal to build

kore
.
stack build kore
# or
cabal build kore

If using

cabal
, version 3.0 or later is recommended.

Developing

Developers will require all the dependencies listed above, in addition to the requirements and recommendations below.

Required dependencies

For integration testing, we require:

Instead of installing the frontend, you can use our

Dockerfile
to run the integration tests inside a container. Use
docker.sh
to run commands inside the container:
./docker/build.sh  # run once when dependencies change
./docker/run.sh make ...

Recommended dependencies

For setting up a development environment, we recommend:

We recommend to keep

./entr.sh
running in the background to keep important files (such as package descriptions) up-to-date, especially if the developer is using Cabal.

Running a language server

To run a language server, developers will need to activate the appropriate

hie.yaml
file:
ln -s hie-stack.yaml hie.yaml  # for Stack
# or
ln -s hie-cabal.yaml hie.yaml  # for Cabal
# or
ln -s hie-bios.yaml hie.yaml  # if all else fails

The project's dependencies must be installed before starting the language server:

stack build --test --bench --only-dependencies
# or
cabal build --enable-tests --enable-benchmarks --only-dependencies kore

Developing with Nix

We provide a

shell.nix
expression with a suitable development environment and a binary cache at kore.cachix.org. The development environment is intended to be used with
nix-shell
and
cabal
.

When the

.cabal
package description file changes, run:
# Requires Nix to be installed.
./nix/rematerialize.sh

This script is also run by an automatic workflow.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.