Mirror of https://github.com/leanprover/lean2 in case it ever disappears
Find a file
Leonardo de Moura 08169c5ac2 fix(library/unifier): fixes #809
Daniel is correct when he says the interaction between choice
case-splits, delta case-splits, and coercions can be subtle.

I believe the following condition
https://github.com/leanprover/lean/blob/master/src/frontends/lean/elaborator.cpp#L111
reduces counter-intuitive behavior. Example, the coercion should not
influence the resulting type.
BTW, by removing this condition, many files in the library broke when I
tried to compile from scratch

      make clean-olean
      make

I used the following workaround. Given a delta-delta constraint

           f a =?= f b

If the terms are types, and no case-split will be performed, then
the delta-delta constraint is eagerly solved.
In principle, we don't need the condition that the terms are types.
However, many files break if we remove it. The problem is that many files in the standard
library are abusing the higher-order unification procedure. The
elaboration problems are quite tricky to solve.
I use the extra condition "the terms are types" because usually if they
are, "f" is morally injective, and we don't really want to unfold it.

Note that the following two cases do not work

     check '{1, 2, 3}
     check insert 1 (insert 2 (insert 3 empty))

Well, they work if we the num namespace is open, and they are
interpreted as having type (finset num)
2015-08-31 17:59:30 -10:00
bin feat(bin/leanutil): start "compilation server" 2015-08-16 12:20:48 -07:00
doc refactor(library/data): rename fixed_list -> tuple 2015-08-13 16:45:34 -07:00
extras/latex fix(extras/latex/*): fix handling of attributes 2015-05-25 16:50:42 -07:00
hott feat(library,hott): add notation T1 : T2 as syntax sugar for (focus (T1; all_goals T2)) 2015-08-08 10:16:25 -07:00
images chore(CMakeLists.txt): move Lean logo to make sure we can test leanemacs without installing Lean 2015-01-31 17:38:49 -08:00
library feat(library/data/num): show that num has decidable equality 2015-08-31 17:47:07 -10:00
script feat(script/lib_perf): use gtime if time doesn't work 2015-07-02 11:04:16 -07:00
src fix(library/unifier): fixes #809 2015-08-31 17:59:30 -10:00
tests fix(library/unifier): fixes #809 2015-08-31 17:59:30 -10:00
.gitignore chore(.gitignore): add compile_commands.json 2015-03-28 22:38:13 -04:00
.travis.osx.yml fix(.travis.osx.yml): explicitly turn on multi-thread support 2015-05-06 02:37:31 -04:00
.travis.windows.yml fix(.travis.windows.yml): use cmake-2.8.11.2 2015-05-05 17:17:37 -04:00
.travis.yml fix(.travis.yml): add missing ';'s 2015-05-13 17:52:39 -04:00
LICENSE Add LICENSE file 2013-07-15 18:55:48 -07:00
README.md chore(README): remove coveralls "badge" 2015-08-20 18:00:15 -07:00

logo

LicenseWindowsUbuntuOS XBuilds/Tests

Issue Stats Issue Stats

About

Requirements

Installing required packages at

Windows

Linux

OS X

Build Instructions

Miscellaneous