<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://termination-portal.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cryingshadow</id>
	<title>Termination-Portal.org - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://termination-portal.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cryingshadow"/>
	<link rel="alternate" type="text/html" href="http://termination-portal.org/wiki/Special:Contributions/Cryingshadow"/>
	<updated>2026-05-10T00:47:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1616</id>
		<title>C Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1616"/>
		<updated>2015-07-29T15:05:26Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: format fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposed semantics ==&lt;br /&gt;
&lt;br /&gt;
*    The starting point is the main function without arguments.&lt;br /&gt;
&lt;br /&gt;
*    Functions which are only declared, but not defined, are considered to be terminating, have no side effects, and return a non-deterministic value according to the function's return type.&lt;br /&gt;
&lt;br /&gt;
*    The special (and only declared) function __VERIFIER_nondet_String() returns a non-deterministic C String, i.e., a pointer to some freshly allocated memory where the last byte of this allocation is the value '\0' (we may provide a standard implementation for this function, but provers are allowed to hard-code its semantics).&lt;br /&gt;
&lt;br /&gt;
*    In C, memory-unsafe programs can behave arbitrarily. Therefore, neither YES nor NO is a correct result for programs violating memory safety. So a proof of memory safety needs to be part of a termination proof. If there is interest for that, we could also offer an additional category where memory safety can be assumed and where no programs are allowed which might violate memory safety.&lt;br /&gt;
&lt;br /&gt;
*    We assume integers to be mathematical integers, i.e., over- or underflows cannot occur. If there is interest for that, we could also offer an additional category where overflows of unsigned integers are treated as two's complement overflows and where neither YES nor NO is a correct result for programs with overflows of signed integers.&lt;br /&gt;
&lt;br /&gt;
*    Integer division by negative numbers is assumed to be done by truncation towards zero (as in the C99 standard and no implementation-defined behavior as in the C89 standard).&lt;br /&gt;
&lt;br /&gt;
*    We assume that allocation of memory always succeeds, i.e., alloca and malloc never return null pointers and allocation of constant size arrays cannot lead to undefined behavior. Moreover, read access to allocated, but uninitialized memory is assumed to just return a non-deterministic value.&lt;br /&gt;
&lt;br /&gt;
*    We assume the following sizes of primitive data types:&lt;br /&gt;
     bool: 8 bit&lt;br /&gt;
     char: 8 bit&lt;br /&gt;
     short: 16 bit&lt;br /&gt;
     int: 32 bit&lt;br /&gt;
     long: 64 bit&lt;br /&gt;
     float: 32 bit&lt;br /&gt;
     double: 64 bit&lt;br /&gt;
     pointer: 64 bit&lt;br /&gt;
&lt;br /&gt;
*    Programs where the evaluation order of operations is not defined according to the C standard and where different execution orders of the operations lead to different resulting states are not allowed. As an example, the program&lt;br /&gt;
 int main(){&lt;br /&gt;
     int x = 0;&lt;br /&gt;
     while( x++ == x );&lt;br /&gt;
 }&lt;br /&gt;
