http://termination-portal.org/mediawiki/api.php?action=feedcontributions&user=Fab&feedformat=atomTermination-Portal.org - User contributions [en]2022-09-28T01:00:25ZUser contributionsMediaWiki 1.34.2http://termination-portal.org/mediawiki/index.php?title=Tools:Oops&diff=1132Tools:Oops2011-02-22T15:27:33Z<p>Fab: </p>
<hr />
<div><!--<br />
Please fill in the data so that you can be added to some default<br />
categories and a simple user page can be created. You may extend<br />
that user page yourself after the following code block.<br />
--><br />
<br />
{{Tool<br />
|shortname=Oops<br />
|longname=Oops<br />
|homepage=http://verify.rwth-aachen.de/emmes/Oops/Oops-0.0.1.tar.gz<br />
|country=Germany<br />
|university=RWTH Aachen<br />
|developers=[[People:Fabian Emmes|Fabian Emmes]], [[People:Lars Noschinski|Lars Noschinski]]<br />
|publication=<br />
}}<br />
<br />
<!-- If you want to add some additional information to the tool page, you can do so after this comment. --><br />
<br />
= Oops =<br />
<br />
Oops is no real complexity analyzer. Its main purpose was to mark unsuitable examples in the runtime [[complexity]] categories during the [[Termination Competition 2010]]. Many thanks to Georg Moser for the fitting name.<br />
<br />
For runtime complexity, one does not analyze the derivation length of arbitrary terms (as one does in derivational complexity), but only of terms with exactly one defined symbol. For some systems this leads to much better intuition about the complexity of the described functions, but for others this definition yields strange results. For example applicative systems only have one defined symbol (the apply symbol), whereas the rest are just constants. Starting only with one apply symbol (as runtime complexity requires), one is most likely not able to build the derivation sequences the author of the example intended.<br />
<br />
Furthermore, for such examples where all constructor symbols are constants, there are only finitely many basic terms. This makes asymptotic complexity analysis pointless, as one cannot build arbitrary large start terms.<br />
<br />
We identified the following situations, in which we can conclude constant complexity. The strategy of oops is just to identify these situations and return an upper bound of O(1) if successful.<br />
<br />
* All constructor symbols of the system are constants. This implies that there are only finitely many basic terms. If all of those terms are terminating, we can conclude constant runtime complexity. The termination of the terms proved by testing doing all possible evaluations of those terms.<br />
* A similar situation occurs if all defined symbols are constants. Again we have only finitely many basic terms which can be tested.<br />
* A third case is if the left-hand sides of all rules contain at least two defined symbols. Since every basic term has exactly one defined symbol, no rule can be applied to any basic term. This way, we can directly conclude O(1), without testing any terms for termination.</div>Fabhttp://termination-portal.org/mediawiki/index.php?title=Complexity&diff=1120Complexity2010-07-22T09:56:36Z<p>Fab: Updated Participating Teams of Past and Upcoming Competitions</p>
<hr />
<div>This page provides general information on the complexity category;<br />
(potential) tool authors or others that may want to join the discussion <br />
on various aspects of the category can also go directly to the <br />
[[Complexity:Rules|discussion and rules page]]; aficionados <br />
may be interested in the [[Complexity:Techniques|techniques page]].<br />
<br />
== Introduction ==<br />
<br />
It is a challenging topic to automatically determine upper and lower bounds on<br />
the complexity of term rewrite systems (TRSs for short). <br />
Here complexity of a TRS basically refers to the maximal length of derivations, <br />
measured in the size of the initial terms.<br />
Still, depending on rewrite strategies and restrictions on the<br />
set of allowed starting terms, various notions of complexity exist. <br />
The current focus of the competition is on providing<br />
<em>polynomial upper bounds</em> to the complexity of TRSs.<br />
Presumably the competition will be extended to lower bounds soon.<br />
<br />
== Overview of the Complexity Category ==<br />
Currently, depending on considered set of starting terms and strategy, <br />
the competition is divided into four categories:<br />
<br />
{| class="wikitable center"<br />
|-<br />
! !! Derivational Complexity !! Runtime Complexity<br />
|-<br />
! style="text-align:left"|Full Rewriting<br />
| DC <br />
| RC<br />
|-<br />
! style="text-align:left"|Innermost Rewriting<br />
| iDC<br />
| iRC<br />
|}<br />
<br />
Derivational complexity and runtime complexity differ in the sense that for <br />
derivational complexity, no restrictions on the set of considered starting terms is put. <br />
For runtime complexity however, only basic terms (i.e. terms where arguments <br />
are formed from constructor symbols) are taken into account. <br />
See for example [http://dx.doi.org/10.1007/978-3-540-71070-7_32 (Hirokawa, Moser, 2008)] <br />
[http://arxiv.org/abs/0907.5527 (Moser, 2009)] <br />
for further reading on the notion of runtime<br />
complexity. <br />
<br />
Furthermore, we distinguish between complexities<br />
induced by full rewriting as opposed to complexities induced by<br />
innermost rewriting.<br />
<br />
== Overview of the Competition ==<br />
The complexity category is part of the termination competition since 2008.<br />
The competition is currently hosted at [http://termcomp.uibk.ac.at/termcomp/home.seam], <br />
where you can find results of the competitions from <br />
[http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=15991 2008]<br />
and [http://termcomp.uibk.ac.at/termcomp/competition/competitionSummary.seam?comp=101722 2009].<br />
<br />
=== Important Dates ===<br />
{| class="wikitable center"<br />
|-<br />
! !! Deadline/Date<br />
|- <br />
! style="text-align:left"|Tool Submission<br />
| July 14, 2010<br />
|- <br />
! style="text-align:left"|Problem Submission<br />
| July 2, 2010 (but see email to termtools)<br />
|-<br />
! style="text-align:left"|Competition <br />
| July 16, 2010<br />
|}<br />
<br />
=== Participate ===<br />
If you want to participate in the competition, <br />
go to the [http://termcomp.uibk.ac.at/ Termination Competition Portal], create an account and add your tool. <br />
Documentation concerning this process can be found<br />
[http://termcomp.uibk.ac.at/termcomp/help/register.seam?cid=8144 here].<br />
<br />
Kindly note that in order to participate, your tool needs to be <br />
[http://www.opensource.org/ <em>open source</em>].<br />
<br />
==== Participating Teams of Past and Upcoming Competitions ====<br />
Here you can find a list (sorted by tool name) of participants of past competitions <br />
and supposed participants of the upcoming competition. <br />
<br />
{| class="wikitable center" border="0" style="text-align:center"<br />
|-<br />
! Tool !! Internal Page !! text-align="left"|Authors !! 2008 !! 2009 !! 2010<br />
|-<br />
! [http://www.imn.htwk-leipzig.de/~waldmann/ Matchbox] <br />
| [[Tools:Matchbox]]<br />
| J. Waldmann<br />
| ---<br />
| x<br />
| x<br />
|-<br />
! [http://cl-informatik.uibk.ac.at/software/tct TCT]<br />
| [[Tools:TCT]]<br />
| M. Avanzini, G. Moser, A. Schnabl<br />
| x<br />
| x<br />
| x<br />
|-<br />
! [http://cl-informatik.uibk.ac.at/software/ttt2 CaT]<br />
| [[Tools:CaT]]<br />
| M. Korp, C. Sternagel, H. Zankl<br />
| x<br />
| x<br />
| x<br />
|-<br />
! [http://aprove.informatik.rwth-aachen.de/ AProVE]<br />
| [[Tools:AProVE]]<br />
| The AProVE Team<br />
| ---<br />
| ---<br />
| x<br />
|-<br />
! Oops<br />
| [[Tools:Oops]]<br />
| Fabian Emmes, Lars Noschinski<br />
| ---<br />
| ---<br />
| x<br />
|-<br />
|}<br />
<br />
An overview of the proof techniques applied by the participants in past competitions can be found [[Complexity_Techniques|here]].<br />
<br />
== Past Winners ==<br />
In 2008, [[Tools:CaT|CaT]] was the winner of both derivational complexity categories, whereas<br />
for runtime complexity only [[Tools:TCT|TCT]] participated. <br />
In 2009, all categories where ruled by [[Tools:CaT|CaT]]. Congratulations! <br />
<br />
For detailed information on the testsuites employed and the actual results of the<br />
tools see the [http://termcomp.uibk.ac.at termcomp] pages.<br />
<br />
== Overview of the Competition Rules ==<br />
Problems are given in the new TPDB-format, see<br />
[http://www.termination-portal.org/wiki/XTC_Format_Specification] and <br />
are selected randomly from the newest version of the Termination Problem Database.<br />
<br />
In the selection process, emphasis is put onto selecting problems that <br />
could not be automatically verified in past competitions, c.f. page [[Complexity:Rules#Problem Sets and Problem Selection|problem selection]]<br />
for details. <br />
Tools are ranked not only by number of succeeded runs, but in the scoring<br />
also the preciseness of the bounds is taken into account. See page [[Complexity:Rules#scoring|scoring]] for further details.<br />
<br />
Unfortunately the database is currently somehow biased towards termination problems. <br />
We encourage everybody to submit new problems to the TPDB that are interesting from a complexity<br />
related perspective. (In submission please indicate that these examples should go into the complexity benchmark.)</div>Fabhttp://termination-portal.org/mediawiki/index.php?title=Tools:Oops&diff=1119Tools:Oops2010-07-21T10:22:52Z<p>Fab: initial homepage</p>
<hr />
<div><!--<br />
Please fill in the data so that you can be added to some default<br />
categories and a simple user page can be created. You may extend<br />
that user page yourself after the following code block.<br />
--><br />
<br />
{{Tool<br />
|shortname=Oops<br />
|longname=Oops<br />
|homepage=http://verify.rwth-aachen.de/emmes/oops.tar.gz<br />
|country=Germany<br />
|university=RWTH Aachen<br />
|developers=[[People:Fabian Emmes|Fabian Emmes]], [[People:Lars Noschinski|Lars Noschinski]]<br />
|publication=<br />
}}<br />
<br />
<!-- If you want to add some additional information to the tool page, you can do so after this comment. --><br />
<br />
= Oops =<br />
<br />
Oops is no real complexity analyzer. Its main purpose was to mark unsuitable examples in the runtime [[complexity]] categories during the [[Termination Competition 2010]]. Many thanks to Georg Moser for the fitting name.<br />
<br />
For runtime complexity, one does not analyze the derivation length of arbitrary terms (as one does in derivational complexity), but only of terms with exactly one defined symbol. For some systems this leads to much better intuition about the complexity of the described functions, but for others this definition yields strange results. For example applicative systems only have one defined symbol (the apply symbol), whereas the rest are just constants. Starting only with one apply symbol (as runtime complexity requires), one is most likely not able to build the derivation sequences the author of the example intended.<br />
<br />
Furthermore, for such examples where all constructor symbols are constants, there are only finitely many basic terms. This makes asymptotic complexity analysis pointless, as one cannot build arbitrary large start terms.<br />
<br />
We identified the following situations, in which we can conclude constant complexity. The strategy of oops is just to identify these situations and return an upper bound of O(1) if successful.<br />
<br />
* All constructor symbols of the system are constants. This implies that there are only finitely many basic terms. If all of those terms are terminating, we can conclude constant runtime complexity. The termination of the terms proved by testing doing all possible evaluations of those terms.<br />
* A similar situation occurs if all defined symbols are constants. Again we have only finitely many basic terms which can be tested.<br />
* A third case is if the left-hand sides of all rules contain at least two defined symbols. Since every basic term has exactly one defined symbol, no rule can be applied to any basic term. This way, we can directly conclude O(1), without testing any terms for termination.</div>Fabhttp://termination-portal.org/mediawiki/index.php?title=People:Fabian_Emmes&diff=895People:Fabian Emmes2009-07-15T15:54:52Z<p>Fab: </p>
<hr />
<div><!--<br />
Please fill in the data so that you can be added to some default<br />
categories and a simple user page can be created. You may extend<br />
that user page yourself after the following code block.<br />
--><br />
<br />
{{Person<br />
|firstname=Fabian<br />
|middlenames=<br />
|lastname=Emmes<br />
|titles=<br />
|email=emmes@informatik.rwth-aachen.de<br />
|homepage=http://verify.rwth-aachen.de/emmes/<br />
|country=Germany<br />
|university=RWTH Aachen<br />
|department=Research Group Computer Science 2<br />
|role=Research and Teaching Assistant<br />
}}<br />
<br />
<!-- If you want to add some personal data to your userpage, you can do so after this comment. --></div>Fabhttp://termination-portal.org/mediawiki/index.php?title=People:Fabian_Emmes&diff=894People:Fabian Emmes2009-07-15T15:54:11Z<p>Fab: </p>
<hr />
<div><!--<br />
Please fill in the data so that you can be added to some default<br />
categories and a simple user page can be created. You may extend<br />
that user page yourself after the following code block.<br />
--><br />
<br />
{{Person<br />
|firstname=Fabian<br />
|middlenames=<br />
|lastname=Emmes<br />
|titles=<br />
|email=emmes@informatik.rwth-aachen.de<br />
|homepage=http://verify.rwth-aachen.de/emmes/<br />
|country=Germany<br />
|university=RWTH Aachen<br />
|department=Research Group Computer Science 2<br />
|role=Research and Teaching Assistant in the Department of Research Group Computer Science 2 (RWTH Aachen, Germany) <br />
}}<br />
<br />
<!-- If you want to add some personal data to your userpage, you can do so after this comment. --></div>Fabhttp://termination-portal.org/mediawiki/index.php?title=Functional_Programming&diff=893Functional Programming2009-07-15T15:52:06Z<p>Fab: Added some information about haskell termination and the competition format</p>
<hr />
<div>Within the Termination Competition, there is a category on Functional Programming<br />
where the object is to prove termination of Haskell functions automatically.<br />
<br />
Currently, the Termination Problems Data Base contains 1676 functions from the Haskell Prelude,<br />
and AProVE shows termination of 1294 of them.<br />
<br />
== Termination of Haskell Functions ==<br />
<br />
This category compares tools that automatically analyze termination of Haskell programs. If one considers a whole Haskell program, termination corresponds to finishing the computation in finite time on every possible input.<br />
Since Haskell uses lazy/on-demand evaluation, this notion is not directly useful for analysis of single functions. Consider for example a program containing:<br />
<br />
<pre>map :: (a -&gt; b) -&gt; [a] -&gt; [b]<br />
map f [] = []<br />
map f (x:xs) = (f x):(map f xs)<br />
<br />
bot :: a -&gt; b<br />
bot = bot<br />
<br />
zeros :: [Integer]<br />
zeros = 0:zeros<br />
<br />
strange :: (Integer -&gt; Integer) -&gt; Integer<br />
strange f<br />
| f 23 == 42 = strange f<br />
| otherwise = 5</pre><br />
<br />
Intuitively a specific function evaluation (where the value of every argument is supplied) is terminating if the Haskell evaluation strategy needs finitely many steps to compute the result completely. This means, that evaluation does not stop when reaching a term headed by a constructor: it will continue evaluating the arguments of this constructor. Hence, the function zeros is considered non-terminating.<br />
<br />
When analyzing the termination behavior of a function itself (without specific arguments), the picture gets slightly more complicated. If one allows arbitrary arguments, then nearly every Haskell function will not finish in finitely many steps. Even a function as head would need to be considered non-terminating if one would allow non-terminating arguments: head bot will obviously not terminate. Hence, this idea is not useful. Instead one regards a function as terminating, if it finishes in a finite number of steps whenever it is called with terminating arguments. This can be written formally as follows:<br />
<br />
'''Definition: (Termination of Haskell Expressions)''' The set of terminating Haskell expressions is defined as the smallest set, such that t is in this set iff:<br />
* t does not start an infinite evaluation sequence, and<br />
* if t evaluates to an expression c t<sub>1</sub> ... t<sub>n</sub> where c is a constructor then t<sub>1</sub> ... t<sub>n</sub> must also be terminating expressions, and<br />
* if t evaluates to an expression f t<sub>1</sub> ... t<sub>n</sub> where f is a function symbol and the type of t is α -&gt; β, then f t<sub>1</sub> ... t<sub>n</sub> t' must be terminating for every terminating expression t'.<br />
<br />
This means that in the above program the expression <tt>map</tt> would be considered terminating, while the expression <tt>\f -&gt; map f zeros</tt> would be non-terminating. On the other hand head <tt>zeros</tt> is obviously nonterminating. The expression <tt>\x -&gt; if x == 23 then 42 else 5</tt> is terminating, while the function <tt>strange</tt> is not. This is because by the third point in the definition one needs to analyze strange called with any terminating argument (like our lambda expression) which would result in a non-terminating behavior.<br />
<br />
The semantics of "termination" (in the context of the competition)<br />
is discussed e.g. in http://lists.lri.fr/pipermail/termtools/2006-March/000179.html<br />
<br />
== The Problem Format ==<br />
<br />
Every input for the FP category is a file containing a Haskell module with exactly the compiler pragma <tt>htermination</tt>, that specifies the start term. The start term is any Haskell expression containing no free variables. Function names, constructors etc. bound in the module itself can be used.<br />
<pre>{-# htermination (foldr1 :: (a -&gt; a -&gt; a) -&gt; (List a) -&gt; a) #-} <br />
<br />
import qualified Prelude<br />
<br />
data MyBool = MyTrue | MyFalse<br />
data List a = Cons a (List a) | Nil<br />
<br />
foldr1 :: (a -&gt; a -&gt; a) -&gt; (List a) -&gt; a<br />
foldr1 f (Cons x Nil) = x<br />
foldr1 f (Cons x xs) = f x (foldr1 f xs)</pre><br />
<br />
== Implementations ==<br />
<br />
The termination analyzer AProVE has a web front end http://aprove.informatik.rwth-aachen.de/eval/Haskell/</div>Fabhttp://termination-portal.org/mediawiki/index.php?title=People:Fabian_Emmes&diff=316People:Fabian Emmes2008-04-02T14:24:26Z<p>Fab: New page: <!-- Please fill in the data so that you can be added to some default categories and a simple user page can be created. You may extend that user page yourself after th...</p>
<hr />
<div><!--<br />
Please fill in the data so that you can be added to some default<br />
categories and a simple user page can be created. You may extend<br />
that user page yourself after the following code block.<br />
--><br />
<br />
{{Person<br />
|firstname=Fabian<br />
|middlenames=<br />
|lastname=Emmes<br />
|titles=<br />
|email=fabian.emmes@rwth-aachen.de<br />
|homepage=<br />
|country=Germany<br />
|university=RWTH Aachen<br />
|department=Research Group Computer Science 2<br />
|role=Student <!-- role: Student, Professor, PhD Student, ... --><br />
}}<br />
<br />
<!-- If you want to add some personal data to your userpage, you can do so after this comment. --></div>Fab