Commit graph

13016 commits

Author SHA1 Message Date
Mario Carneiro
87f2ec08ad feat(init/meta/interactive): suffices tactic
Just a simple manipulation of the `have` tactic, but it allows the use of `suffices h : T, from p,` in tactic mode.
2017-09-06 10:50:31 -07:00
Gabriel Ebner
19777cf9eb fix(frontends/lean/definition_cmds): show trace messages in examples 2017-09-06 14:44:44 +02:00
Gabriel Ebner
5adb3630b2 chore(tests): update test output 2017-09-06 14:27:39 +02:00
Gabriel Ebner
5f8cf45073 feat(frontends/lean/elaborator): apply to-sort coercion also in arguments 2017-09-06 14:15:30 +02:00
Gabriel Ebner
7b18d5828d feat(frontends/lean/elaborator): trigger coe_to_fun even when expected type has metavariables
We only need to know that the expected type is a Π to perform
to-function coercion.  Related to #1402.

Fixes https://github.com/gebner/hott3/issues/2
2017-09-06 11:20:04 +02:00
Gabriel Ebner
b59d2771ea fix(doc/changes): describe fallout from parameterized user attributes
@kha This was an unexpected breakage resulting from #1809.
2017-09-06 08:39:30 +02:00
Leonardo de Moura
88cd294a09 feat(src/kernel/error_msgs): show aliased variables when printing error messages
closes #1814

@kenmcmil: the error messages will now list aliased variables.
For example, in your file, the new error message is:

```
invalid type ascription, term has type
  triple (ctxpre c' s_1 ∧ ctxpre c'_1 s_1) (bndngapp b s_1) (ctxpost c' s_1 ∧ ctxpost c'_1 s_1)
but is expected to have type
  triple (ctxpre c' s_1 ∧ ctxpre c'_1 s_1) (bndngapp b s_1) (ctxpost c' s_1 ∧ ctxpost c'_1 s_1)
types contain aliased name(s): c'
remark: the tactic `dedup` can be used to rename aliases
state:
...
```
2017-09-05 16:46:44 -07:00
Leonardo de Moura
51bac2918f chore(library/init/core): declare and using structure
This change was requested by several users.
2017-09-05 15:08:20 -07:00
Leonardo de Moura
3af8ca11bc chore(tests/lean/run/1797): add test for #1797 2017-09-05 14:36:51 -07:00
Mario Carneiro
cc9de4af58 feat(init/meta/interactive): cases with equality
This is the equivalent of the `ginduction` tactic for cases, but rolled into the same syntax as `cases` itself. `cases h : term` is the syntax, and it will introduce a hypothesis `h : term = C a b...` demonstrating that the original term is equal to the current case.

