lean4-htt/src/library/tactic/smt
Leonardo de Moura 5cef84709f refactor(library): avoid auxiliary definitions such as add/mul/le/etc
See Section "Other goodies" at
https://github.com/leanprover/lean/wiki/Refactoring-structures

This commit also improves the support for projections in the
unifier/matcher.

Now, we consider the extra case-split for projections.
Given a projection `proj`, and the constraint `proj s =?= proj t`, we need to try first `s =?= t` and if it fails, then try to reduce.
This is needed in the standard library because we now have constraints such as:
```
@has_le.le ?A ?s ?a ?b  =?=  @has_le.le nat nat.has_add x y
```
If we reduce the right hand side, we get the unsolvable constraint
```
@has_le.le ?A ?s ?a ?b  =?=  nat.le x y
```
Before this change, the constraint was `@le ?A ?s ?a ?b  =?=  @le nat nat.has_add x y`, and we already perform a case-split in this case.
Moreover, projections were eagerly reduced whenever possible.
The extra case-split generates a performance problem in several tests. For example `fib 8 = 34` was timing out.
I worked around this issue by performing the case-split only when the constraint contains meta-variables.
There are also minor issues. Example. `<` is notation for `has_lt.lt`, but `>` is for `gt`.
2017-05-01 08:52:19 -07:00
..
CMakeLists.txt feat(library/tactic/smt): perform "unit propagation" in the congruence closure module 2017-01-02 18:49:26 -08:00
congruence_closure.cpp feat(library): instances are not reducible by default anymore 2017-04-26 14:10:11 -07:00
congruence_closure.h fix(library/tactic/smt/congruence_closure): relation used to implement congruence tables was not transitive 2017-03-17 16:04:41 -07:00
congruence_tactics.cpp chore(frontends/lean,library/tactic): remove old tactic_state functions 2017-02-17 15:41:58 +01:00
congruence_tactics.h refactor(library/tactic/smt): move ematch Lean bindings to ematch.cpp 2017-01-05 10:35:59 -08:00
ematch.cpp refactor(library): avoid auxiliary definitions such as add/mul/le/etc 2017-05-01 08:52:19 -07:00
ematch.h fix(library/tactic/smt/ematch): fix compiler warning 2017-04-27 16:04:18 -07:00
hinst_lemmas.cpp fix(library): fix various leaks 2017-03-23 09:00:59 +01:00
hinst_lemmas.h feat(library/tactic/smt/smt_state): add ematch_using tactic 2017-01-06 00:24:25 -08:00
init_module.cpp feat(library/init/meta): smt_tactic skeleton 2016-12-31 18:22:23 -08:00
init_module.h
smt_state.cpp refactor(library): avoid auxiliary definitions such as add/mul/le/etc 2017-05-01 08:52:19 -07:00
smt_state.h feat(library/tactic/smt): add get_config and use it to implement slift 2017-02-18 17:52:45 -08:00
theory_ac.cpp feat(library/tactic/smt/congruence_closure): make sure congruence closure module does not assign metavariables when using is_def_eq 2017-03-17 13:48:09 -07:00
theory_ac.h feat(library/tactic/smt/ematch): skeleton for AC support 2017-01-08 23:53:57 -08:00
util.cpp feat(library/tactic/smt): add get_config and use it to implement slift 2017-02-18 17:52:45 -08:00
util.h