key

KeY Theorem Prover for Deductive Java Verification

https://github.com/keyproject/key

Science Score: 39.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 2 DOI reference(s) in README
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.3%) to scientific vocabulary

Keywords

formal-verification key smt-solver static-analysis
Last synced: 6 months ago · JSON representation

Repository

KeY Theorem Prover for Deductive Java Verification

Basic Info
  • Host: GitHub
  • Owner: KeYProject
  • License: other
  • Language: Java
  • Default Branch: main
  • Homepage: https://key-project.org
  • Size: 215 MB
Statistics
  • Stars: 61
  • Watchers: 5
  • Forks: 36
  • Open Issues: 366
  • Releases: 43
Topics
formal-verification key smt-solver static-analysis
Created about 3 years ago · Last pushed 6 months ago
Metadata Files
Readme Contributing License Citation

README.md

KeY -- Deductive Java Program Verifier

Tests CodeQL CodeQuality

This repository is the home of the interactive theorem prover KeY for formal verification and analysis of Java programs. KeY comes as a standalone GUI application, which allows you to verify the functional correctness of Java programs with respect to formal specifications formulated in the Java Modeling Language JML. Moreover, KeY can also be used as a library e.g. for symbolic program execution, first order reasoning, or test case generation.

For more information, refer to

The current version of KeY is 2.12.2, licensed under GPL v2.

Feel free to use the project templates to get started using KeY: * For Verification Projects * Using as a Library * Using as a Symbolic Execution Backend

Requirements

  • Hardware: >=2 GB RAM
  • Operating System: Linux/Unix, MacOSX, Windows
  • Java 17 or newer
  • Optionally, KeY can make use of the following binaries:

Content of the KeY folder

This folder provides a gradle-managed project following Maven's standard folder layout. There are several subprojects in this folder. In general, every key.*/ subproject contains a core component of KeY. Additional and optional components are in keyext.*/ folders. The file build.gradle is the root build script describing the dependencies and common build tasks for all subprojects.

key.util, key.core and key.ui are the base for the product "KeY Prover". Special care is needed if you plan to make changes here.

Compile and Run KeY

Assuming you are in the directory of this README file, you can create a runnable and deployable version with one of these commands:

  1. With ./gradlew key.ui:run you can run the user interface of KeY directly from the repository. Use ./gradlew key.ui:run --args='--experimental' to enable experimental features.

  2. Use ./gradlew classes to compile KeY, which includes running JavaCC and Antlr. Likewise, use ./gradlew testClasses if you also want to compile the JUnit test classes.

  3. Test your installation with ./gradlew test. Be aware that this will usually take multiple hours to complete. With ./gradlew testFast, you can run a more lightweight test suite that should complete in a few minutes.

You can select a specific test case with the --tests argument. Wildcards are allowed. sh ./gradlew :key.<subproject>:test --tests "<class>.<method>"

You can debug KeY by adding the --debug-jvm option, then attaching a debugger at localhost:5005.

  1. You can create a single jar-version, aka fat jar, of KeY with sh ./gradlew :key.ui:shadowJar The file is generated in key.ui/build/libs/key-*-exe.jar.

  2. A distribution is build with sh ./gradlew :key.ui:installDist :key.ui:distZip The distribution can be tested by calling key.ui/install/key/bin/key.ui and is zipped in key.ui/build/distributions.

The distribution gives you potential of using single jar files.

Developing KeY

  • Quality is automatically assessed using SonarQube on each pull request. The results of the assessments (pass/fail) can be inspected in the checks section of the PR.

The rules and quality gate are maintained by Alexander Weigl weigl@kit.edu currently.

  • More guideline and documentation for the KeY development can be found under key-docs.

Issues and Bug Reports

Contributing to KeY

Feel free to submit pull requests via GitHub. Pull requests are assessed using automatic tests, formatting and static source checkers, as well as a manual review by one of the developers. More guidelines and documentation for the KeY development can be found under key-docs.

License Remark

``` This is the KeY project - Integrated Deductive Software Design Copyright (C) 2001-2011 Universitt Karlsruhe, Germany Universitt Koblenz-Landau, Germany and Chalmers University of Technology, Sweden Copyright (C) 2011-2024 Karlsruhe Institute of Technology, Germany Technical University Darmstadt, Germany Chalmers University of Technology, Sweden

The KeY system is protected by the GNU General Public License. See LICENSE.TXT for details. ```

Owner

  • Name: KeY Project
  • Login: KeYProject
  • Kind: organization
  • Email: support@key-project.org

GitHub Events

Total
  • Create event: 155
  • Release event: 15
  • Issues event: 34
  • Watch event: 12
  • Delete event: 131
  • Issue comment event: 334
  • Push event: 419
  • Gollum event: 1
  • Pull request review comment event: 163
  • Pull request review event: 177
  • Pull request event: 154
  • Fork event: 7
Last Year
  • Create event: 155
  • Release event: 15
  • Issues event: 34
  • Watch event: 12
  • Delete event: 131
  • Issue comment event: 334
  • Push event: 419
  • Gollum event: 1
  • Pull request review comment event: 163
  • Pull request review event: 177
  • Pull request event: 154
  • Fork event: 7

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 25
  • Total pull requests: 82
  • Average time to close issues: 11 months
  • Average time to close pull requests: 4 months
  • Total issue authors: 8
  • Total pull request authors: 15
  • Average comments per issue: 0.12
  • Average comments per pull request: 1.56
  • Merged pull requests: 36
  • Bot issues: 0
  • Bot pull requests: 16