I considered the possibility of calling `injection` on the generated equalities, but it's useless in the casaes when the equality carries some real information (such as `f x = C1 a`), and when the input term is a local constant, `injection` will do subst, which will undo the effect of the `cases`. If the input term is a constructor, then `injection` would do something interesting, but you would never want to call `cases` in this case because the constructor is already exposed.
2017-09-05 14:31:52 -07:00
Leonardo de Moura
8a10d4c72c fix(library/init/meta/injection_tactic): fixes #1805 2017-09-05 14:20:22 -07:00
Sebastian Ullrich
0dc9d1b4ac chore(doc/changes): update changelog 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
1544c3d390 feat(library/tactic/user_attribute,init/meta/attribute): user_attribute.set_param 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
399bb95065 chore(emacs/lean-dev): fix lean-diff-test-file 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
52a9f82bc2 feat(init/meta/derive): implement [derive] attribute 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
51aabb9b65 feat(frontends/lean/decl_attributes): allow user attributes on inductive types 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
ea6a4159a9 feat(library/tactic/user_attribute,init/meta/attribute): implement parameterized user attributes 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
9ed678d80a feat(frontends/lean/elaborator): structure notation: synthesize instance-implicit fields 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
3188c4cbcf refactor(library/tactic/user_attribute,init/meta/attribute): merge caching_user_attribute into user_attribute
The inheritance-based approach doesn't scale to a second subclass for parameterized attributes
2017-09-05 23:14:34 +02:00
Sebastian Ullrich
3aa5ebb8bd feat(frontends/lean/elaborator): structure notation: allow explicit ctor param when given expected type 2017-09-05 23:14:34 +02:00
Sebastian Ullrich
da785d96a0 fix(frontends/lean/elaborator): synthesize metavars in e before trying to synthesize reflected e 2017-09-05 23:14:34 +02:00
Leonardo de Moura
da46862b46 fix(library/init/meta/interactive): fixes #1813 2017-09-05 13:33:05 -07:00
Gabriel Ebner
f1ec117a24 doc(changes): option.{map,bind} renaming 2017-09-05 17:13:07 +02:00
Gabriel Ebner
40de4f14c1 feat(library/tactic/simp_lemmas): allow simplification with let-bindings in the local context 2017-09-05 10:24:02 +02:00
Mario Carneiro
f5253fd060 fix(init/data/option/instances): Use option.* instead of option_*
This enables use of projection notation. Note that the notations are not always available here since they require one universe instead of two.
2017-09-05 08:35:26 +02:00
Gabriel Ebner
292527896a feat(leanpkg): store Lean version in leanpkg.toml 2017-09-05 08:34:40 +02:00
Gabriel Ebner
488850e03a fix(library/util): get_num_inductive_hypotheses_for: use whnf to detect recursive arguments
Fixes #1812.
2017-09-05 08:28:32 +02:00
Gabriel Ebner
2d69fc9cd7 fix(library/init/meta/coinductive_predicates): bug with reflexive occurrences 2017-09-04 09:54:12 +02:00
Sebastian Ullrich
f255513fdc fix(frontends/lean/definition_cmds): apply attributes after declaring equational lemmas
Fixes `@[simp] def ...`
2017-09-01 13:36:53 +02:00
Gabriel Ebner
8837ce0f31 fix(shell/lean): add missing newline 2017-08-29 16:40:04 +02:00
Gabriel Ebner
de0fc09ab9 fix(library/congr_lemma): always return heq in mk_hcongr_lemma 2017-08-29 16:36:37 +02:00
Gabriel Ebner
eda1efcb5f fix(library/init/meta/congr_tactic): export congr as an interactive tactic 2017-08-29 16:34:59 +02:00
Gabriel Ebner
05178ad950 chore(frontends/lean/decl_cmds,emacs/lean-syntax): typo 2017-08-28 17:04:03 +02:00
Gabriel Ebner
9920062b69 fix(kernel/expr,library/constructions/projection): preserve instance-implicitness in structure parameters 2017-08-27 16:47:04 +02:00
Sebastian Ullrich
07d8b18caf feat(init/meta/pexpr): expose pexpr.is_placeholder 2017-08-26 23:22:06 +02:00
Johannes Hölzl
2e5284add7 fix(library/init/algebra/ordered_field): remove unused argument from div_two_lt_of_pos 2017-08-24 16:27:42 +02:00
Sebastian Ullrich
3062c6feb7 feat(init/meta): expose pexpr.get_structure_instance_info 2017-08-24 10:36:43 +02:00
Sebastian Ullrich
cfbb298a2a fix(emacs/lean-type): lean-helm-definitions: disable client-side filtering & caching 2017-08-24 10:33:20 +02:00
Leonardo de Moura
ac0be0ecc6 chore(frontends/lean/elaborator): style 2017-08-22 15:41:12 -07:00
Sebastian Ullrich
9e53147e0a feat(frontends/lean/elaborator): allow field notation for recursive calls 2017-08-22 15:33:37 -07:00
Leonardo de Moura
e99ce26b16 fix(library/type_context): fixes #1801
This commit also fixes the decay in error message quality reported at
c6a10b127f
2017-08-22 14:03:58 -07:00
Leonardo de Moura
971ae34521 feat(frontends/lean/elaborator): closes #1760
As described at issue #1760, the new error message is:
```
1760.lean:6:18: error: type mismatch at application
  f x
term
  x
has type
  big_type : Type 1
but is expected to have type
  ?m_1 : Type
```
2017-08-21 16:15:03 -07:00
Leonardo de Moura
fb2186334a fix(library/init/meta/relation_tactics,library/tactic/subst_tactic): fixes #1772 2017-08-21 14:51:30 -07:00
Leonardo de Moura
5cbc1470b9 chore(bin/leanpkg): return nicer error message if greadlink is not available on OSX
see issue #1788
2017-08-21 20:20:13 +02:00
Gabriel Ebner
7453148ad2 fix(library/tactic/simp_lemmas): only check has_idx_metavar in simp_lemmas.rewrite
This copies the change made in 2ca2920284
2017-08-20 09:30:16 +02:00
Gabriel Ebner
8a6d2e2a54 chore(library/init/meta/simp_tactic): typo 2017-08-20 09:25:44 +02:00
Gabriel Ebner
df5fb70c8a fix(emacs/lean-server): fix "error running timer"
This error occurred in files without trailing newlines.
2017-08-19 13:35:58 +02:00
Leonardo de Moura
049d940167 chore(frontends/lean/elaborator): cleanup 2017-08-18 17:50:29 -07:00
Leonardo de Moura
c6a10b127f chore(tests/lean): fix tests
Remarks:
- Some tests do not produce error messages anymore because they can be
  processed using the new equation compiler preprocessor.

- Some error messages got worse because of the preprocessing step.
  We use metavariables in the preprocessing step. This information
  may "leak" to users. Another problem is that some variable names
  are lost. Example: in the following definition

  def to_nat : ∀ {n}, fi n → nat
  | (succ n) f0     := 0
  | (succ n) (fs i) := succ (to_nat i)

  The preprocessing step uses metavariables for pattern variables.
  Thus, we have

  def to_nat : ∀ {n}, fi n → nat
  | (succ ?n) (@f0 ?x)    := 0
  | (succ ?n) (@fs ?x ?i) := succ (to_nat i)

  when solving the constraint `succ ?n =?= succ ?x`, Lean assigns
        ?n := ?x
  after solving these constraints, the preprocessor converts
  metavariables into pattern variables again, and we have

  def to_nat : ∀ {n}, fi n → nat
  | (succ x) (@f0 x)   := 0
  | (succ x) (@fs x i) := succ (to_nat i)

  So, we get the following equation lemmas:

  to_nat.equations._eqn_1 : ∀ (x : ℕ), @to_nat (succ x) (@f0 x) = 0
  to_nat.equations._eqn_2 : ∀ (x : ℕ) (i : fi x), @to_nat (succ x) (@fs x i) = succ (@to_nat x i)

  instead of

  to_nat.equations._eqn_1 : ∀ (n : ℕ), @to_nat (succ n) (@f0 n) = 0
  to_nat.equations._eqn_2 : ∀ (n : ℕ) (i : fi n), @to_nat (succ n) (@fs n i) = succ (@to_nat n i)
2017-08-18 17:32:13 -07:00
Leonardo de Moura
b6e24ba5c3 chore(tests/lean/run/bin_tree): fix test 2017-08-18 17:05:52 -07:00