: is not allowed since the evaluation order between ++ and == is not defined according to the C standard and if ++ is evaluated first, the program terminates whereas it does not if == is evaluated first. To enable an automatic check for such programs, we disallow all programs &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; where the execution of &amp;lt;code&amp;gt;gcc -c -std=c99 -Wsequence-point P&amp;lt;/code&amp;gt; shows a warning.&lt;br /&gt;
&lt;br /&gt;
*    The scoring should be the same as in all other categories (proving termination or non-termination both gives 1 point and there will be a penalty for wrong answers). &lt;br /&gt;
&lt;br /&gt;
*    Time limit: 300 seconds.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Section D. of [http://sv-comp.sosy-lab.org/2014/demo.php Termination Competition on Software Verification (SV-COMP)]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1615</id>
		<title>C Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1615"/>
		<updated>2015-07-29T15:04:54Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposed semantics ==&lt;br /&gt;
&lt;br /&gt;
*    The starting point is the main function without arguments.&lt;br /&gt;
&lt;br /&gt;
*    Functions which are only declared, but not defined, are considered to be terminating, have no side effects, and return a non-deterministic value according to the function's return type.&lt;br /&gt;
&lt;br /&gt;
*    The special (and only declared) function __VERIFIER_nondet_String() returns a non-deterministic C String, i.e., a pointer to some freshly allocated memory where the last byte of this allocation is the value '\0' (we may provide a standard implementation for this function, but provers are allowed to hard-code its semantics).&lt;br /&gt;
&lt;br /&gt;
*    In C, memory-unsafe programs can behave arbitrarily. Therefore, neither YES nor NO is a correct result for programs violating memory safety. So a proof of memory safety needs to be part of a termination proof. If there is interest for that, we could also offer an additional category where memory safety can be assumed and where no programs are allowed which might violate memory safety.&lt;br /&gt;
&lt;br /&gt;
*    We assume integers to be mathematical integers, i.e., over- or underflows cannot occur. If there is interest for that, we could also offer an additional category where overflows of unsigned integers are treated as two's complement overflows and where neither YES nor NO is a correct result for programs with overflows of signed integers.&lt;br /&gt;
&lt;br /&gt;
*    Integer division by negative numbers is assumed to be done by truncation towards zero (as in the C99 standard and no implementation-defined behavior as in the C89 standard).&lt;br /&gt;
&lt;br /&gt;
*    We assume that allocation of memory always succeeds, i.e., alloca and malloc never return null pointers and allocation of constant size arrays cannot lead to undefined behavior. Moreover, read access to allocated, but uninitialized memory is assumed to just return a non-deterministic value.&lt;br /&gt;
&lt;br /&gt;
*    We assume the following sizes of primitive data types:&lt;br /&gt;
     bool: 8 bit&lt;br /&gt;
     char: 8 bit&lt;br /&gt;
     short: 16 bit&lt;br /&gt;
     int: 32 bit&lt;br /&gt;
     long: 64 bit&lt;br /&gt;
     float: 32 bit&lt;br /&gt;
     double: 64 bit&lt;br /&gt;
     pointer: 64 bit&lt;br /&gt;
&lt;br /&gt;
*    Programs where the evaluation order of operations is not defined according to the C standard and where different execution orders of the operations lead to different resulting states are not allowed. As an example, the program&lt;br /&gt;
 int main(){&lt;br /&gt;
     int x = 0;&lt;br /&gt;
     while( x++ == x );&lt;br /&gt;
 }&lt;br /&gt;
: is not allowed since the evaluation order between ++ and == is not defined according to the C standard and if ++ is evaluated first, the program terminates whereas it does not if == is evaluated first. To enable an automatic check for such programs, we disallow all programs &amp;lt;code&amp;gt;&amp;lt;P&amp;gt;&amp;lt;/code&amp;gt; where the execution of &amp;lt;code&amp;gt;gcc -c -std=c99 -Wsequence-point &amp;lt;P&amp;gt;&amp;lt;/code&amp;gt; shows a warning.&lt;br /&gt;
&lt;br /&gt;
*    The scoring should be the same as in all other categories (proving termination or non-termination both gives 1 point and there will be a penalty for wrong answers). &lt;br /&gt;
&lt;br /&gt;
*    Time limit: 300 seconds.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Section D. of [http://sv-comp.sosy-lab.org/2014/demo.php Termination Competition on Software Verification (SV-COMP)]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1614</id>
		<title>C Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1614"/>
		<updated>2015-07-29T15:00:22Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: new rules according to discussion on termtools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposed semantics ==&lt;br /&gt;
&lt;br /&gt;
*    The starting point is the main function without arguments.&lt;br /&gt;
&lt;br /&gt;
*    Functions which are only declared, but not defined, are considered to be terminating, have no side effects, and return a non-deterministic value according to the function's return type.&lt;br /&gt;
&lt;br /&gt;
*    The special (and only declared) function __VERIFIER_nondet_String() returns a non-deterministic C String, i.e., a pointer to some freshly allocated memory where the last byte of this allocation is the value '\0' (we may provide a standard implementation for this function, but provers are allowed to hard-code its semantics).&lt;br /&gt;
&lt;br /&gt;
*    In C, memory-unsafe programs can behave arbitrarily. Therefore, neither YES nor NO is a correct result for programs violating memory safety. So a proof of memory safety needs to be part of a termination proof. If there is interest for that, we could also offer an additional category where memory safety can be assumed and where no programs are allowed which might violate memory safety.&lt;br /&gt;
&lt;br /&gt;
*    We assume integers to be mathematical integers, i.e., over- or underflows cannot occur. If there is interest for that, we could also offer an additional category where overflows of unsigned integers are treated as two's complement overflows and where neither YES nor NO is a correct result for programs with overflows of signed integers.&lt;br /&gt;
&lt;br /&gt;
*    Integer division by negative numbers is assumed to be done by truncation towards zero (as in the C99 standard and no implementation-defined behavior as in the C89 standard).&lt;br /&gt;
&lt;br /&gt;
*    We assume that allocation of memory always succeeds, i.e., alloca and malloc never return null pointers and allocation of constant size arrays cannot lead to undefined behavior. Moreover, read access to allocated, but uninitialized memory is assumed to just return a non-deterministic value.&lt;br /&gt;
&lt;br /&gt;
*    We assume the following sizes of primitive data types:&lt;br /&gt;
     bool: 8 bit&lt;br /&gt;
     char: 8 bit&lt;br /&gt;
     short: 16 bit&lt;br /&gt;
     int: 32 bit&lt;br /&gt;
     long: 64 bit&lt;br /&gt;
     float: 32 bit&lt;br /&gt;
     double: 64 bit&lt;br /&gt;
     pointer: 64 bit&lt;br /&gt;
&lt;br /&gt;
*    Programs where the evaluation order of operations is not defined according to the C standard and where different execution orders of the operations lead to different resulting states are not allowed. As an example, the program&lt;br /&gt;
&lt;br /&gt;
 int main(){&lt;br /&gt;
     int x = 0;&lt;br /&gt;
     while( x++ == x );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
is not allowed since the evaluation order between ++ and == is not defined according to the C standard and if ++ is evaluated first, the program terminates whereas it does not if == is evaluated first. To enable an automatic check for such programs, we disallow all programs &amp;lt;P&amp;gt; where the execution of gcc -c -std=c99 -Wsequence-point &amp;lt;P&amp;gt; shows a warning.&lt;br /&gt;
&lt;br /&gt;
*    The scoring should be the same as in all other categories (proving termination or non-termination both gives 1 point and there will be a penalty for wrong answers). &lt;br /&gt;
&lt;br /&gt;
*    Time limit: 300 seconds.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Section D. of [http://sv-comp.sosy-lab.org/2014/demo.php Termination Competition on Software Verification (SV-COMP)]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1576</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1576"/>
		<updated>2015-07-06T17:36:50Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: parse expressions from left to right when there are no parantheses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we introduce a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following ANTLR grammar, which can also be used to automatically build a parser:&lt;br /&gt;
&lt;br /&gt;
 /*   Type:        ANTLR&lt;br /&gt;
  *   Title:       Grammar for C Integer Programs&lt;br /&gt;
  *   Description: A grammar definiton for C integer programs&lt;br /&gt;
  *   Project:     AProVE&lt;br /&gt;
  *   Authors:     Thomas Ströder&lt;br /&gt;
  *   Copyright:   Copyright (c) 2015&lt;br /&gt;
  *   Department:  RWTH Aachen / Templergraben 55 / D-52056 Aachen&lt;br /&gt;
  *&lt;br /&gt;
  * The following license text is based on the &amp;quot;BSD licence&amp;quot;.&lt;br /&gt;
  *&lt;br /&gt;
  * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
  * modification, are permitted provided that the following conditions&lt;br /&gt;
  * are met:&lt;br /&gt;
  * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
  * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
  *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
  * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
  *    derived from this software without specific prior written permission.&lt;br /&gt;
  *&lt;br /&gt;
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 grammar IntProg;&lt;br /&gt;
 &lt;br /&gt;
 // parser rules&lt;br /&gt;
 &lt;br /&gt;
 nondet : NONDETNAME W* OPENP W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 num_atom : ZERO | POS | nondet | V | OPENP W* bool_expr W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 mult_expr : num_atom (W* MULT W* num_atom)*;&lt;br /&gt;
 &lt;br /&gt;
 num_expr : mult_expr (W* (PLUS | MINUS) W* mult_expr)* | MINUS W* mult_expr (W* (PLUS | MINUS) W* mult_expr)*;&lt;br /&gt;
 &lt;br /&gt;
 bool_atom : TRUE | FALSE | num_expr (W* BO W* num_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 and_expr : bool_atom (W* AND W* bool_atom)*;&lt;br /&gt;
 &lt;br /&gt;
 bool_expr : and_expr (W* OR W* and_expr)* | NOT W* bool_atom;&lt;br /&gt;
 &lt;br /&gt;
 loop : WHILE W* OPENP W* bool_expr W* CLOSEP W* OPENC W* (instructions W*)? CLOSEC;&lt;br /&gt;
 &lt;br /&gt;
 condition :&lt;br /&gt;
     IF&lt;br /&gt;
     W*&lt;br /&gt;
     OPENP W* bool_expr W* CLOSEP&lt;br /&gt;
     W*&lt;br /&gt;
     OPENC W* (instructions W*)? CLOSEC&lt;br /&gt;
     (W* ELSE W* OPENC W* (instructions W*)? CLOSEC)?;&lt;br /&gt;
 &lt;br /&gt;
 assignment : V W* ASSIGN W* num_expr W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 instruction : loop | condition | assignment;&lt;br /&gt;
 &lt;br /&gt;
 declaration : INT W+ V (W* COMMA W* V)* W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 declarations : declaration (W* declarations)?;&lt;br /&gt;
 &lt;br /&gt;
 instructions : instruction (W* instructions)?;&lt;br /&gt;
 &lt;br /&gt;
 // the opening part of each program &lt;br /&gt;
 // (&amp;quot;typedef enum {false,true} bool;extern int __VERIFIER_nondet_int(void);int main(){&amp;quot;)&lt;br /&gt;
 pre :&lt;br /&gt;
     W*&lt;br /&gt;
     TYPEDEF W+ ENUM W* OPENC W* FALSE W* COMMA W* TRUE W* CLOSEC W* BOOL W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     EXTERN W+ INT W+ NONDETNAME W* OPENP W* VOID W* CLOSEP W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     INT W+ MAIN W* OPENP W* CLOSEP W* OPENC;&lt;br /&gt;
 &lt;br /&gt;
 // the closing part of each program (&amp;quot;return 0;}&amp;quot;)&lt;br /&gt;
 post : RETURN W+ ZERO W* TERMINATOR W* CLOSEC W*;&lt;br /&gt;
 &lt;br /&gt;
 program : pre (W* declarations)? (W* instructions)? W* post;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // lexer rules&lt;br /&gt;
 &lt;br /&gt;
 INT : 'int';&lt;br /&gt;
 IF : 'if';&lt;br /&gt;
 WHILE : 'while';&lt;br /&gt;
 ELSE : 'else';&lt;br /&gt;
 TERMINATOR : ';';&lt;br /&gt;
 OPENP : '(';&lt;br /&gt;
 CLOSEP : ')';&lt;br /&gt;
 OPENC : '{';&lt;br /&gt;
 CLOSEC : '}';&lt;br /&gt;
 MULT : '*';&lt;br /&gt;
 MINUS : '-';&lt;br /&gt;
 PLUS : '+';&lt;br /&gt;
 BO : '&amp;lt;=' | '&amp;gt;=' | '&amp;lt;' | '&amp;gt;' | '==' | '!=';&lt;br /&gt;
 ASSIGN : '=';&lt;br /&gt;
 NONDETNAME : '__VERIFIER_nondet_int';&lt;br /&gt;
 OR : '||';&lt;br /&gt;
 AND : '&amp;amp;&amp;amp;';&lt;br /&gt;
 NOT : '!';&lt;br /&gt;
 TRUE : 'true';&lt;br /&gt;
 FALSE : 'false';&lt;br /&gt;
 TYPEDEF : 'typedef';&lt;br /&gt;
 ENUM : 'enum';&lt;br /&gt;
 COMMA : ',';&lt;br /&gt;
 BOOL : 'bool';&lt;br /&gt;
 EXTERN : 'extern';&lt;br /&gt;
 VOID : 'void';&lt;br /&gt;
 MAIN : 'main';&lt;br /&gt;
 RETURN : 'return';&lt;br /&gt;
 ZERO : '0';&lt;br /&gt;
 POSITIVE : NONZERO DIGIT*;&lt;br /&gt;
 fragment NONZERO : '1'..'9';&lt;br /&gt;
 fragment DIGIT : ZERO | NONZERO;&lt;br /&gt;
 V : CHAR ALPHANUM*;&lt;br /&gt;
 fragment ALPHANUM : CHAR | DIGIT;&lt;br /&gt;
 fragment CHAR : LOW | UP;&lt;br /&gt;
 fragment LOW : 'a'..'z';&lt;br /&gt;
 fragment UP: 'A'..'Z';&lt;br /&gt;
 W : ' ' | '\n' | '\r' | '\t';&lt;br /&gt;
 BLOCKCOMMENT : '/*' (.)* '*/' {$channel=HIDDEN;};&lt;br /&gt;
 LINECOMMENT : '//' (~('\r'|'\n'))* {$channel=HIDDEN;};&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used. So while the grammar above allows, e.g., nesting of boolean expressions inside arithmetic expressions (to make the automated generation of a parser easier), such programs have no defined semantics and are excluded from benchmarks for the competition.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1575</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1575"/>
		<updated>2015-07-06T16:51:24Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: allow negative mutliplicative expressions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we introduce a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following ANTLR grammar, which can also be used to automatically build a parser:&lt;br /&gt;
&lt;br /&gt;
 /*   Type:        ANTLR&lt;br /&gt;
  *   Title:       Grammar for C Integer Programs&lt;br /&gt;
  *   Description: A grammar definiton for C integer programs&lt;br /&gt;
  *   Project:     AProVE&lt;br /&gt;
  *   Authors:     Thomas Ströder&lt;br /&gt;
  *   Copyright:   Copyright (c) 2015&lt;br /&gt;
  *   Department:  RWTH Aachen / Templergraben 55 / D-52056 Aachen&lt;br /&gt;
  *&lt;br /&gt;
  * The following license text is based on the &amp;quot;BSD licence&amp;quot;.&lt;br /&gt;
  *&lt;br /&gt;
  * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
  * modification, are permitted provided that the following conditions&lt;br /&gt;
  * are met:&lt;br /&gt;
  * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
  * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
  *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
  * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
  *    derived from this software without specific prior written permission.&lt;br /&gt;
  *&lt;br /&gt;
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 grammar IntProg;&lt;br /&gt;
 &lt;br /&gt;
 // parser rules&lt;br /&gt;
 &lt;br /&gt;
 nondet : NONDETNAME W* OPENP W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 num_atom : ZERO | POS | nondet | V | OPENP W* bool_expr W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 mult_expr : num_atom (W* MULT W* mult_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 num_expr : mult_expr (W* (PLUS | MINUS) W* num_expr)? | MINUS W* mult_expr;&lt;br /&gt;
 &lt;br /&gt;
 bool_atom : TRUE | FALSE | num_expr (W* BO W* num_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 and_expr : bool_atom (W* AND W* and_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 bool_expr : and_expr (W* OR W* bool_expr)? | NOT W* bool_atom;&lt;br /&gt;
 &lt;br /&gt;
 loop : WHILE W* OPENP W* bool_expr W* CLOSEP W* OPENC W* (instructions W*)? CLOSEC;&lt;br /&gt;
 &lt;br /&gt;
 condition :&lt;br /&gt;
     IF&lt;br /&gt;
     W*&lt;br /&gt;
     OPENP W* bool_expr W* CLOSEP&lt;br /&gt;
     W*&lt;br /&gt;
     OPENC W* (instructions W*)? CLOSEC&lt;br /&gt;
     (W* ELSE W* OPENC W* (instructions W*)? CLOSEC)?;&lt;br /&gt;
 &lt;br /&gt;
 assignment : V W* ASSIGN W* num_expr W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 instruction : loop | condition | assignment;&lt;br /&gt;
 &lt;br /&gt;
 declaration : INT W+ V (W* COMMA W* V)* W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 declarations : declaration (W* declarations)?;&lt;br /&gt;
 &lt;br /&gt;
 instructions : instruction (W* instructions)?;&lt;br /&gt;
 &lt;br /&gt;
 // the opening part of each program &lt;br /&gt;
 // (&amp;quot;typedef enum {false,true} bool;extern int __VERIFIER_nondet_int(void);int main(){&amp;quot;)&lt;br /&gt;
 pre :&lt;br /&gt;
     W*&lt;br /&gt;
     TYPEDEF W+ ENUM W* OPENC W* FALSE W* COMMA W* TRUE W* CLOSEC W* BOOL W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     EXTERN W+ INT W+ NONDETNAME W* OPENP W* VOID W* CLOSEP W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     INT W+ MAIN W* OPENP W* CLOSEP W* OPENC;&lt;br /&gt;
 &lt;br /&gt;
 // the closing part of each program (&amp;quot;return 0;}&amp;quot;)&lt;br /&gt;
 post : RETURN W+ ZERO W* TERMINATOR W* CLOSEC W*;&lt;br /&gt;
 &lt;br /&gt;
 program : pre (W* declarations)? (W* instructions)? W* post;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // lexer rules&lt;br /&gt;
 &lt;br /&gt;
 INT : 'int';&lt;br /&gt;
 IF : 'if';&lt;br /&gt;
 WHILE : 'while';&lt;br /&gt;
 ELSE : 'else';&lt;br /&gt;
 TERMINATOR : ';';&lt;br /&gt;
 OPENP : '(';&lt;br /&gt;
 CLOSEP : ')';&lt;br /&gt;
 OPENC : '{';&lt;br /&gt;
 CLOSEC : '}';&lt;br /&gt;
 MULT : '*';&lt;br /&gt;
 MINUS : '-';&lt;br /&gt;
 PLUS : '+';&lt;br /&gt;
 BO : '&amp;lt;=' | '&amp;gt;=' | '&amp;lt;' | '&amp;gt;' | '==' | '!=';&lt;br /&gt;
 ASSIGN : '=';&lt;br /&gt;
 NONDETNAME : '__VERIFIER_nondet_int';&lt;br /&gt;
 OR : '||';&lt;br /&gt;
 AND : '&amp;amp;&amp;amp;';&lt;br /&gt;
 NOT : '!';&lt;br /&gt;
 TRUE : 'true';&lt;br /&gt;
 FALSE : 'false';&lt;br /&gt;
 TYPEDEF : 'typedef';&lt;br /&gt;
 ENUM : 'enum';&lt;br /&gt;
 COMMA : ',';&lt;br /&gt;
 BOOL : 'bool';&lt;br /&gt;
 EXTERN : 'extern';&lt;br /&gt;
 VOID : 'void';&lt;br /&gt;
 MAIN : 'main';&lt;br /&gt;
 RETURN : 'return';&lt;br /&gt;
 ZERO : '0';&lt;br /&gt;
 POSITIVE : NONZERO DIGIT*;&lt;br /&gt;
 fragment NONZERO : '1'..'9';&lt;br /&gt;
 fragment DIGIT : ZERO | NONZERO;&lt;br /&gt;
 V : CHAR ALPHANUM*;&lt;br /&gt;
 fragment ALPHANUM : CHAR | DIGIT;&lt;br /&gt;
 fragment CHAR : LOW | UP;&lt;br /&gt;
 fragment LOW : 'a'..'z';&lt;br /&gt;
 fragment UP: 'A'..'Z';&lt;br /&gt;
 W : ' ' | '\n' | '\r' | '\t';&lt;br /&gt;
 BLOCKCOMMENT : '/*' (.)* '*/' {$channel=HIDDEN;};&lt;br /&gt;
 LINECOMMENT : '//' (~('\r'|'\n'))* {$channel=HIDDEN;};&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used. So while the grammar above allows, e.g., nesting of boolean expressions inside arithmetic expressions (to make the automated generation of a parser easier), such programs have no defined semantics and are excluded from benchmarks for the competition.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1574</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1574"/>
		<updated>2015-07-06T16:21:58Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: allow chaining of expressions without parantheses (e.g., 1 + 1 + 1 instead of 1 + (1 + 1))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we introduce a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following ANTLR grammar, which can also be used to automatically build a parser:&lt;br /&gt;
&lt;br /&gt;
 /*   Type:        ANTLR&lt;br /&gt;
  *   Title:       Grammar for C Integer Programs&lt;br /&gt;
  *   Description: A grammar definiton for C integer programs&lt;br /&gt;
  *   Project:     AProVE&lt;br /&gt;
  *   Authors:     Thomas Ströder&lt;br /&gt;
  *   Copyright:   Copyright (c) 2015&lt;br /&gt;
  *   Department:  RWTH Aachen / Templergraben 55 / D-52056 Aachen&lt;br /&gt;
  *&lt;br /&gt;
  * The following license text is based on the &amp;quot;BSD licence&amp;quot;.&lt;br /&gt;
  *&lt;br /&gt;
  * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
  * modification, are permitted provided that the following conditions&lt;br /&gt;
  * are met:&lt;br /&gt;
  * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
  * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
  *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
  * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
  *    derived from this software without specific prior written permission.&lt;br /&gt;
  *&lt;br /&gt;
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 grammar IntProg;&lt;br /&gt;
 &lt;br /&gt;
 // parser rules&lt;br /&gt;
 &lt;br /&gt;
 nondet : NONDETNAME W* OPENP W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 num_atom : ZERO | POS | nondet | V | OPENP W* bool_expr W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 mult_expr : num_atom (W* MULT W* mult_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 num_expr : mult_expr (W* (PLUS | MINUS) W* num_expr)? | MINUS W* num_atom;&lt;br /&gt;
 &lt;br /&gt;
 bool_atom : TRUE | FALSE | num_expr (W* BO W* num_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 and_expr : bool_atom (W* AND W* and_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 bool_expr : and_expr (W* OR W* bool_expr)? | NOT W* bool_atom;&lt;br /&gt;
 &lt;br /&gt;
 loop : WHILE W* OPENP W* bool_expr W* CLOSEP W* OPENC W* (instructions W*)? CLOSEC;&lt;br /&gt;
 &lt;br /&gt;
 condition :&lt;br /&gt;
     IF&lt;br /&gt;
     W*&lt;br /&gt;
     OPENP W* bool_expr W* CLOSEP&lt;br /&gt;
     W*&lt;br /&gt;
     OPENC W* (instructions W*)? CLOSEC&lt;br /&gt;
     (W* ELSE W* OPENC W* (instructions W*)? CLOSEC)?;&lt;br /&gt;
 &lt;br /&gt;
 assignment : V W* ASSIGN W* num_expr W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 instruction : loop | condition | assignment;&lt;br /&gt;
 &lt;br /&gt;
 declaration : INT W+ V (W* COMMA W* V)* W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 declarations : declaration (W* declarations)?;&lt;br /&gt;
 &lt;br /&gt;
 instructions : instruction (W* instructions)?;&lt;br /&gt;
 &lt;br /&gt;
 // the opening part of each program &lt;br /&gt;
 // (&amp;quot;typedef enum {false,true} bool;extern int __VERIFIER_nondet_int(void);int main(){&amp;quot;)&lt;br /&gt;
 pre :&lt;br /&gt;
     W*&lt;br /&gt;
     TYPEDEF W+ ENUM W* OPENC W* FALSE W* COMMA W* TRUE W* CLOSEC W* BOOL W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     EXTERN W+ INT W+ NONDETNAME W* OPENP W* VOID W* CLOSEP W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     INT W+ MAIN W* OPENP W* CLOSEP W* OPENC;&lt;br /&gt;
 &lt;br /&gt;
 // the closing part of each program (&amp;quot;return 0;}&amp;quot;)&lt;br /&gt;
 post : RETURN W+ ZERO W* TERMINATOR W* CLOSEC W*;&lt;br /&gt;
 &lt;br /&gt;
 program : pre (W* declarations)? (W* instructions)? W* post;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // lexer rules&lt;br /&gt;
 &lt;br /&gt;
 INT : 'int';&lt;br /&gt;
 IF : 'if';&lt;br /&gt;
 WHILE : 'while';&lt;br /&gt;
 ELSE : 'else';&lt;br /&gt;
 TERMINATOR : ';';&lt;br /&gt;
 OPENP : '(';&lt;br /&gt;
 CLOSEP : ')';&lt;br /&gt;
 OPENC : '{';&lt;br /&gt;
 CLOSEC : '}';&lt;br /&gt;
 MULT : '*';&lt;br /&gt;
 MINUS : '-';&lt;br /&gt;
 PLUS : '+';&lt;br /&gt;
 BO : '&amp;lt;=' | '&amp;gt;=' | '&amp;lt;' | '&amp;gt;' | '==' | '!=';&lt;br /&gt;
 ASSIGN : '=';&lt;br /&gt;
 NONDETNAME : '__VERIFIER_nondet_int';&lt;br /&gt;
 OR : '||';&lt;br /&gt;
 AND : '&amp;amp;&amp;amp;';&lt;br /&gt;
 NOT : '!';&lt;br /&gt;
 TRUE : 'true';&lt;br /&gt;
 FALSE : 'false';&lt;br /&gt;
 TYPEDEF : 'typedef';&lt;br /&gt;
 ENUM : 'enum';&lt;br /&gt;
 COMMA : ',';&lt;br /&gt;
 BOOL : 'bool';&lt;br /&gt;
 EXTERN : 'extern';&lt;br /&gt;
 VOID : 'void';&lt;br /&gt;
 MAIN : 'main';&lt;br /&gt;
 RETURN : 'return';&lt;br /&gt;
 ZERO : '0';&lt;br /&gt;
 POSITIVE : NONZERO DIGIT*;&lt;br /&gt;
 fragment NONZERO : '1'..'9';&lt;br /&gt;
 fragment DIGIT : ZERO | NONZERO;&lt;br /&gt;
 V : CHAR ALPHANUM*;&lt;br /&gt;
 fragment ALPHANUM : CHAR | DIGIT;&lt;br /&gt;
 fragment CHAR : LOW | UP;&lt;br /&gt;
 fragment LOW : 'a'..'z';&lt;br /&gt;
 fragment UP: 'A'..'Z';&lt;br /&gt;
 W : ' ' | '\n' | '\r' | '\t';&lt;br /&gt;
 BLOCKCOMMENT : '/*' (.)* '*/' {$channel=HIDDEN;};&lt;br /&gt;
 LINECOMMENT : '//' (~('\r'|'\n'))* {$channel=HIDDEN;};&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used. So while the grammar above allows, e.g., nesting of boolean expressions inside arithmetic expressions (to make the automated generation of a parser easier), such programs have no defined semantics and are excluded from benchmarks for the competition.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1571</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1571"/>
		<updated>2015-07-06T09:44:55Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: also allow comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we introduce a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following ANTLR grammar, which can also be used to automatically build a parser:&lt;br /&gt;
&lt;br /&gt;
 /*   Type:        ANTLR&lt;br /&gt;
  *   Title:       Grammar for C Integer Programs&lt;br /&gt;
  *   Description: A grammar definiton for C integer programs&lt;br /&gt;
  *   Project:     AProVE&lt;br /&gt;
  *   Authors:     Thomas Ströder&lt;br /&gt;
  *   Copyright:   Copyright (c) 2015&lt;br /&gt;
  *   Department:  RWTH Aachen / Templergraben 55 / D-52056 Aachen&lt;br /&gt;
  *&lt;br /&gt;
  * The following license text is based on the &amp;quot;BSD licence&amp;quot;.&lt;br /&gt;
  *&lt;br /&gt;
  * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
  * modification, are permitted provided that the following conditions&lt;br /&gt;
  * are met:&lt;br /&gt;
  * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
  * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
  *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
  * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
  *    derived from this software without specific prior written permission.&lt;br /&gt;
  *&lt;br /&gt;
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 grammar IntProg;&lt;br /&gt;
 &lt;br /&gt;
 // parser rules&lt;br /&gt;
 &lt;br /&gt;
 nondet : NONDETNAME W* OPENP W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 num_atom : ZERO | POS | nondet | V | OPENP W* bool_expr W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 mult_expr : num_atom (W* MULT W* num_atom)?;&lt;br /&gt;
 &lt;br /&gt;
 num_expr : mult_expr (W* (PLUS | MINUS) W* num_expr)? | MINUS W* num_atom;&lt;br /&gt;
 &lt;br /&gt;
 bool_atom : TRUE | FALSE | num_expr (W* BO W* num_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 and_expr : bool_atom (W* AND W* bool_atom)?;&lt;br /&gt;
 &lt;br /&gt;
 bool_expr : and_expr (W* OR W* and_expr)? | NOT W* bool_atom;&lt;br /&gt;
 &lt;br /&gt;
 loop : WHILE W* OPENP W* bool_expr W* CLOSEP W* OPENC W* (instructions W*)? CLOSEC;&lt;br /&gt;
 &lt;br /&gt;
 condition :&lt;br /&gt;
     IF&lt;br /&gt;
     W*&lt;br /&gt;
     OPENP W* bool_expr W* CLOSEP&lt;br /&gt;
     W*&lt;br /&gt;
     OPENC W* (instructions W*)? CLOSEC&lt;br /&gt;
     (W* ELSE W* OPENC W* (instructions W*)? CLOSEC)?;&lt;br /&gt;
 &lt;br /&gt;
 assignment : V W* ASSIGN W* num_expr W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 instruction : loop | condition | assignment;&lt;br /&gt;
 &lt;br /&gt;
 declaration : INT W+ V (W* COMMA W* V)* W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 declarations : declaration (W* declarations)?;&lt;br /&gt;
 &lt;br /&gt;
 instructions : instruction (W* instructions)?;&lt;br /&gt;
 &lt;br /&gt;
 // the opening part of each program &lt;br /&gt;
 // (&amp;quot;typedef enum {false,true} bool;extern int __VERIFIER_nondet_int(void);int main(){&amp;quot;)&lt;br /&gt;
 pre :&lt;br /&gt;
     W*&lt;br /&gt;
     TYPEDEF W+ ENUM W* OPENC W* FALSE W* COMMA W* TRUE W* CLOSEC W* BOOL W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     EXTERN W+ INT W+ NONDETNAME W* OPENP W* VOID W* CLOSEP W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     INT W+ MAIN W* OPENP W* CLOSEP W* OPENC;&lt;br /&gt;
 &lt;br /&gt;
 // the closing part of each program (&amp;quot;return 0;}&amp;quot;)&lt;br /&gt;
 post : RETURN W+ ZERO W* TERMINATOR W* CLOSEC W*;&lt;br /&gt;
 &lt;br /&gt;
 program : pre (W* declarations)? (W* instructions)? W* post;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // lexer rules&lt;br /&gt;
 &lt;br /&gt;
 INT : 'int';&lt;br /&gt;
 IF : 'if';&lt;br /&gt;
 WHILE : 'while';&lt;br /&gt;
 ELSE : 'else';&lt;br /&gt;
 TERMINATOR : ';';&lt;br /&gt;
 OPENP : '(';&lt;br /&gt;
 CLOSEP : ')';&lt;br /&gt;
 OPENC : '{';&lt;br /&gt;
 CLOSEC : '}';&lt;br /&gt;
 MULT : '*';&lt;br /&gt;
 MINUS : '-';&lt;br /&gt;
 PLUS : '+';&lt;br /&gt;
 BO : '&amp;lt;=' | '&amp;gt;=' | '&amp;lt;' | '&amp;gt;' | '==' | '!=';&lt;br /&gt;
 ASSIGN : '=';&lt;br /&gt;
 NONDETNAME : '__VERIFIER_nondet_int';&lt;br /&gt;
 OR : '||';&lt;br /&gt;
 AND : '&amp;amp;&amp;amp;';&lt;br /&gt;
 NOT : '!';&lt;br /&gt;
 TRUE : 'true';&lt;br /&gt;
 FALSE : 'false';&lt;br /&gt;
 TYPEDEF : 'typedef';&lt;br /&gt;
 ENUM : 'enum';&lt;br /&gt;
 COMMA : ',';&lt;br /&gt;
 BOOL : 'bool';&lt;br /&gt;
 EXTERN : 'extern';&lt;br /&gt;
 VOID : 'void';&lt;br /&gt;
 MAIN : 'main';&lt;br /&gt;
 RETURN : 'return';&lt;br /&gt;
 ZERO : '0';&lt;br /&gt;
 POSITIVE : NONZERO DIGIT*;&lt;br /&gt;
 fragment NONZERO : '1'..'9';&lt;br /&gt;
 fragment DIGIT : ZERO | NONZERO;&lt;br /&gt;
 V : CHAR ALPHANUM*;&lt;br /&gt;
 fragment ALPHANUM : CHAR | DIGIT;&lt;br /&gt;
 fragment CHAR : LOW | UP;&lt;br /&gt;
 fragment LOW : 'a'..'z';&lt;br /&gt;
 fragment UP: 'A'..'Z';&lt;br /&gt;
 W : ' ' | '\n' | '\r' | '\t';&lt;br /&gt;
 BLOCKCOMMENT : '/*' (.)* '*/' {$channel=HIDDEN;};&lt;br /&gt;
 LINECOMMENT : '//' (~('\r'|'\n'))* {$channel=HIDDEN;};&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used. So while the grammar above allows, e.g., nesting of boolean expressions inside arithmetic expressions (to make the automated generation of a parser easier), such programs have no defined semantics and are excluded from benchmarks for the competition.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1567</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1567"/>
		<updated>2015-07-03T15:29:17Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: provide ANTLR grammar to fix issues with old grammar and make it easier for other participants to build a parser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we introduce a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following ANTLR grammar, which can also be used to automatically build a parser:&lt;br /&gt;
&lt;br /&gt;
 /*   Type:        ANTLR&lt;br /&gt;
  *   Title:       Grammar for C Integer Programs&lt;br /&gt;
  *   Description: A grammar definiton for C integer programs&lt;br /&gt;
  *   Project:     AProVE&lt;br /&gt;
  *   Authors:     Thomas Ströder&lt;br /&gt;
  *   Copyright:   Copyright (c) 2015&lt;br /&gt;
  *   Department:  RWTH Aachen / Templergraben 55 / D-52056 Aachen&lt;br /&gt;
  *&lt;br /&gt;
  * The following license text is based on the &amp;quot;BSD licence&amp;quot;.&lt;br /&gt;
  *&lt;br /&gt;
  * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
  * modification, are permitted provided that the following conditions&lt;br /&gt;
  * are met:&lt;br /&gt;
  * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
  * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
  *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
  *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
  * 3. The name of the author may not be used to endorse or promote products&lt;br /&gt;
  *    derived from this software without specific prior written permission.&lt;br /&gt;
  *&lt;br /&gt;
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 grammar IntProg;&lt;br /&gt;
 &lt;br /&gt;
 // parser rules&lt;br /&gt;
 &lt;br /&gt;
 nondet : NONDETNAME W* OPENP W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 num_atom : ZERO | POS | nondet | V | OPENP W* bool_expr W* CLOSEP;&lt;br /&gt;
 &lt;br /&gt;
 mult_expr : num_atom (W* MULT W* num_atom)?;&lt;br /&gt;
 &lt;br /&gt;
 num_expr : mult_expr (W* (PLUS | MINUS) W* num_expr)? | MINUS W* num_atom;&lt;br /&gt;
 &lt;br /&gt;
 bool_atom : TRUE | FALSE | num_expr (W* BO W* num_expr)?;&lt;br /&gt;
 &lt;br /&gt;
 and_expr : bool_atom (W* AND W* bool_atom)?;&lt;br /&gt;
 &lt;br /&gt;
 bool_expr : and_expr (W* OR W* and_expr)? | NOT W* bool_atom;&lt;br /&gt;
 &lt;br /&gt;
 loop : WHILE W* OPENP W* bool_expr W* CLOSEP W* OPENC W* (instructions W*)? CLOSEC;&lt;br /&gt;
 &lt;br /&gt;
 condition :&lt;br /&gt;
     IF&lt;br /&gt;
     W*&lt;br /&gt;
     OPENP W* bool_expr W* CLOSEP&lt;br /&gt;
     W*&lt;br /&gt;
     OPENC W* (instructions W*)? CLOSEC&lt;br /&gt;
     (W* ELSE W* OPENC W* (instructions W*)? CLOSEC)?;&lt;br /&gt;
 &lt;br /&gt;
 assignment : V W* ASSIGN W* num_expr W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 instruction : loop | condition | assignment;&lt;br /&gt;
 &lt;br /&gt;
 declaration : INT W+ V (W* COMMA W* V)* W* TERMINATOR;&lt;br /&gt;
 &lt;br /&gt;
 declarations : declaration (W* declarations)?;&lt;br /&gt;
 &lt;br /&gt;
 instructions : instruction (W* instructions)?;&lt;br /&gt;
 &lt;br /&gt;
 // the opening part of each program &lt;br /&gt;
 // (&amp;quot;typedef enum {false,true} bool;extern int __VERIFIER_nondet_int(void);int main(){&amp;quot;)&lt;br /&gt;
 pre :&lt;br /&gt;
     W*&lt;br /&gt;
     TYPEDEF W+ ENUM W* OPENC W* FALSE W* COMMA W* TRUE W* CLOSEC W* BOOL W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     EXTERN W+ INT W+ NONDETNAME W* OPENP W* VOID W* CLOSEP W* TERMINATOR&lt;br /&gt;
     W*&lt;br /&gt;
     INT W+ MAIN W* OPENP W* CLOSEP W* OPENC;&lt;br /&gt;
 &lt;br /&gt;
 // the closing part of each program (&amp;quot;return 0;}&amp;quot;)&lt;br /&gt;
 post : RETURN W+ ZERO W* TERMINATOR W* CLOSEC W*;&lt;br /&gt;
 &lt;br /&gt;
 program : pre (W* declarations)? (W* instructions)? W* post;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // lexer rules&lt;br /&gt;
 &lt;br /&gt;
 INT : 'int';&lt;br /&gt;
 IF : 'if';&lt;br /&gt;
 WHILE : 'while';&lt;br /&gt;
 ELSE : 'else';&lt;br /&gt;
 TERMINATOR : ';';&lt;br /&gt;
 OPENP : '(';&lt;br /&gt;
 CLOSEP : ')';&lt;br /&gt;
 OPENC : '{';&lt;br /&gt;
 CLOSEC : '}';&lt;br /&gt;
 MULT : '*';&lt;br /&gt;
 MINUS : '-';&lt;br /&gt;
 PLUS : '+';&lt;br /&gt;
 BO : '&amp;lt;=' | '&amp;gt;=' | '&amp;lt;' | '&amp;gt;' | '==' | '!=';&lt;br /&gt;
 ASSIGN : '=';&lt;br /&gt;
 NONDETNAME : '__VERIFIER_nondet_int';&lt;br /&gt;
 OR : '||';&lt;br /&gt;
 AND : '&amp;amp;&amp;amp;';&lt;br /&gt;
 NOT : '!';&lt;br /&gt;
 TRUE : 'true';&lt;br /&gt;
 FALSE : 'false';&lt;br /&gt;
 TYPEDEF : 'typedef';&lt;br /&gt;
 ENUM : 'enum';&lt;br /&gt;
 COMMA : ',';&lt;br /&gt;
 BOOL : 'bool';&lt;br /&gt;
 EXTERN : 'extern';&lt;br /&gt;
 VOID : 'void';&lt;br /&gt;
 MAIN : 'main';&lt;br /&gt;
 RETURN : 'return';&lt;br /&gt;
 ZERO : '0';&lt;br /&gt;
 POSITIVE : NONZERO DIGIT*;&lt;br /&gt;
 fragment NONZERO : '1'..'9';&lt;br /&gt;
 fragment DIGIT : ZERO | NONZERO;&lt;br /&gt;
 V : CHAR ALPHANUM*;&lt;br /&gt;
 fragment ALPHANUM : CHAR | DIGIT;&lt;br /&gt;
 fragment CHAR : LOW | UP;&lt;br /&gt;
 fragment LOW : 'a'..'z';&lt;br /&gt;
 fragment UP: 'A'..'Z';&lt;br /&gt;
 W : ' ' | '\n' | '\r' | '\t';&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used. So while the grammar above allows, e.g., nesting of boolean expressions inside arithmetic expressions (to make the automated generation of a parser easier), such programs have no defined semantics and are excluded from benchmarks for the competition.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1541</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1541"/>
		<updated>2015-06-22T13:11:23Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we propose a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following non-terminals:&lt;br /&gt;
&lt;br /&gt;
;P&lt;br /&gt;
: Program&lt;br /&gt;
;PRE&lt;br /&gt;
: Start of the program, including the declaration of an external function for non-deterministic values&lt;br /&gt;
;POST&lt;br /&gt;
: The end of the program&lt;br /&gt;
;D&lt;br /&gt;
: Variable declaration&lt;br /&gt;
;V&lt;br /&gt;
: Variable name&lt;br /&gt;
;INS&lt;br /&gt;
: Instruction&lt;br /&gt;
;A&lt;br /&gt;
: Assignment&lt;br /&gt;
;L&lt;br /&gt;
: Loop&lt;br /&gt;
;C&lt;br /&gt;
: Condition&lt;br /&gt;
;NE&lt;br /&gt;
: Numerical expression&lt;br /&gt;
;N&lt;br /&gt;
: Number&lt;br /&gt;
;BE&lt;br /&gt;
: Boolean expression&lt;br /&gt;
;NO&lt;br /&gt;
: Numerical operator&lt;br /&gt;
;BO&lt;br /&gt;
: Boolean operator&lt;br /&gt;
;BC&lt;br /&gt;
: Boolean connective&lt;br /&gt;
;W&lt;br /&gt;
: Whitespace&lt;br /&gt;
&lt;br /&gt;
The grammar is then (EBNF-like):&lt;br /&gt;
 P = PRE D* W? INS* POST&lt;br /&gt;
 PRE = W?&lt;br /&gt;
       &amp;quot;extern&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;__VERIFIER_nondet_int&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;void&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;;&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;main&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;{&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
 POST = W? &amp;quot;return&amp;quot; W &amp;quot;0&amp;quot; W? &amp;quot;;&amp;quot; W? &amp;quot;}&amp;quot; W?&lt;br /&gt;
 D = &amp;quot;int&amp;quot; W V W? &amp;quot;;&amp;quot;&lt;br /&gt;
 V = [a-z,A-Z] [a-z,A-Z,0-9]*&lt;br /&gt;
 INS = (A | L | C) W? &amp;quot;;&amp;quot;&lt;br /&gt;
 A = V W? &amp;quot;=&amp;quot; W? NE&lt;br /&gt;
 L = &amp;quot;while&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot;&lt;br /&gt;
 C = &amp;quot;if&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot; (W? &amp;quot;else&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot;)?&lt;br /&gt;
 NE = N | V | NE W? NO W? NE | &amp;quot;(&amp;quot; W? NE W? &amp;quot;)&amp;quot; | &amp;quot;-&amp;quot; W? NE&lt;br /&gt;
 N = 0 | [1-9] [0-9]* | &amp;quot;__VERIFIER_nondet_int&amp;quot; W? &amp;quot;(&amp;quot; W? &amp;quot;)&amp;quot;&lt;br /&gt;
 BE = &amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | NE W? BO W? NE | BE W? BC W? BE | &amp;quot;!&amp;quot; W? BE | &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot;&lt;br /&gt;
 NO = &amp;quot;+&amp;quot; | &amp;quot;-&amp;quot; | &amp;quot;*&amp;quot;&lt;br /&gt;
 BO = &amp;quot;&amp;lt;&amp;quot; | &amp;quot;&amp;gt;&amp;quot; | &amp;quot;&amp;lt;=&amp;quot; | &amp;quot;&amp;gt;=&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 BC = &amp;quot;&amp;amp;&amp;amp;&amp;quot; | &amp;quot;||&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 W = (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;) (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;)*&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics is used.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1540</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1540"/>
		<updated>2015-06-22T13:10:51Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: fix format and grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we propose a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following non-terminals:&lt;br /&gt;
&lt;br /&gt;
;P&lt;br /&gt;
: Program&lt;br /&gt;
;PRE&lt;br /&gt;
: Start of the program, including the declaration of an external function for non-deterministic values&lt;br /&gt;
;POST&lt;br /&gt;
: The end of the program&lt;br /&gt;
;D&lt;br /&gt;
: Variable declaration&lt;br /&gt;
;V&lt;br /&gt;
: Variable name&lt;br /&gt;
;INS&lt;br /&gt;
: Instruction&lt;br /&gt;
;A&lt;br /&gt;
: Assignment&lt;br /&gt;
;L&lt;br /&gt;
: Loop&lt;br /&gt;
;C&lt;br /&gt;
: Condition&lt;br /&gt;
;NE&lt;br /&gt;
: Numerical expression&lt;br /&gt;
;N&lt;br /&gt;
: Number&lt;br /&gt;
;BE&lt;br /&gt;
: Boolean expression&lt;br /&gt;
;NO&lt;br /&gt;
: Numerical operator&lt;br /&gt;
;BO&lt;br /&gt;
: Boolean operator&lt;br /&gt;
;BC&lt;br /&gt;
: Boolean connective&lt;br /&gt;
;W&lt;br /&gt;
: Whitespace&lt;br /&gt;
&lt;br /&gt;
The grammar is then (EBNF-like):&lt;br /&gt;
 P = PRE D* W? INS* POST&lt;br /&gt;
 PRE = W?&lt;br /&gt;
       &amp;quot;extern&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;__VERIFIER_nondet_int&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;void&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;;&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;main&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;{&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
 POST = W? &amp;quot;return&amp;quot; W &amp;quot;0&amp;quot; W? &amp;quot;;&amp;quot; W? &amp;quot;}&amp;quot; W?&lt;br /&gt;
 D = &amp;quot;int&amp;quot; W V W? &amp;quot;;&amp;quot;&lt;br /&gt;
 V = [a-z,A-Z] [a-z,A-Z,0-9]*&lt;br /&gt;
 INS = (A | L | C) W? &amp;quot;;&amp;quot;&lt;br /&gt;
 A = V W? &amp;quot;=&amp;quot; W? NE&lt;br /&gt;
 L = &amp;quot;while&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot;&lt;br /&gt;
 C = &amp;quot;if&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot; (W? &amp;quot;else&amp;quot; W? &amp;quot;{&amp;quot; W? INS* W? &amp;quot;}&amp;quot;)?&lt;br /&gt;
 NE = N | V | NE W? NO W? NE | &amp;quot;(&amp;quot; W? NE W? &amp;quot;)&amp;quot; | &amp;quot;-&amp;quot; W? NE&lt;br /&gt;
 N = 0 | [1-9] [0-9]* | &amp;quot;__VERIFIER_nondet_int&amp;quot; W? &amp;quot;(&amp;quot; W? &amp;quot;)&amp;quot;&lt;br /&gt;
 BE = &amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | NE W? BO W? NE | BE W? BC W? BE | &amp;quot;!&amp;quot; W? BE | &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot;&lt;br /&gt;
 NO = &amp;quot;+&amp;quot; | &amp;quot;-&amp;quot; | &amp;quot;*&amp;quot;&lt;br /&gt;
 BO = &amp;quot;&amp;lt;&amp;quot; | &amp;quot;&amp;gt;&amp;quot; | &amp;quot;&amp;lt;=&amp;quot; | &amp;quot;&amp;gt;=&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 BC = &amp;quot;&amp;amp;&amp;amp;&amp;quot; | &amp;quot;||&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 W = (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;) (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;)*&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics are used.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1539</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1539"/>
		<updated>2015-06-22T13:08:59Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we propose a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following non-terminals:&lt;br /&gt;
&lt;br /&gt;
;P&lt;br /&gt;
: Program&lt;br /&gt;
;PRE&lt;br /&gt;
: Start of the program, including the declaration of an external function for non-deterministic values&lt;br /&gt;
;POST&lt;br /&gt;
: The end of the program&lt;br /&gt;
;D&lt;br /&gt;
: Variable declaration&lt;br /&gt;
;V&lt;br /&gt;
: Variable name&lt;br /&gt;
;INS&lt;br /&gt;
: Instruction&lt;br /&gt;
;A&lt;br /&gt;
: Assignment&lt;br /&gt;
;L&lt;br /&gt;
: Loop&lt;br /&gt;
;C&lt;br /&gt;
: Condition&lt;br /&gt;
;NE&lt;br /&gt;
: Numerical expression&lt;br /&gt;
;N&lt;br /&gt;
: Number&lt;br /&gt;
;BE&lt;br /&gt;
: Boolean expression&lt;br /&gt;
;NO&lt;br /&gt;
: Numerical operator&lt;br /&gt;
;BO&lt;br /&gt;
: Boolean operator&lt;br /&gt;
;BC&lt;br /&gt;
: Boolean connective&lt;br /&gt;
;W&lt;br /&gt;
: Whitespace&lt;br /&gt;
&lt;br /&gt;
The grammar is then (EBNF-like):&lt;br /&gt;
 P = PRE D* W? I* POST&lt;br /&gt;
 PRE = W?&lt;br /&gt;
       &amp;quot;extern&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;__VERIFIER_nondet_int&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;void&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;;&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;int&amp;quot;&lt;br /&gt;
       W&lt;br /&gt;
       &amp;quot;main&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;(&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;)&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
       &amp;quot;{&amp;quot;&lt;br /&gt;
       W?&lt;br /&gt;
 POST = W? &amp;quot;return&amp;quot; W &amp;quot;0&amp;quot; W? &amp;quot;;&amp;quot; W? &amp;quot;}&amp;quot; W?&lt;br /&gt;
 D = &amp;quot;int&amp;quot; W V W? &amp;quot;;&amp;quot;&lt;br /&gt;
 V = [a-z,A-Z] [a-z,A-Z,0-9]*&lt;br /&gt;
 I = (A | L | C) W? &amp;quot;;&amp;quot;&lt;br /&gt;
 A = V W? &amp;quot;=&amp;quot; W? NE&lt;br /&gt;
 L = &amp;quot;while&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;&lt;br /&gt;
 C = &amp;quot;if&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot; (W? &amp;quot;else&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;)?&lt;br /&gt;
 NE = N | V | NE W? NO W? NE | &amp;quot;(&amp;quot; W? NE W? &amp;quot;)&amp;quot; | &amp;quot;-&amp;quot; W? NE&lt;br /&gt;
 N = 0 | [1-9] [0-9]* | &amp;quot;__VERIFIER_nondet_int&amp;quot; W? &amp;quot;(&amp;quot; W? &amp;quot;)&amp;quot;&lt;br /&gt;
 BE = &amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | NE W? BO W? NE | BE W? BC W? BE | &amp;quot;!&amp;quot; W? BE | &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot;&lt;br /&gt;
 NO = &amp;quot;+&amp;quot; | &amp;quot;-&amp;quot; | &amp;quot;*&amp;quot;&lt;br /&gt;
 BO = &amp;quot;&amp;lt;&amp;quot; | &amp;quot;&amp;gt;&amp;quot; | &amp;quot;&amp;lt;=&amp;quot; | &amp;quot;&amp;gt;=&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 BC = &amp;quot;&amp;amp;&amp;amp;&amp;quot; | &amp;quot;||&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
 W = (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;) (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;)*&lt;br /&gt;
&lt;br /&gt;
Calls to &amp;lt;code&amp;gt;__VERIFIER_nondet_int()&amp;lt;/code&amp;gt; yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics are used.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1538</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1538"/>
		<updated>2015-06-22T13:05:20Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Termination Competition 2015, we propose a new category for C programs restricted to a very small subset of C operating only on integers with addition, subtraction, and multiplication. The purpose of this category is twofold: First, it is easier for new participants to first start with a restricted subset of C than directly tackling the whole language. Second, this subset captures all necessary concepts to express integer transition systems as used by many program analysis tools as intermediate representation of programs.&lt;br /&gt;
&lt;br /&gt;
== Syntax and Semantics ==&lt;br /&gt;
&lt;br /&gt;
The syntax of termination problems in this category is defined using the following non-terminals:&lt;br /&gt;
&lt;br /&gt;
P:: Program&lt;br /&gt;
PRE:: Start of the program, including the declaration of an external function for non-deterministic values&lt;br /&gt;
POST:: The end of the program&lt;br /&gt;
D:: Variable declaration&lt;br /&gt;
V:: Variable name&lt;br /&gt;
INS:: Instruction&lt;br /&gt;
A:: Assignment&lt;br /&gt;
L:: Loop&lt;br /&gt;
C:: Condition&lt;br /&gt;
NE:: Numerical expression&lt;br /&gt;
N:: Number&lt;br /&gt;
BE:: Boolean expression&lt;br /&gt;
NO:: Numerical operator&lt;br /&gt;
BO:: Boolean operator&lt;br /&gt;
BC:: Boolean connective&lt;br /&gt;
W:: Whitespace&lt;br /&gt;
&lt;br /&gt;
The grammar is then (EBNF-like):&lt;br /&gt;
{{{&lt;br /&gt;
P = PRE D* W? I* POST&lt;br /&gt;
PRE = W?&lt;br /&gt;
      &amp;quot;extern&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;int&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;__VERIFIER_nondet_int&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;(&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;void&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;)&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;;&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;int&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;main&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;(&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;)&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;{&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
POST = W? &amp;quot;return&amp;quot; W &amp;quot;0&amp;quot; W? &amp;quot;;&amp;quot; W? &amp;quot;}&amp;quot; W?&lt;br /&gt;
D = &amp;quot;int&amp;quot; W V W? &amp;quot;;&amp;quot;&lt;br /&gt;
V = [a-z,A-Z] [a-z,A-Z,0-9]*&lt;br /&gt;
I = (A | L | C) W? &amp;quot;;&amp;quot;&lt;br /&gt;
A = V W? &amp;quot;=&amp;quot; W? NE&lt;br /&gt;
L = &amp;quot;while&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;&lt;br /&gt;
C = &amp;quot;if&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot; (W? &amp;quot;else&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;)?&lt;br /&gt;
NE = N | V | NE W? NO W? NE | &amp;quot;(&amp;quot; W? NE W? &amp;quot;)&amp;quot; | &amp;quot;-&amp;quot; W? NE&lt;br /&gt;
N = 0 | [1-9] [0-9]* | &amp;quot;__VERIFIER_nondet_int&amp;quot; W? &amp;quot;(&amp;quot; W? &amp;quot;)&amp;quot;&lt;br /&gt;
BE = &amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | NE W? BO W? NE | BE W? BC W? BE | &amp;quot;!&amp;quot; W? BE | &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot;&lt;br /&gt;
NO = &amp;quot;+&amp;quot; | &amp;quot;-&amp;quot; | &amp;quot;*&amp;quot;&lt;br /&gt;
BO = &amp;quot;&amp;lt;&amp;quot; | &amp;quot;&amp;gt;&amp;quot; | &amp;quot;&amp;lt;=&amp;quot; | &amp;quot;&amp;gt;=&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
BC = &amp;quot;&amp;amp;&amp;amp;&amp;quot; | &amp;quot;||&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
W = (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;) (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;)*&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Calls to {{{__VERIFIER_nondet_int()}}} yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics are used.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1537</id>
		<title>C Integer Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Integer_Programs&amp;diff=1537"/>
		<updated>2015-06-22T12:57:42Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: Add new page for integer C category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
Non-terminals:&lt;br /&gt;
P: Program&lt;br /&gt;
PRE: Start of the program, including the declaration of an external&lt;br /&gt;
function for non-deterministic values&lt;br /&gt;
POST: The end of the program&lt;br /&gt;
D: Variable declaration&lt;br /&gt;
V: Variable name&lt;br /&gt;
INS: Instruction&lt;br /&gt;
A: Assignment&lt;br /&gt;
L: Loop&lt;br /&gt;
C: Condition&lt;br /&gt;
NE: Numerical expression&lt;br /&gt;
N: Number&lt;br /&gt;
BE: Boolean expression&lt;br /&gt;
NO: Numerical operator&lt;br /&gt;
BO: Boolean operator&lt;br /&gt;
BC: Boolean connective&lt;br /&gt;
W: Whitespace&lt;br /&gt;
&lt;br /&gt;
Grammar:&lt;br /&gt;
P = PRE D* W? I* POST&lt;br /&gt;
PRE = W?&lt;br /&gt;
      &amp;quot;extern&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;int&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;__VERIFIER_nondet_int&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;(&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;void&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;)&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;;&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;int&amp;quot;&lt;br /&gt;
      W&lt;br /&gt;
      &amp;quot;main&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;(&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;)&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
      &amp;quot;{&amp;quot;&lt;br /&gt;
      W?&lt;br /&gt;
POST = W? &amp;quot;return&amp;quot; W &amp;quot;0&amp;quot; W? &amp;quot;;&amp;quot; W? &amp;quot;}&amp;quot; W?&lt;br /&gt;
D = &amp;quot;int&amp;quot; W V W? &amp;quot;;&amp;quot;&lt;br /&gt;
V = [a-z,A-Z] [a-z,A-Z,0-9]*&lt;br /&gt;
I = (A | L | C) W? &amp;quot;;&amp;quot;&lt;br /&gt;
A = V W? &amp;quot;=&amp;quot; W? NE&lt;br /&gt;
L = &amp;quot;while&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;&lt;br /&gt;
C = &amp;quot;if&amp;quot; W? &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot; (W? &amp;quot;else&amp;quot; W? &amp;quot;{&amp;quot; W? I* W? &amp;quot;}&amp;quot;)?&lt;br /&gt;
NE = N | V | NE W? NO W? NE | &amp;quot;(&amp;quot; W? NE W? &amp;quot;)&amp;quot; | &amp;quot;-&amp;quot; W? NE&lt;br /&gt;
N = 0 | [1-9] [0-9]* | &amp;quot;__VERIFIER_nondet_int&amp;quot; W? &amp;quot;(&amp;quot; W? &amp;quot;)&amp;quot;&lt;br /&gt;
BE = &amp;quot;true&amp;quot; | &amp;quot;false&amp;quot; | NE W? BO W? NE | BE W? BC W? BE | &amp;quot;!&amp;quot; W? BE | &amp;quot;(&amp;quot; W? BE W? &amp;quot;)&amp;quot;&lt;br /&gt;
NO = &amp;quot;+&amp;quot; | &amp;quot;-&amp;quot; | &amp;quot;*&amp;quot;&lt;br /&gt;
BO = &amp;quot;&amp;lt;&amp;quot; | &amp;quot;&amp;gt;&amp;quot; | &amp;quot;&amp;lt;=&amp;quot; | &amp;quot;&amp;gt;=&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
BC = &amp;quot;&amp;amp;&amp;amp;&amp;quot; | &amp;quot;||&amp;quot; | &amp;quot;==&amp;quot; | &amp;quot;!=&amp;quot;&lt;br /&gt;
W = (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;) (&amp;quot; &amp;quot; | &amp;quot;\n&amp;quot;)*&lt;br /&gt;
&lt;br /&gt;
Calls to __VERIFIER_nondet_int() yield non-deterministic values (possibly different ones each time the function is called) and each function call terminates without side effects.&lt;br /&gt;
&lt;br /&gt;
Integers are treated as mathematical integers (so no overflows can occur) and apart from that, the C-sematics are used.&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Termination_Competition&amp;diff=1536</id>
		<title>Termination Competition</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Termination_Competition&amp;diff=1536"/>
		<updated>2015-06-22T12:44:30Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: Update upcoming competition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Annual International Termination Competition =&lt;br /&gt;
&lt;br /&gt;
During the 90's a number of new, powerful termination methods&lt;br /&gt;
was developed. Thus, at the the beginning of the millennium&lt;br /&gt;
many research groups started to develop [[:Category:Tools | tools for fully-automated termination analysis]].&lt;br /&gt;
&lt;br /&gt;
After a tool demonstration at the 2003 [[WST|Workshop on Termination]] in Valencia,&lt;br /&gt;
the community decided to install an annual termination competition&lt;br /&gt;
to spur the development of tools and new termination techniques.&lt;br /&gt;
&lt;br /&gt;
From 2004 till 2007, the competition organizer was Claude Marche, [http://www.lri.fr/~marche/termination-competition/ Paris].&lt;br /&gt;
Since 2008 the competition was run by Rene Thiemann, [http://termcomp.uibk.ac.at Innsbruck].&lt;br /&gt;
For 2014, we intend to move to the [https://www.starexec.org/ Star Exec] platform (at U Iowa).&lt;br /&gt;
&lt;br /&gt;
== Upcoming Competitions ==&lt;br /&gt;
&lt;br /&gt;
The [[Termination_Competition_2015|Termination Competition 2015]] will be affiliated with [http://conference.mi.fu-berlin.de/cade-25/home CADE].&lt;br /&gt;
&lt;br /&gt;
== Competition Categories ==&lt;br /&gt;
&lt;br /&gt;
Currently, the competition features the following categories:&lt;br /&gt;
* termination of [[String Rewriting|string]] and [[Term Rewriting|term rewriting]]&lt;br /&gt;
* [[Logic_Programming|termination of logic programs]]&lt;br /&gt;
* [[Certified_Termination|certified termination]] of string and term rewriting (since 2007)&lt;br /&gt;
* [[Functional_Programming|termination of functional programs]] (since 2007)&lt;br /&gt;
* [http://cl-informatik.uibk.ac.at/users/georg/cbr/competition/ complexity of rewrite systems] (since 2008)&lt;br /&gt;
* [[Java_Bytecode|termination of java bytecode programs]] (since 2009)&lt;br /&gt;
* [[Higher_Order|termination of higher order rewriting]] (since 2010)&lt;br /&gt;
Extensions under consideration for 2014&lt;br /&gt;
* [[C Programs]] &lt;br /&gt;
* [[Transition Systems]]&lt;br /&gt;
Longer term plans&lt;br /&gt;
* [[ITRS|integer term rewriting]] &lt;br /&gt;
&lt;br /&gt;
Discussion is open and primarily happens on the termtools mailing list.&lt;br /&gt;
Decisions will be made by votes among the [[Termination Competition Steering Committee]].&lt;br /&gt;
&lt;br /&gt;
== Termination Problems Data Base ==&lt;br /&gt;
&lt;br /&gt;
The [[TPDB|Termination Problems Data Base]] collects all the problems used in the competitions. &lt;br /&gt;
&lt;br /&gt;
We welcome problem submissions from non-participants.&lt;br /&gt;
&lt;br /&gt;
== History of Termination Competitions ==&lt;br /&gt;
&lt;br /&gt;
The following competitions have taken place:&lt;br /&gt;
&lt;br /&gt;
* [[Termination Competition 2014]], [http://nfa.imn.htwk-leipzig.de/termcomp/competition/20 Results of Competition], [http://nfa.imn.htwk-leipzig.de/termcomp/competition/23 Results of Demonstration]&lt;br /&gt;
*  [[Termination Competition 2013]], [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=437763 Results], [http://termcomp.uibk.ac.at/2013/competition2013.pdf Report]&lt;br /&gt;
&lt;br /&gt;
*  [[Termination Competition 2012]], [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=362062 Results], [http://verify.rwth-aachen.de/giesl/competition2012.pdf Report]&lt;br /&gt;
&lt;br /&gt;
*  [[Termination Competition 2011]], [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=230715 Results], [http://termcomp.uibk.ac.at/2011/competition2011.pdf Report]&lt;br /&gt;
&lt;br /&gt;
*  [[Termination Competition 2010]], [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=185404 Results] &lt;br /&gt;
&lt;br /&gt;
*  Termination Competition 2009 [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=101722 Results], [http://lists.lri.fr/pipermail/termtools/2009-November/000778.html Announcement]&lt;br /&gt;
&lt;br /&gt;
* [[Termination_Competition_2008|Termination Competition 2008]], [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=15991 Results], [http://www.imn.htwk-leipzig.de/~waldmann/talk/09/wst/ Report]&lt;br /&gt;
* [http://www.lri.fr/~marche/termination-competition/2007/ Termination Competition 2007], [http://www.imn.htwk-leipzig.de/~waldmann/talk/07/wst/competition/ Report]&lt;br /&gt;
* [http://www.lri.fr/~marche/termination-competition/2006/ Termination Competition 2006], [http://www.lri.fr/~marche/termination-competition/2006/reportCompetition2006.pdf Report]&lt;br /&gt;
* [http://www.lri.fr/~marche/termination-competition/2005/ Termination Competition 2005], [http://www.lri.fr/~marche/termination-competition/2005/TC.ppt Report]&lt;br /&gt;
* [http://www.lri.fr/~marche/termination-competition/2004/ Termination Competition 2004], [http://www.lri.fr/~marche/termination-competition/2004/slides-1jun2004.ps Report]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Termination_Competition_2014_Questionnaire&amp;diff=1518</id>
		<title>Termination Competition 2014 Questionnaire</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Termination_Competition_2014_Questionnaire&amp;diff=1518"/>
		<updated>2014-08-02T12:52:33Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following questions regarding Star-Exec are being asked by Aaron Stump and Cesare Tinelli,&lt;br /&gt;
to all Summer 2014 competition organizers. I (J.W.) will answer, by August 5, and I'd like to collect your comments here.&lt;br /&gt;
Just enter below the question, but keep the question intact. (I am dropping some administrative questions, but keep the original numbering.)&lt;br /&gt;
&lt;br /&gt;
== 4. What were the advantages and disadvantages of using StarExec for you as competition organizer, in comparison with whatever alternative you would have utilized instead of StarExec? ==&lt;br /&gt;
&lt;br /&gt;
== 5. What were the most positive aspects of your experience running your competition on StarExec? ==&lt;br /&gt;
&lt;br /&gt;
It is not longer necessary to maintain hardware and software for each competition separately. This makes the competition more independent of individual research groups and their funding.&lt;br /&gt;
&lt;br /&gt;
The computing power allowed us to run the competition in much less time than before.&lt;br /&gt;
&lt;br /&gt;
== 6. What were the negative aspects? ==&lt;br /&gt;
&lt;br /&gt;
It was not (easily) possible to install auxiliary software needed by the tools.&lt;br /&gt;
&lt;br /&gt;
It was not possible to access remote machines from StarExec, which is needed for some commercial tools that are not willing to let their binaries run on StarExec itself.&lt;br /&gt;
&lt;br /&gt;
Restrictions (e.g., on the name length) for benchmarks prevented the submission of whole benchmark sets instead of just those files violating the restrictions. Only one error was displayed at a time and the user had to successively remove files from the benchmark set before the submission succeeded.&lt;br /&gt;
&lt;br /&gt;
The allowed characters for tool descriptions were very restricted and did not allow a nice representation, e.g., of author names containing special characters. In particular, the restrictions were not documented in a way that the user would know about the restrictions beforehand, but needed to try out several versions until a description was accepted.&lt;br /&gt;
&lt;br /&gt;
== 10. Where do you think we should focus our development efforts going forward? ==&lt;br /&gt;
A few of the things we are considering are: additional interfaces for viewing job results (maybe similar to the 2-dimensional grid used in Termination; other suggestions?), solver pipelines (output from one stage becomes benchmark for input to the next stage; other details to be determined), more work to make it possible to install and run StarExec on your own server or computer (abstract out security-critical details, installation documention, and abstract the interface to GridEngine so you can use a different third-party tool to run jobs on a cluster, or even just your own desktop), commitment to and documentation of the URLs used for communicating directly with the server. Documentation of restrictions and registration procedures.&lt;br /&gt;
&lt;br /&gt;
== 11. Do you expect you or your colleagues will likely want to run the next edition of your competition on StarExec? ==&lt;br /&gt;
&lt;br /&gt;
== 12. How adequate was the help you were able to get either directly from the StarExec team or from the forum? ==&lt;br /&gt;
&lt;br /&gt;
Response times could easily exceed one or in some cases even several weeks.&lt;br /&gt;
&lt;br /&gt;
== 13. How satisfied do you perceive the participants in your competition were with their experience using StarExec?  ==&lt;br /&gt;
&lt;br /&gt;
The submission phase felt very chaotic and submissions involved much more work for the participants than in previous years. The execution phase seemed to run smoothly (at least from the participants' perspective) and very fast.&lt;br /&gt;
&lt;br /&gt;
== 14. Were there any recurring issues or complaints from the participants in your competition? ==&lt;br /&gt;
&lt;br /&gt;
See answers to question 6.&lt;br /&gt;
&lt;br /&gt;
== 15. Any further comments or suggestions? ==&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1490</id>
		<title>C Programs</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=C_Programs&amp;diff=1490"/>
		<updated>2014-07-02T11:13:12Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Categories]]&lt;br /&gt;
&lt;br /&gt;
== Proposed semantics ==&lt;br /&gt;
&lt;br /&gt;
*    The starting point is the main function without arguments.&lt;br /&gt;
&lt;br /&gt;
*    Functions which are only declared, but not defined, are considered to be terminating, have no side effects, and return a non-deterministic value according to the function's return type.&lt;br /&gt;
&lt;br /&gt;
*    The special (and only declared) function __VERIFIER_nondet_String() returns a non-deterministic C String, i.e., a pointer to some freshly allocated memory where the last byte of this allocation is the value '\0' (we may provide a standard implementation for this function, but provers are allowed to hard-code its semantics)&lt;br /&gt;
&lt;br /&gt;
*    In C, memory-unsafe programs can behave arbitrarily. Therefore, neither YES nor NO is a correct result for programs violating memory safety. So a proof of memory safety needs to be part of a termination proof. If there is interest for that, we could also offer an additional category where memory safety can be assumed and where no programs are allowed which might violate memory safety.&lt;br /&gt;
&lt;br /&gt;
*    We assume integers to be mathematical integers, i.e., over- or underflows cannot occur. If there is interest for that, we could also offer an additional category where overflows of unsigned integers are treated as two's complement overflows and where neither YES nor NO is a correct result for programs with overflows of signed integers.&lt;br /&gt;
&lt;br /&gt;
*    We assume that allocation of memory always succeeds, i.e., alloca and malloc never return null pointers and allocation of constant size arrays cannot lead to undefined behavior.&lt;br /&gt;
&lt;br /&gt;
*    We assume the following sizes of primitive data types:&lt;br /&gt;
     bool: 8 bit&lt;br /&gt;
     char: 8 bit&lt;br /&gt;
     short: 16 bit&lt;br /&gt;
     int: 32 bit&lt;br /&gt;
     long: 64 bit&lt;br /&gt;
     float: 32 bit&lt;br /&gt;
     double: 64 bit&lt;br /&gt;
     pointer: 64 bit&lt;br /&gt;
&lt;br /&gt;
* The scoring should be the same as in all other categories (proving termination or non-termination both gives 1 point and there will be a penalty for wrong answers). &lt;br /&gt;
&lt;br /&gt;
* time limit: 300 seconds&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
Section D. of [http://sv-comp.sosy-lab.org/2014/demo.php Termination Competition on Software Verification (SV-COMP)]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Termination_Competition_2014&amp;diff=1448</id>
		<title>Termination Competition 2014</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Termination_Competition_2014&amp;diff=1448"/>
		<updated>2014-06-10T11:10:05Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: /* Registration Info (tentative) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In 2014, the Termination Competition will be part of the [http://vsl2014.at/olympics/ FLoC Olympic Games].&lt;br /&gt;
&lt;br /&gt;
== Dates (tentative) ==&lt;br /&gt;
&lt;br /&gt;
* call for tools, certifiers, problems: May 26&lt;br /&gt;
* registration of tools: June 15&lt;br /&gt;
* updates of registered tools, submission of problems: July 1&lt;br /&gt;
* competition runs: July 15 - 20&lt;br /&gt;
* results announced: July 21, during the Second FLoC Olympic Games Award Ceremony, Vienna.&lt;br /&gt;
&lt;br /&gt;
== Competition Categories and Awards ==&lt;br /&gt;
&lt;br /&gt;
The competition contains several categories, grouped in three meta-categories:&lt;br /&gt;
&lt;br /&gt;
* termination of term rewriting (all categories with HO/FO-TRSs, with- or without strategies)&lt;br /&gt;
* complexity analysis of term rewriting (all complexity categories)&lt;br /&gt;
* termination of programming languages (Logic Programming, Haskell, Java, C, ...)&lt;br /&gt;
&lt;br /&gt;
In each meta-category, a medal will be awarded to the highest-scoring solver.&lt;br /&gt;
&lt;br /&gt;
For every meta-category, we consider the sum of the scores for each category within that meta-category:&lt;br /&gt;
The score of a tool is determined by the number of other tools which could be beaten in that category.&lt;br /&gt;
&lt;br /&gt;
This puts the emphasis on categories with many competitors.&lt;br /&gt;
(In particular, a category with just one entrant would produce a zero score.) &lt;br /&gt;
A category is only run at the competition if there are at least 2 participants and at least 40 examples &lt;br /&gt;
for this category in the underlying termination problem data base.&lt;br /&gt;
&lt;br /&gt;
== New Categories ==&lt;br /&gt;
&lt;br /&gt;
This year a new category on termination of C programs will be included (see the details [http://www.termination-portal.org/wiki/C_Programs here]).&lt;br /&gt;
&lt;br /&gt;
Other categories for &amp;quot;transition systems&amp;quot; or &amp;quot;large scale (Java) programs&amp;quot; are under consideration depending on the number of interested participants and available problems.&lt;br /&gt;
&lt;br /&gt;
== Competition Procedure ==&lt;br /&gt;
&lt;br /&gt;
All participants in the same category will be run on a [http://www.termination-portal.org/wiki/Termination_Competition_Problem_Selection_Algorithm subset] of the existing problems of this category. The number of problems used in the competition is not fixed and will depend on the number of existing problems. The problem selection algorithm will be the same as in previous years (link http://www.termination-portal.org/wiki/Termination_Competition_Problem_Selection_Algorithm), however because of moving to [http://www.starexec.org StarExec], there might be modifications of the rules suggested by the organizer and decided by the SC.&lt;br /&gt;
&lt;br /&gt;
The wall-clock timeout will be 60 (up to 300) seconds, and 4 cores will be available (if a tool wants to use concurrent execution).&lt;br /&gt;
&lt;br /&gt;
For nearly all categories, the tools will be started in their directory and obtain two parameters: &lt;br /&gt;
&lt;br /&gt;
* the problem file and &lt;br /&gt;
* the timeout in seconds. &lt;br /&gt;
&lt;br /&gt;
The tools are expected to give an answer (YES, NO, MAYBE) in the first line on stdout, followed by a proof in ASCII, HTML, or CPF format. Exceptions to these rules are the [http://www.termination-portal.org/wiki/Termination_Competition_Certified_Categories_Competition certified] (see also the [http://cl-informatik.uibk.ac.at/software/cpf/ CPF-website]) and [http://cl-informatik.uibk.ac.at/users/georg/cbr/competition/ complexity] categories. See all existing [http://www.termination-portal.org/wiki/Category:Categories categories] for more details.&lt;br /&gt;
&lt;br /&gt;
For those problems where a correct answer is (partially) known, any contradictory answer will be penalized with a high negative score. Moreover, those buggy systems may have the opportunity to provide a corrected version that will be run again after the end of the live execution (displaying the new results afterwards, but out of competition). &lt;br /&gt;
&lt;br /&gt;
For those categories devoted to prove only termination or non-termination, the score of a tool is the number of non-contradictory answers minus the given penalization (if any).&lt;br /&gt;
&lt;br /&gt;
== Committees ==&lt;br /&gt;
&lt;br /&gt;
Steering Committee&lt;br /&gt;
* Jürgen Giesl, RWTH Aachen, Germany&lt;br /&gt;
* Frederic Mesnard, Université de la Réunion, France&lt;br /&gt;
* Albert Rubio (chair), UPC Barcelona, Spain&lt;br /&gt;
* Rene Thiemann, Universität Innsbruck, Austria&lt;br /&gt;
* Johannes Waldmann, HTWK Leipzig, Germany&lt;br /&gt;
&lt;br /&gt;
Organizing Commmittee&lt;br /&gt;
* Johannes Waldmann, HTWK Leipzig, Germany&lt;br /&gt;
* Stefan von der Krone, HTWK Leipzig, Germany&lt;br /&gt;
&lt;br /&gt;
== Registration Info (tentative) ==&lt;br /&gt;
&lt;br /&gt;
Participants must register on [https://www.starexec.org/starexec/public/registration.jsp StarExecRegistration], indicating the competition categories where they plan to enter tools and problems, and then upload their contributions to [http://www.starexec.org StarExec].&lt;br /&gt;
&lt;br /&gt;
Note: if I (J. Waldmann) don't know you (&amp;quot;knowing&amp;quot; is roughly symmetrical), then I will ask you to specify: what termination tool you're working on, what competition categories you plan to take part in, your affiliation (in case you're a student,  also the name of your  advisor/research group leader). The email address you give in the registration should be your institutional one.&lt;br /&gt;
&lt;br /&gt;
We recommend to register early. After the deadline, access to [http://www.starexec.org StarExec] might be restricted. We need time to prepare the competition, and other competitions may be running in parallel.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended that participants also subscribe to the [http://lists.lri.fr/mailman/listinfo/termtools termtools] mailing list, because that is where announcements will be made, and where discussion takes place.&lt;br /&gt;
&lt;br /&gt;
== Technical Detail ==&lt;br /&gt;
&lt;br /&gt;
We intend to run the competition on [http://www.starexec.org/  StarExec] - a cross-community solver (tool) execution and benchmark (problem) library service under joint development (since 2012) at the University of Iowa and the University of Miami.&lt;br /&gt;
&lt;br /&gt;
Technical details about the execution platform can be found [http://www.termination-portal.org/wiki/Termination_Competition_2014_technical_details here].&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
To contact the steering committee of the termination competition, send an email to terminationcompetitionsc&amp;lt;at&amp;gt;lists.rwth-aachen.de. &lt;br /&gt;
&lt;br /&gt;
The competition organizers can be reached at johannes.waldmann&amp;lt;at&amp;gt;htwk-leipzig.de&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1204</id>
		<title>Logic Programming</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1204"/>
		<updated>2012-05-23T09:16:05Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: /* Syntax/Semantics for Input/Output */  adapted to current competition customs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is to record the current status of discussion&lt;br /&gt;
on cleaning up the Logic Programming Category of the Termination Competition. &lt;br /&gt;
&lt;br /&gt;
(Discussion should take place on the termtools mailing list.)&lt;br /&gt;
&lt;br /&gt;
== Syntax/Semantics for Input/Output ==&lt;br /&gt;
&lt;br /&gt;
The set of queries, for which termination should be analyzed, is &lt;br /&gt;
given by a comment of the form &amp;quot;%query: &amp;lt;predicate&amp;gt;(&amp;lt;arguments&amp;gt;).&amp;quot;. &lt;br /&gt;
Here, &amp;lt;predicate&amp;gt; is the root symbol of all queries to analyze &lt;br /&gt;
while &amp;lt;arguments&amp;gt; is a comma-separated list of argument indicators &lt;br /&gt;
which specify whether the argument at the particular position must &lt;br /&gt;
be a ground term or can be an arbitrary term. There are three pairs &lt;br /&gt;
of argument indicators in use (historically grown) where the first &lt;br /&gt;
indicator specifies ground arguments and the second specifies &lt;br /&gt;
arbitrary arguments: i and o (for input and output), b and f (for &lt;br /&gt;
bound and free), and g and a (for ground and any).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
%query: p(i,o).&lt;br /&gt;
&lt;br /&gt;
This means all queries :- p(s,t). where s is a ground term&lt;br /&gt;
and t can be any term.&lt;br /&gt;
If the root symbol has no arguments, the parantheses are omitted.&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
%query: p.&lt;br /&gt;
&lt;br /&gt;
== Problematic Examples ==&lt;br /&gt;
&lt;br /&gt;
The following examples are empty:&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
&lt;br /&gt;
The following examples contain non-trivial built-in predicates that are potentially&lt;br /&gt;
handled in very different ways by the individual tools (leading to potentially&lt;br /&gt;
different termination status):&lt;br /&gt;
* LP/lpexamples/factorial.pl&lt;br /&gt;
* LP/lpexamples/fib-oi.pl&lt;br /&gt;
* LP/lpexamples/fib.pl&lt;br /&gt;
* LP/lpexamples/hanoi.pl&lt;br /&gt;
* LP/lpexamples/kay4.pl&lt;br /&gt;
* LP/lpexamples/numbervars.pl&lt;br /&gt;
* LP/lpexamples/primes.pl&lt;br /&gt;
* LP/lpexamples/tautology.pl&lt;br /&gt;
* LP/lpexamples/totient.pl&lt;br /&gt;
* LP/talp/apt/curry_ap.pl&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/dc_schema.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
* LP/talp/apt/gtsolve.pl&lt;br /&gt;
* LP/talp/apt/mergesort_ap_variant.pl&lt;br /&gt;
* LP/talp/maria/aiakl.pl&lt;br /&gt;
* LP/talp/maria/ann.pl&lt;br /&gt;
* LP/talp/maria/bid.pl&lt;br /&gt;
* LP/talp/maria/boyer.pl&lt;br /&gt;
* LP/talp/maria/browse.pl&lt;br /&gt;
* LP/talp/maria/deriv-oii.pl&lt;br /&gt;
* LP/talp/maria/deriv.pl&lt;br /&gt;
* LP/talp/maria/fib.pl&lt;br /&gt;
* LP/talp/maria/grammar.pl&lt;br /&gt;
* LP/talp/maria/grammar2.pl&lt;br /&gt;
* LP/talp/maria/hanoiapp.pl&lt;br /&gt;
* LP/talp/maria/mmatrix.pl&lt;br /&gt;
* LP/talp/maria/money.pl&lt;br /&gt;
* LP/talp/maria/occur.pl&lt;br /&gt;
* LP/talp/maria/peephole.pl&lt;br /&gt;
* LP/talp/maria/progeom.pl&lt;br /&gt;
* LP/talp/maria/qplan.pl&lt;br /&gt;
* LP/talp/maria/qsortapp.pl&lt;br /&gt;
* LP/talp/maria/query.pl&lt;br /&gt;
* LP/talp/maria/rdtok.pl&lt;br /&gt;
* LP/talp/maria/read.pl&lt;br /&gt;
* LP/talp/maria/serialize.pl&lt;br /&gt;
* LP/talp/maria/tak.pl&lt;br /&gt;
* LP/talp/maria/tictactoe.pl&lt;br /&gt;
* LP/talp/maria/warplan.pl&lt;br /&gt;
* LP/talp/taboch/permute2.pl&lt;br /&gt;
* LP/talp/taboch/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/mergesort.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/quicksort.pl&lt;br /&gt;
&lt;br /&gt;
== Questions ==&lt;br /&gt;
&lt;br /&gt;
* should empty examples be removed?&lt;br /&gt;
* how to handle built-ins that the tool does not support?&lt;br /&gt;
* do we want to have a (sub-)category &amp;quot;pure logic programs&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
== Unification with or without Occurs Check ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are some examples in the LP-Prolog category where &lt;br /&gt;
termination depends on whether unification is performed with or &lt;br /&gt;
without the occurs check. Following the treatment of overflows in &lt;br /&gt;
the Java categories, in such cases both YES and NO answers (with &lt;br /&gt;
consistent proofs) are valid.&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of participants to this category&lt;br /&gt;
* [[Tools:AProVE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1161</id>
		<title>Logic Programming</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1161"/>
		<updated>2011-05-24T09:25:56Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is to record the current status of discussion&lt;br /&gt;
on cleaning up the Logic Programming Category of the Termination Competition. &lt;br /&gt;
&lt;br /&gt;
(Discussion should take place on the termtools mailing list.)&lt;br /&gt;
&lt;br /&gt;
== Syntax/Semantics for Input/Output ==&lt;br /&gt;
&lt;br /&gt;
The set of queries, for which termination should be analyzed, is&lt;br /&gt;
given by a comment in the first line. Example:&lt;br /&gt;
&lt;br /&gt;
%query: p(i,o).&lt;br /&gt;
&lt;br /&gt;
This means all queries :- p(s,t). where s is a ground term&lt;br /&gt;
and t can be any term.&lt;br /&gt;
&lt;br /&gt;
== Problematic Examples ==&lt;br /&gt;
&lt;br /&gt;
The following examples are empty:&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
&lt;br /&gt;
The following examples contain non-trivial built-in predicates that are potentially&lt;br /&gt;
handled in very different ways by the individual tools (leading to potentially&lt;br /&gt;
different termination status):&lt;br /&gt;
* LP/lpexamples/factorial.pl&lt;br /&gt;
* LP/lpexamples/fib-oi.pl&lt;br /&gt;
* LP/lpexamples/fib.pl&lt;br /&gt;
* LP/lpexamples/hanoi.pl&lt;br /&gt;
* LP/lpexamples/kay4.pl&lt;br /&gt;
* LP/lpexamples/numbervars.pl&lt;br /&gt;
* LP/lpexamples/primes.pl&lt;br /&gt;
* LP/lpexamples/tautology.pl&lt;br /&gt;
* LP/lpexamples/totient.pl&lt;br /&gt;
* LP/talp/apt/curry_ap.pl&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/dc_schema.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
* LP/talp/apt/gtsolve.pl&lt;br /&gt;
* LP/talp/apt/mergesort_ap_variant.pl&lt;br /&gt;
* LP/talp/maria/aiakl.pl&lt;br /&gt;
* LP/talp/maria/ann.pl&lt;br /&gt;
* LP/talp/maria/bid.pl&lt;br /&gt;
* LP/talp/maria/boyer.pl&lt;br /&gt;
* LP/talp/maria/browse.pl&lt;br /&gt;
* LP/talp/maria/deriv-oii.pl&lt;br /&gt;
* LP/talp/maria/deriv.pl&lt;br /&gt;
* LP/talp/maria/fib.pl&lt;br /&gt;
* LP/talp/maria/grammar.pl&lt;br /&gt;
* LP/talp/maria/grammar2.pl&lt;br /&gt;
* LP/talp/maria/hanoiapp.pl&lt;br /&gt;
* LP/talp/maria/mmatrix.pl&lt;br /&gt;
* LP/talp/maria/money.pl&lt;br /&gt;
* LP/talp/maria/occur.pl&lt;br /&gt;
* LP/talp/maria/peephole.pl&lt;br /&gt;
* LP/talp/maria/progeom.pl&lt;br /&gt;
* LP/talp/maria/qplan.pl&lt;br /&gt;
* LP/talp/maria/qsortapp.pl&lt;br /&gt;
* LP/talp/maria/query.pl&lt;br /&gt;
* LP/talp/maria/rdtok.pl&lt;br /&gt;
* LP/talp/maria/read.pl&lt;br /&gt;
* LP/talp/maria/serialize.pl&lt;br /&gt;
* LP/talp/maria/tak.pl&lt;br /&gt;
* LP/talp/maria/tictactoe.pl&lt;br /&gt;
* LP/talp/maria/warplan.pl&lt;br /&gt;
* LP/talp/taboch/permute2.pl&lt;br /&gt;
* LP/talp/taboch/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/mergesort.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/quicksort.pl&lt;br /&gt;
&lt;br /&gt;
== Questions ==&lt;br /&gt;
&lt;br /&gt;
* should empty examples be removed?&lt;br /&gt;
* how to handle built-ins that the tool does not support?&lt;br /&gt;
* do we want to have a (sub-)category &amp;quot;pure logic programs&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
== Unification with or without Occurs Check ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are some examples in the LP-Prolog category where &lt;br /&gt;
termination depends on whether unification is performed with or &lt;br /&gt;
without the occurs check. Following the treatment of overflows in &lt;br /&gt;
the Java categories, in such cases both YES and NO answers (with &lt;br /&gt;
consistent proofs) are valid.&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of participants to this category&lt;br /&gt;
* [[Tools:AProVE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
	<entry>
		<id>http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1160</id>
		<title>Logic Programming</title>
		<link rel="alternate" type="text/html" href="http://termination-portal.org/mediawiki/index.php?title=Logic_Programming&amp;diff=1160"/>
		<updated>2011-05-24T09:20:28Z</updated>

		<summary type="html">&lt;p&gt;Cryingshadow: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is to record the current status of discussion&lt;br /&gt;
on cleaning up the Logic Programming Category of the Termination Competition. &lt;br /&gt;
&lt;br /&gt;
(Discussion should take place on the termtools mailing list.)&lt;br /&gt;
&lt;br /&gt;
== Syntax/Semantics for Input/Output ==&lt;br /&gt;
&lt;br /&gt;
The set of queries, for which termination should be analyzed, is&lt;br /&gt;
given by a comment in the first line. Example:&lt;br /&gt;
&lt;br /&gt;
%query: p(i,o).&lt;br /&gt;
&lt;br /&gt;
This means all queries :- p(s,t). where s is a ground term&lt;br /&gt;
and t can be any term.&lt;br /&gt;
&lt;br /&gt;
== Problematic Examples ==&lt;br /&gt;
&lt;br /&gt;
The following examples are empty:&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
&lt;br /&gt;
The following examples contain non-trivial built-in predicates that are potentially&lt;br /&gt;
handled in very different ways by the individual tools (leading to potentially&lt;br /&gt;
different termination status):&lt;br /&gt;
* LP/lpexamples/factorial.pl&lt;br /&gt;
* LP/lpexamples/fib-oi.pl&lt;br /&gt;
* LP/lpexamples/fib.pl&lt;br /&gt;
* LP/lpexamples/hanoi.pl&lt;br /&gt;
* LP/lpexamples/kay4.pl&lt;br /&gt;
* LP/lpexamples/numbervars.pl&lt;br /&gt;
* LP/lpexamples/primes.pl&lt;br /&gt;
* LP/lpexamples/tautology.pl&lt;br /&gt;
* LP/lpexamples/totient.pl&lt;br /&gt;
* LP/talp/apt/curry_ap.pl&lt;br /&gt;
* LP/talp/apt/dc_mod.pl&lt;br /&gt;
* LP/talp/apt/dc_schema.pl&lt;br /&gt;
* LP/talp/apt/gt_mod.pl&lt;br /&gt;
* LP/talp/apt/gtsolve.pl&lt;br /&gt;
* LP/talp/apt/mergesort_ap_variant.pl&lt;br /&gt;
* LP/talp/maria/aiakl.pl&lt;br /&gt;
* LP/talp/maria/ann.pl&lt;br /&gt;
* LP/talp/maria/bid.pl&lt;br /&gt;
* LP/talp/maria/boyer.pl&lt;br /&gt;
* LP/talp/maria/browse.pl&lt;br /&gt;
* LP/talp/maria/deriv-oii.pl&lt;br /&gt;
* LP/talp/maria/deriv.pl&lt;br /&gt;
* LP/talp/maria/fib.pl&lt;br /&gt;
* LP/talp/maria/grammar.pl&lt;br /&gt;
* LP/talp/maria/grammar2.pl&lt;br /&gt;
* LP/talp/maria/hanoiapp.pl&lt;br /&gt;
* LP/talp/maria/mmatrix.pl&lt;br /&gt;
* LP/talp/maria/money.pl&lt;br /&gt;
* LP/talp/maria/occur.pl&lt;br /&gt;
* LP/talp/maria/peephole.pl&lt;br /&gt;
* LP/talp/maria/progeom.pl&lt;br /&gt;
* LP/talp/maria/qplan.pl&lt;br /&gt;
* LP/talp/maria/qsortapp.pl&lt;br /&gt;
* LP/talp/maria/query.pl&lt;br /&gt;
* LP/talp/maria/rdtok.pl&lt;br /&gt;
* LP/talp/maria/read.pl&lt;br /&gt;
* LP/talp/maria/serialize.pl&lt;br /&gt;
* LP/talp/maria/tak.pl&lt;br /&gt;
* LP/talp/maria/tictactoe.pl&lt;br /&gt;
* LP/talp/maria/warplan.pl&lt;br /&gt;
* LP/talp/taboch/permute2.pl&lt;br /&gt;
* LP/talp/taboch/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/mergesort.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/queens.pl&lt;br /&gt;
* LP/terminweb/old-terminweb/quicksort.pl&lt;br /&gt;
&lt;br /&gt;
== Questions ==&lt;br /&gt;
&lt;br /&gt;
* should empty examples be removed?&lt;br /&gt;
* how to handle built-ins that the tool does not support?&lt;br /&gt;
* do we want to have a (sub-)category &amp;quot;pure logic programs&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
== Unification with or without Occurs-Check ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are some examples in the LP-Prolog category where &lt;br /&gt;
termination depends on whether unification is performed with or &lt;br /&gt;
without the occurs-check. Following the treatment of overflows in &lt;br /&gt;
the Java categories, in such cases both YES and NO answers (with &lt;br /&gt;
consistent proofs) are valid.&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of participants to this category&lt;br /&gt;
* [[Tools:AProVE]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Cryingshadow</name></author>
		
	</entry>
</feed>