Past Year
  • Issues: 21
  • Pull requests: 75
  • Average time to close issues: 3 days
  • Average time to close pull requests: 17 days
  • Issue authors: 8
  • Pull request authors: 14
  • Average comments per issue: 0.0
  • Average comments per pull request: 1.01
  • Merged pull requests: 33
  • Bot issues: 0
  • Bot pull requests: 16
Top Authors
Issue Authors
  • wadoon (18)
  • mattulbrich (11)
  • WolframPfeifer (8)
  • BookWood7th (6)
  • Drodt (4)
  • FliegendeWurst (3)
  • unp1 (3)
  • FabianKof (1)
  • tobias-rnh (1)
  • flo2702 (1)
  • as2-0 (1)
  • Ao-senXiong (1)
  • fab918 (1)
  • frereit (1)
Pull Request Authors
  • wadoon (54)
  • dependabot[bot] (44)
  • mattulbrich (20)
  • Drodt (16)
  • WolframPfeifer (16)
  • FliegendeWurst (12)
  • unp1 (6)
  • BookWood7th (6)
  • flo2702 (4)
  • tobias-rnh (4)
  • samysweb (2)
  • JonasKlamroth (2)
  • MarcoScaletta (2)
  • lks9 (2)
  • wmdietl (1)
Top Labels
Issue Labels
:lady_beetle: Bug (29) HacKeYthon (14) Feature (7) GUI (6) P:LOW (6) Error Reporting (5) JML (Semantics) (5) JML Parser (5) JavaJMLParser (4) P:NORMAL (4) 🛠 Maintenance (3) Test cases (3) Calculus (3) Documentation (3) Proof Loading/Saving (3) ✋ Soundness (2) Prover Core (2) P:HIGH (2) Command Line Interface (2) Completeness (2) SMT (2) KeY Parser (2) :rocket: Performance (2) Robustness (1) KeYBook (1) keyext.slicing (1) Infrastructure (1) Postponed (1)
Pull Request Labels
dependencies (44) Java (31) 🛠 Maintenance (26) :lady_beetle: Bug (19) Review Request (15) Feature (13) GUI (12) github_actions (9) Calculus (7) java (5) Reviewer Feedback (5) JML Parser (5) RFC (4) KeY Parser (4) CI (4) SMT (4) Infrastructure (3) Documentation (2) Completeness (2) ✋ Soundness (2) JavaJMLParser (2) :rocket: Performance (2) Command Line Interface (2) JML (Semantics) (2) Deployment (2) Test cases (2) HacKeYthon (2) Breaks API (2) Proof Scripts (2) Ignore in Changelog (2)

Dependencies

.github/workflows/code_quality.yml actions
  • JetBrains/qodana-action v2022.3.0 composite
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • github/codeql-action/upload-sarif v2 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/gradle-publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/javadoc.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • actions/upload-artifact v2 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/nightlydeploy.yml actions
  • actions/checkout v3 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/opttest.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • actions/upload-artifact v3.1.1 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/tests.yml actions
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • actions/github-script v6 composite
  • actions/setup-java v3 composite
  • actions/upload-artifact v3 composite
  • actions/upload-artifact v3.1.1 composite
  • codecov/codecov-action v3 composite
  • gradle/gradle-build-action v2.4.2 composite
.github/workflows/tests_winmac.yml actions
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • actions/upload-artifact v3.1.1 composite
  • gradle/gradle-build-action v2.4.2 composite
build.gradle maven
  • com.google.code.findbugs:jsr305 3.0.2 implementation
  • org.slf4j:slf4j-api 2.0.9 implementation
  • junit:junit 4.13.2 testCompileOnly
  • ch.qos.logback:logback-classic 1.4.11 testImplementation
  • org.junit.jupiter:junit-jupiter-api 5.10.0 testImplementation
  • org.junit.jupiter:junit-jupiter-params 5.10.0 testImplementation
  • org.junit.jupiter:junit-jupiter-engine 5.10.0 testRuntimeOnly
  • org.junit.vintage:junit-vintage-engine 5.10.0 testRuntimeOnly
key.core/build.gradle maven
  • org.antlr:antlr4-runtime 4.13.1 api
key.core.example/build.gradle maven
key.core.proof_references/build.gradle maven
key.core.rifl/build.gradle maven
key.core.symbolic_execution/build.gradle maven
key.core.symbolic_execution.example/build.gradle maven
key.core.testgen/build.gradle maven
key.removegenerics/build.gradle maven
key.ui/build.gradle maven
  • com.miglayout:miglayout-swing 11.1 api
  • org.key-project:docking-frames-common 1.1.3p1 api
  • org.key-project:docking-frames-core 1.1.3p1 api
  • ch.qos.logback:logback-classic 1.4.11 implementation
key.util/build.gradle maven
keyext.exploration/build.gradle maven
keyext.proofmanagement/build.gradle maven
keyext.slicing/build.gradle maven
keyext.ui.testgen/build.gradle maven
recoder/build.gradle maven
  • net.sf.retrotranslator:retrotranslator-runtime 1.2.9 implementation
  • net.sf.retrotranslator:retrotranslator-transformer 1.2.9 implementation
  • org.beanshell:bsh 2.0b5 implementation
  • org.ow2.asm:asm 9.5 implementation
.github/workflows/sonarqube.yml actions
  • actions/cache v4 composite
  • actions/checkout v4 composite
  • actions/setup-java v4 composite
  • gradle/actions/dependency-submission v4 composite
key.ncore/build.gradle maven
  • org.jspecify:jspecify 1.0.0 implementation
keyext.caching/build.gradle maven
key.ncore.calculus/build.gradle maven
  • org.jspecify:jspecify 0.3.0 implementation
keyext.isabelletranslation/build.gradle maven
  • de.unruh:scala-isabelle_2.13 0.4.3-RC2 implementation