Mirror of https://github.com/leanprover/lean2 in case it ever disappears
Find a file
Leonardo de Moura e3dc552c39 fix(library/simplifier): nontermination
The example tests/lua/simp1.lua demonstrates the issue.
The higher-order matcher matches closed terms that are definitionally equal.
So, given a definition

    definition a := 1

it will match 'a' with '1' since they are definitionally equal.

Then, if we have a theorem

    theorem a_eq_1 : a = 1

as a rewrite rule, it was triggering the following infinite loop when simplifying the expression "a"

   a --> 1 --> 1 --> 1 ...

The first simplification is expected. The other ones are not.
The problem is that "1" is definitionally equal to "a", and they match.
The rewrite_rule_set manager accepts the rule a --> 1 since the left-hand-side does not occur in the right-hand-side.

To avoid this loop, we test if the new expression is not equal to the previous one.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2014-01-31 15:55:21 -08:00
doc refactor(builtin/kernel): define if-then-else using Hilbert's operator 2014-01-30 19:28:42 -08:00
examples/lean doc(examples/lean): improve dep_if example 2014-01-31 13:49:57 -08:00
script fix(script/demangle_cpptype): process line-by-line, instead of waiting for EOF 2013-09-29 18:36:01 -07:00
src fix(library/simplifier): nontermination 2014-01-31 15:55:21 -08:00
tests fix(library/simplifier): nontermination 2014-01-31 15:55:21 -08:00
.gitignore chore(.gitignore): ignore .md.lean files 2013-12-27 16:50:06 -08:00
.travis.osx.yml chore(travis): fix typo 2013-12-26 02:38:16 -05:00
.travis.windows.yml chore(travis): fix typo 2013-12-26 02:38:16 -05:00
.travis.yml chore(travis): fix another typo 2013-12-26 02:57:13 -05:00
LICENSE Add LICENSE file 2013-07-15 18:55:48 -07:00
README.md doc(README.md): Boost support 2013-12-09 17:45:31 -08:00

UbuntuOS XWindowsCoverageBuilds / UnitTests / Dynamic Analyses
http://build.leanprover.net

About

Requirements

Installing required packages at

Build Instructions

Miscellaneous