<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Chief_series</id>
	<title>Chief series - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Chief_series"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Chief_series&amp;action=history"/>
	<updated>2026-04-24T17:23:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0-wmf.28</generator>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Chief_series&amp;diff=17647&amp;oldid=prev</id>
		<title>en&gt;Rschwieb: /* Definition */</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Chief_series&amp;diff=17647&amp;oldid=prev"/>
		<updated>2012-03-08T11:39:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Definition&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox software&lt;br /&gt;
| name                   = KeY&lt;br /&gt;
| logo                   = [[File:KeY logo.svg|150px]]&lt;br /&gt;
| screenshot             = [[Image:Key-tool.jpg|250px]]&lt;br /&gt;
| caption                = Screenshot of KeY 1.4&lt;br /&gt;
| developer              = [[Karlsruhe Institute of Technology]], [[Technische Universität Darmstadt]], [[Chalmers University of Technology]]&lt;br /&gt;
| year                   = 2001&lt;br /&gt;
| latest release version = 2.0.1&lt;br /&gt;
| latest release date    = {{release date|2013|06|20}}&lt;br /&gt;
| latest preview version = 2.1.4244&lt;br /&gt;
| latest preview date    = {{release date|2013|05|10}}&lt;br /&gt;
| operating system       = Linux, Mac, Windows, Solaris&lt;br /&gt;
| language               = English&lt;br /&gt;
| programming language   = [[Java (programming language)|Java]]&lt;br /&gt;
| status                 = Active&lt;br /&gt;
| genre                  = [[Formal verification]]&lt;br /&gt;
| license                = [[GNU General Public License|GPL]]&lt;br /&gt;
| website                = [http://www.key-project.org/ www.key-project.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;KeY&amp;#039;&amp;#039;&amp;#039; tool is used in [[formal verification]] of [[Java (programming language)|Java]] programs. It accepts both specifications written in [[Java Modeling Language|JML]] or [[Object Constraint Language|OCL]] to Java source files. These are transformed into theorems of [[dynamic logic]] and then compared against program semantics which are likewise defined in terms of dynamic logic. KeY is significantly powerful in that it supports both interactive (i.e. by hand) and fully automated correctness proofs. Failed proof attempts can be used for a more efficient [[debugging]] or [[Model-based testing#Test case generation by theorem proving|verification-based testing]]. It can be integrated into [[CASE tool]]s to extract specifications. There have been several extensions to KeY in order to apply it to the verification of [[C (programming language)|C]] programs or [[hybrid system]]s. KeY is jointly developed by [[Karlsruhe Institute of Technology]], Germany; [[Technische Universität Darmstadt]], Germany; and [[Chalmers University of Technology]] in Gothenburg, Sweden and is licensed under the [[GNU General Public License  |GPL]].&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The usual user input to KeY consists of a Java source file with annotations in either JML or OCL. Both, they are translated to KeY&amp;#039;s internal representation, [[KeY#Java Card DL|dynamic logic]]. From the given specifications, several proof obligations arise which are to be discharged, i.e. a proof has to be found. To this ends, the program is [[symbolic execution|symbolically executed]] with the resulting changes to program variables stored in so-called &amp;#039;&amp;#039;updates&amp;#039;&amp;#039;. Once the program has been processed completely, there remains a [[first-order logic]] proof obligation. At the heart of the KeY system lies a first-order [[Automated theorem prover|theorem prover]] based on [[sequent calculus]], which is used to close the proof. Interference rules are captured in so called &amp;#039;&amp;#039;taclets&amp;#039;&amp;#039; which consist of an own simple language to describe  changes to a sequent.&lt;br /&gt;
&lt;br /&gt;
== Java Card DL ==&lt;br /&gt;
{{main|Java Card}}&lt;br /&gt;
The theoretical foundation of KeY is a [[formal logic]] called Java Card DL. DL stands for Dynamic Logic. It is a version of a first-order [[dynamic logic (modal logic)|dynamic logic]] tailored to Java Card programs. As such, it for example allows statements (formulas) like &amp;lt;math&amp;gt;\phi \rightarrow [\alpha]\psi&amp;lt;/math&amp;gt;, which intuitively says that the post-condition &amp;lt;math&amp;gt;\psi&amp;lt;/math&amp;gt; must hold in all program states reachable by executing the Java Card program &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; in any state that satisfies the pre-condition &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt;. This is equivalent to &amp;lt;math&amp;gt;\{\phi\}\alpha\{\psi\}&amp;lt;/math&amp;gt; in [[Hoare calculus]] if &amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\psi&amp;lt;/math&amp;gt; are purely first order. Dynamic logic, however, extends Hoare logic in that formulas may contain nested program modalities such as &amp;lt;math&amp;gt;[\alpha]&amp;lt;/math&amp;gt;, or that quantification over formulas which contain modalities is possible. There is also a [[Duality (mathematics)|dual]] modality &amp;lt;math&amp;gt;\langle\alpha\rangle&amp;lt;/math&amp;gt; which includes [[Termination analysis|termination]]. This dynamic logic can be seen as a special multi-modal logic (with an infinite number of modalities) where for each Java block &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; there are modalities &amp;lt;math&amp;gt;[\alpha]&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\langle\alpha\rangle&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Deduction component ==&lt;br /&gt;
At the heart of the KeY system lies a first-order theorem prover based on a [[sequent calculus]]. A sequent is of the form &amp;lt;math&amp;gt;\Gamma \vdash \Delta&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;\Gamma&amp;lt;/math&amp;gt; (assumptions) and &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt; (propositions) are sets of formulas with the intuitive meaning that &amp;lt;math&amp;gt;\bigwedge_{\gamma\in\Gamma} \gamma \rightarrow \bigvee_{\delta\in\Delta}\delta&amp;lt;/math&amp;gt; holds true. By means of [[Deductive reasoning|deduction]], an initial sequent representing the proof obligation is shown to be constructible from just fundamental first-order axioms (such as equality &amp;lt;math&amp;gt;e\ \dot{=}\ e&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Symbolic execution of Java code ===&lt;br /&gt;
During that, program modalities are eliminated by [[symbolic execution]]. For instance, the formula &amp;lt;math&amp;gt;x\ \dot{=}\ 0 \rightarrow [x++;]x\ \dot{=}\ 1&amp;lt;/math&amp;gt; is logically equivalent to &amp;lt;math&amp;gt;x\ \dot{=}\ 0 \rightarrow x\ \dot{=}\ 0&amp;lt;/math&amp;gt;. As this example shows, symbolic execution in dynamic logic is very similar to calculating [[weakest precondition]]s. Both &amp;lt;math&amp;gt;[\alpha]\psi&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;wp(\alpha,\psi)&amp;lt;/math&amp;gt; essentially denote the same thing&amp;amp;nbsp;– with two exceptions: Firstly, &amp;lt;math&amp;gt;wp&amp;lt;/math&amp;gt; is a function of some meta-calculus while &amp;lt;math&amp;gt;[\alpha]\psi&amp;lt;/math&amp;gt; really is a formula of the given calculus. Secondly, symbolic execution runs through the program &amp;#039;&amp;#039;forward&amp;#039;&amp;#039; just as an actual execution would. To save intermediate results of assignments, KeY introduces a concept called &amp;#039;&amp;#039;updates&amp;#039;&amp;#039;, which are similar to substitutions but are only applied once the program modality has been fully eliminated. Syntactically, updates are consist of parallel (side-effect free) assignments written in curly braces in front of a modality. An example of symbolic execution with updates: &amp;lt;math&amp;gt;[x= 3; x=x+1;]x\ \dot{=}\ 4&amp;lt;/math&amp;gt; is transformed to &amp;lt;math&amp;gt;\{x:= 3\}[x=x+1;]x\ \dot{=}\ 4&amp;lt;/math&amp;gt; in the first step and to &amp;lt;math&amp;gt;\{x:= 4\}[]x\ \dot{=}\ 4&amp;lt;/math&amp;gt; in the second step. The modality then is empty and &amp;quot;backwards application&amp;quot; of the update to the postcondition yields a precondition where &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; could take any value.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Suppose one wants to prove that the following method calculates the product of some non-negative integers &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int foo (int x, int y) {&lt;br /&gt;
    int z = 0;&lt;br /&gt;
    while (y &amp;gt; 0)&lt;br /&gt;
        if (y % 2 == 0) {&lt;br /&gt;
            x = x*2;&lt;br /&gt;
            y = y/2;&lt;br /&gt;
        } else {&lt;br /&gt;
            y = y/2;&lt;br /&gt;
            z = z+x;&lt;br /&gt;
            x = x*2;&lt;br /&gt;
        }&lt;br /&gt;
    return z;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One thus starts the proof with the premise &amp;lt;math&amp;gt;x \geq 0 \land y \geq 0&amp;lt;/math&amp;gt; and the to-be-shown conclusion &amp;lt;math&amp;gt;z\ \dot{=}\ x \cdot y&amp;lt;/math&amp;gt;. Note that tableaux of sequent calculi are usually written &amp;quot;upside-down&amp;quot;, i.e., the starting sequent appears at the bottom and deduction steps go upwards. The proof can be seen in the figure on the right.&lt;br /&gt;
[[File:Dynamic_logic_proof.png|thumb|right|A resulting proof tree]]&lt;br /&gt;
&lt;br /&gt;
== Additional features ==&lt;br /&gt;
=== Symbolic Execution Debugger ===&lt;br /&gt;
The &amp;#039;&amp;#039;Symbolic Execution Debugger&amp;#039;&amp;#039; visualizes the [[control flow]] of a program as a [[symbolic execution]] tree that contains all feasible execution paths through the program up to a certain point. It is provided as a plugin to the [[Eclipse (software)|Eclipse]] development platform.&lt;br /&gt;
&lt;br /&gt;
=== Test Case Generator ===&lt;br /&gt;
KeY is usable as a [[model-based testing]] tool that can generate [[unit tests]] for Java programs. The model from which test data and the test case are derived consists of a formal specification (provided in [[Java Modeling Language|JML]] or [[Object Constraint Language|OCL]]) and a symbolic execution tree of the implementation under test which is computed by the KeY system.&lt;br /&gt;
&lt;br /&gt;
== Distribution and Variants of the KeY System ==&lt;br /&gt;
KeY is free software written in Java and licensed under [[GNU General Public License|GPL]]. It can be downloaded from the project website in source; currently there are no pre-compiled binaries available. As another possibility, KeY can be executed directly via [[Java web start]] without the need for compilation and installation.&lt;br /&gt;
&lt;br /&gt;
=== KeY-Hoare ===&lt;br /&gt;
&amp;#039;&amp;#039;KeY-Hoare&amp;#039;&amp;#039; is built on top of KeY and features a [[Hoare calculus]] with state updates. State updates are a means of describing state transitions in a [[Kripke structure]]. This calculus can be seen as a subset to the one that is used in the main branch of KeY. Due to the simplicity of the Hoare calculus, this implementation is essentially meant to exemplify formal methods in undergraduate classes.&lt;br /&gt;
&lt;br /&gt;
=== KeYmaera ===&lt;br /&gt;
&amp;#039;&amp;#039;KeYmaera&amp;#039;&amp;#039; [http://symbolaris.com/info/KeYmaera.html] (previously called HyKeY) is a deductive verification tool for hybrid systems based on a calculus for the differential dynamic logic dL [http://symbolaris.com/logic/dL.html].&lt;br /&gt;
It extends the KeY tool with computer algebra systems like [[Mathematica]] and corresponding algorithms and proof strategies such that it can be used for practical verification of [[hybrid systems]].&lt;br /&gt;
&lt;br /&gt;
KeYmaera has been developed at the [[University of Oldenburg]] and the [[Carnegie Mellon University]]. The name of the tool was chosen as a [[homophone]] to [[Chimera (mythology)|Chimera]], the hybrid animal from ancient Greek mythology.&lt;br /&gt;
&lt;br /&gt;
=== KeY for C ===&lt;br /&gt;
&amp;#039;&amp;#039;KeY for C&amp;#039;&amp;#039; is an adaption of the KeY System to [[MISRA C]], a subset of the [[C programming language]]. This variant is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== ASMKeY ===&lt;br /&gt;
There is also an adaptation to use KeY for the symbolic execution of [[Abstract State Machine]]s, that was developed at [[ETH Zürich]]. This variant is no longer supported; more information can be found on the weblink below.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* [http://www.springer.com/east/home/generic/search/results?SGWID=5-40109-22-173712406-0 Verification of Object-Oriented Software: The KeY Approach]. Bernhard Beckert, Reiner Hähnle, Peter H. Schmitt (Eds.). [[Springer Science+Business Media|Springer]], 2007. ISBN 978-3-540-68977-5.&lt;br /&gt;
* [http://www.springerlink.com/content/6230tv724um20302/ A comparison of tools for teaching formal software verification]. Ingo Feinerer and Gernot Salzer. [[Springer Science+Business Media|Springer]], 2008&lt;br /&gt;
* [http://cl.cse.wustl.edu/papers/vstte05.pdf Programming With Proofs: Language Based Approaches To Totally Correct Software]. Aaron Stump. Verified Software: Theories, Tools, and Experiments, 2005.&lt;br /&gt;
* [http://www.dwheeler.com/essays/high-assurance-floss.html High Assurance (for Security or Safety) and Free-Libre / Open Source Software (FLOSS)]. David Wheeler, 2009&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.key-project.org Home page of the KeY project]&lt;br /&gt;
* [http://symbolaris.com/info/KeYmaera.html KeYmaera home page]&lt;br /&gt;
&lt;br /&gt;
[[Category:Formal methods tools]]&lt;br /&gt;
[[Category:Theorem proving software systems]]&lt;br /&gt;
[[Category:Free theorem provers]]&lt;/div&gt;</summary>
		<author><name>en&gt;Rschwieb</name></author>
	</entry>
</feed>