Leonardo de Moura
7a75325416
feat(kernel/abstract): add new abstract_local procedure
...
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2014-12-20 11:31:48 -08:00
Leonardo de Moura
8b3e97d285
feat(kernel/type_checker): add ensure_type variant
2014-12-11 17:32:17 -08:00
Leonardo de Moura
bc7ee2958f
fix(library/tactic/inversion_tactic): bug in mutually recursive case
2014-12-01 18:32:38 -08:00
Leonardo de Moura
4e572fac4e
feat(kernel/inductive): store whether an inductive datatype supports dependent elimination or not
2014-11-27 10:36:15 -08:00
Leonardo de Moura
5fff3113a9
refactor(library/tactic/inversion_tactic): add 'cases_on' step to inversion_tactic
2014-11-27 00:06:26 -08:00
Leonardo de Moura
ffdeb0edc4
fix(frontends/lean/elaborator): unsolved metavariables, fix #329
2014-11-26 11:56:39 -08:00
Leonardo de Moura
ef75cac1c0
feat(kernel/expr): change the rules for inferring implicit arguments, closes #344
2014-11-25 12:54:07 -08:00
Leonardo de Moura
e81d9c9184
perf(kernel/level): apply two simple normalization rules at mk_max
...
They are variations of:
max l1 (max l1 l2) == (max l1 l2)
2014-11-16 18:16:57 -08:00
Leonardo de Moura
67de3b06f3
feat(kernel/level): improve universe level pretty printer
...
Example: produce `l+2` instead of `succ (succ l)`.
2014-11-14 14:51:03 -08:00
Leonardo de Moura
ffffabad95
feat(kernel/level): improve is_geq procedure for universe levels
...
Now, it also returns true for
(succ^k1 a) =?= k2
where k1 >= k2
2014-11-14 14:20:35 -08:00
Leonardo de Moura
51719145f9
feat(library/unifier): solved universe constraints of the form succ^k1 a = max k2 ?m (when k1 >= k2)
2014-11-12 17:28:33 -08:00
Leonardo de Moura
50973bb4f3
feat(frontends/lean): default 'eval' command ignores opaque/irreducible annotations
...
To retrieve the previous behavior, we should use [strict] modifier
2014-11-10 12:46:04 -08:00
Leonardo de Moura
8d05238533
fix(kernel/error_msgs): ignore binder information when comparing type mismatches, fixes #304
2014-11-06 21:03:51 -08:00
Leonardo de Moura
af88e34588
fix(kernel/inductive): bug in eliminator for recursive datatypes in Prop
2014-11-06 14:03:28 -08:00
Leonardo de Moura
e499f8e20a
feat(kernel/inductive): relax conditions for an inductive datatype in Prop to be able to eliminate into Type
...
The new relaxed version allows us to define the "accessability"
proposition and have an eliminator into Type.
See justification in the new comments at inductive.cpp
2014-11-06 09:36:54 -08:00
Leonardo de Moura
84b516994c
fix(library/tactic): type check generalization result, fixes #273
2014-10-29 20:34:01 -07:00
Leonardo de Moura
777aa63660
fix(kernel/inductive): relax eliminator generation rules for empty types
...
This commit also removes the workaround false.rec_type. It is not needed anymore
2014-10-28 10:31:00 -07:00
Leonardo de Moura
7516fcad97
feat(kernel/type_checker): add is_stuck
method, and improve ensure_pi method, closes #261
2014-10-27 13:16:50 -07:00
Leonardo de Moura
7240a1a640
feat(kernel/inductive): add get_num_minor_premises and get_num_type_formers APIs
2014-10-25 11:17:29 -07:00
Leonardo de Moura
2bc034da2c
feat(kernel/inductive): expose 'get_elim_name' API
2014-10-25 10:47:12 -07:00
Leonardo de Moura
9e69a95b26
feat(kernel/inductive): add API for retrieving the number of indices in an inductive datatype
2014-10-25 10:42:05 -07:00
Leonardo de Moura
c30c0fa3b8
fix(kernel/metavar): avoid crash due to stack overflow, closes #253
2014-10-25 00:20:59 -07:00
Leonardo de Moura
40235c6af0
fix(kernel/type_checker): propagate 'memoize' flag to default_converter
2014-10-23 13:15:53 -07:00
Leonardo de Moura
33f18b9454
fix(kernel/converter): remove buggy eta-reduction and rely only on eta-expansion
...
The bug is exposed by new unit test
2014-10-21 16:54:25 -07:00
Leonardo de Moura
6a31a79265
refactor(frontends/lean/inductive_cmd): move auxiliary method to expr.h
2014-10-18 15:11:26 -07:00
Leonardo de Moura
2369388629
refactor(kernel/instantiate): cleanup beta-reduce
2014-10-17 20:19:51 -07:00
Leonardo de Moura
1ce3b83d79
fix(kernel/metavar): compilation error in some compilers
2014-10-17 17:22:25 -07:00
Leonardo de Moura
58aff5b4af
perf(kernel/metavar): used thread local cache for instantiate_metavars
2014-10-17 17:08:35 -07:00
Leonardo de Moura
6d64da2981
perf(kernel/expr_eq_fn): use thread local cache, and avoid memory allocation/deallocation
2014-10-17 16:44:20 -07:00
Leonardo de Moura
7cc3dd0b4d
chore(kernel/replace_fn): "name" constant
2014-10-17 14:20:35 -07:00
Leonardo de Moura
b6afbcb7f5
perf(kernel/replace_fn): use 'recursive' replace_fn for "small" terms
2014-10-17 14:15:09 -07:00
Leonardo de Moura
10b880ce3b
perf(kernel/metavar): improve occurs_expr and occurs performance
2014-10-17 14:05:22 -07:00
Leonardo de Moura
d2cbd25985
refactor(kernel): replace_visitor doesn't need to be in the kernel anymore
2014-10-17 10:23:35 -07:00
Leonardo de Moura
14ebbda8cb
perf(kernel/metavar): minor improvement
2014-10-16 21:43:54 -07:00
Leonardo de Moura
fe484b26f3
refactor(kernel/expr): remove dead code
2014-10-16 13:45:36 -07:00
Leonardo de Moura
3b6b23c921
refactor(kernel/expr): remove silly overloads
2014-10-16 13:37:55 -07:00
Leonardo de Moura
c4f02bd16a
refactor(kernel/expr): remove dead code
2014-10-16 13:09:26 -07:00
Leonardo de Moura
97a7dae12a
refactor(kernel/expr): remove code duplication
2014-10-16 12:48:49 -07:00
Leonardo de Moura
814778abb1
refactor(kernel/expr): tag expressions at "creation" time
2014-10-15 13:12:09 -07:00
Leonardo de Moura
de7c850782
feat(kernel/converter): relax is_def_eq test for local constants and meta-variables
2014-10-14 15:31:57 -07:00
Leonardo de Moura
940092a975
fix(kernel/constraint): bug in operator<<
2014-10-14 15:22:03 -07:00
Leonardo de Moura
a26618e0f2
feat(frontends/lean): add '[]' notation for marking arguments where class-instance resolution should be applied
2014-10-12 13:06:00 -07:00
Leonardo de Moura
235b8975d2
feat(kernel/inductive): K-like reduction in the kernel
...
Given (H_1 : a = a), we have that
eq.rec H_2 H_1
reduces to H_2
This is not exclusive to equality.
It applies to any inductive datatype in Prop, containing only one
constructor with zero "arguments" (we say they are nullary).
BTW, the restriction to only one constructor is not needed, but it is
does not buy much to support multiple nullary constructors since Prop is
proof irrelevant.
2014-10-10 14:37:45 -07:00
Leonardo de Moura
5a71542aeb
feat(kernel/inductive): track when K-like reduction can be used
2014-10-10 08:50:24 -07:00
Leonardo de Moura
93e0599a0f
feat(kernel/level): add missing normalization rule
2014-10-08 22:23:19 -07:00
Leonardo de Moura
92c424936a
refactor(kernel/macro_definition_cell): improve macro get_type API
2014-10-07 16:38:31 -07:00
Leonardo de Moura
bf081ed431
refactor(kernel): rename var_decl to constant_assumption
...
Motivation: it matches the notation used to declare it.
2014-10-02 17:55:34 -07:00
Leonardo de Moura
98e66586e9
feat(frontends/lean/elaborator): elaborator rejects 'Type' if the universe is explicit
2014-10-02 14:29:51 -07:00
Leonardo de Moura
c46ec6a548
fix(frontends/lean): missing type information for INFO, fixes #218
2014-10-01 14:29:07 -07:00
Leonardo de Moura
966366e18e
feat(kernel/inductive): relaxed rules for defining datatypes with explicit universes, closes #217
2014-10-01 10:56:05 -07:00