Commit graph

7455 commits

Author SHA1 Message Date
Leonardo de Moura
4ee131981d feat: in an inductive family the longest fixed prefix of indices is now promoted to parameters
This modification is relevant for fixing regressions on recent changes
to the auto implicit behavior for inductive families.

The following declarations are now accepted:
```lean
inductive HasType : Fin n → Vector Ty n → Ty → Type where
  | stop : HasType 0 (ty :: ctx) ty
  | pop  : HasType k ctx ty → HasType k.succ (u :: ctx) ty

inductive Sublist : List α → List α → Prop
  | slnil : Sublist [] []
  | cons l₁ l₂ a : Sublist l₁ l₂ → Sublist l₁ (a :: l₂)
  | cons2 l₁ l₂ a : Sublist l₁ l₂ → Sublist (a :: l₁) (a :: l₂)

inductive Lst : Type u → Type u
  | nil  : Lst α
  | cons : α → Lst α → Lst α
```

TODO: universe inference for `inductive` should be improved. The
current approach is not good enough when we have auto implicits.

TODO: allow implicit fixed indices that do not depend on indices that
cannot be moved to become parameters.
2022-03-08 17:56:34 -08:00
Leonardo de Moura
234046521a feat: print number of parameters for an inductive type 2022-03-08 17:48:46 -08:00
Leonardo de Moura
7b84b4cdaa fix: improve inductive indices elaboration
TODO: convert fixed indices to parameters. Motivation: types such as
```lean
inductive Foo : List α → Type
  | mk : Foo []
```
Users should not need to write
```lean
inductive Foo {α} : List α → Type
  | mk : Foo []
```
2022-03-08 17:48:46 -08:00
Jonathan Coates
11cce61e4d chore: Clean up LSP folding a little
- Wait for all terms to be elaborated before showing folding regions.
   May want to change this to support partial results.
 - Use .span to extract import statements, rather than mutually
   recursive functions.
 - Some tiny other bits of cleanup
2022-03-07 17:23:35 +01:00
Jonathan Coates
04e60cebd1 feat: LSP code folding support
The following constructs are foldable:
 - Sections and namespaces
 - Blocks of import/open statements
 - Multi-line commands (so mostly definitions)
 - Mutual definitions
 - Module-level doc comments
 - Top-level definition doc comments

Fixes #1012
2022-03-07 17:23:35 +01:00
Sebastian Ullrich
f2d5470f19 feat: allow interpretation of constants initialized by native code 2022-03-07 10:59:49 +01:00
Leonardo de Moura
dddfb65660 test: use notation 2022-03-06 19:28:01 -08:00
Leonardo de Moura
7c5604996a test: unfoldr 2022-03-06 19:26:04 -08:00
Leonardo de Moura
10bccfe501 test: remove workaround 2022-03-06 13:58:42 -08:00
Leonardo de Moura
46d1111d3d fix: typo at unfoldBothDefEq 2022-03-06 13:54:42 -08:00
Leonardo de Moura
ff0f3bfc61 fix: interaction between overloaded notation and delayed coercions
The new test exposes this issue.
2022-03-06 09:49:15 -08:00
Leonardo de Moura
e9909020e8 test: add delay helper contructor 2022-03-06 08:08:51 -08:00
Leonardo de Moura
1450a86c4d feat: include types in the "ambiguous, possible interpretations" error message 2022-03-06 07:26:31 -08:00
Leonardo de Moura
d3b2028a05 feat: add Fin.succ 2022-03-05 17:36:38 -08:00
Leonardo de Moura
3f9c854194 feat: auto local implicit chaining 2022-03-05 17:30:15 -08:00
Leonardo de Moura
22731c02b0 fix: auto implicit locals in inductive families 2022-03-05 15:47:20 -08:00
Leonardo de Moura
613cf19509 fix: discrimination trees and "stuck" terms
See comments and new test.
2022-03-05 15:12:20 -08:00
Leonardo de Moura
9e76cd7d65 fix: toName function at elabAppFnId
closes #1038
2022-03-04 16:56:02 -08:00
Leonardo de Moura
a670ed1e2d fix: use withoutErrToSorry at apply
closes #1037
2022-03-04 14:36:10 -08:00
Leonardo de Moura
82b056aa75 chore: fix test 2022-03-03 19:53:35 -08:00
Leonardo de Moura
8b248e2d8c feat: elaborate for h : x in xs do ... notation 2022-03-03 19:52:26 -08:00
Leonardo de Moura
b4ddcd600b chore: fix test 2022-03-03 19:15:07 -08:00
Leonardo de Moura
b745c4f51a fix: recursive overapplication at WF/Fix.lean 2022-03-03 18:13:34 -08:00
Leonardo de Moura
4657d47c16 chore: fix tests 2022-03-03 18:13:34 -08:00
Leonardo de Moura
043d338271 feat: add getForbiddenByTrivialSizeOf 2022-03-03 11:12:32 -08:00
Leonardo de Moura
1f2618adba feat: delaborate cond using bif-then-else 2022-03-03 07:41:39 -08:00
Leonardo de Moura
8dd76868ff test: plan for supporting combinators (e.g., List.foldl) in WF recursion 2022-03-02 15:18:25 -08:00
Leonardo de Moura
e091e7fb30 test: simplify proofs 2022-03-02 13:57:43 -08:00
Leonardo de Moura
4ba97c22ec test: proving properties of mutually defined functions 2022-03-02 13:40:19 -08:00
Leonardo de Moura
14ef4b4304 test: add WF test that exposes the need for better error messages 2022-03-02 12:47:19 -08:00
Leonardo de Moura
52403fca83 feat: add support for guessing (very) simple WF relations
There are a lot of TODOs, but it is already useful for simple cases.

closes #847
2022-03-02 11:52:00 -08:00
Leonardo de Moura
1e205d635e fix: bug at wfRecursion
"After compilation" attributes were being applied to soon when we did
not need to generate auxiliary functions.
2022-03-01 17:48:06 -08:00
Leonardo de Moura
2daf8d62ac test: LazyList with Thunk 2022-03-01 16:55:56 -08:00
Leonardo de Moura
da55789c26 feat: add a proper BEq instance for Nat 2022-03-01 09:01:08 -08:00
Gabriel Ebner
3746005f5f fix: reject projection (_ : ∃ x, p).2
The inferred type of this projection does not even type check, in general.
2022-03-01 09:00:46 -08:00
Leonardo de Moura
4e310ac63d feat: improve SimpTheorem preprocessor 2022-02-28 18:27:36 -08:00
Leonardo de Moura
adf3510e08 chore: increase maxHeartbeats default values
We now increase the number of heartbeats at `expr_eq_fn`. Thus, the
old default values are too small.
2022-02-28 15:44:08 -08:00
Leonardo de Moura
e455df9c95 fix: use a def-eq aware mapping at toLinearExpr
The new test exposes the problem fixed by this commit.
In the termination proof we have two `sizeOf xs` terms that are not
syntactically identical (only definitional equal) because the
instances are different.
2022-02-28 13:46:36 -08:00
Leonardo de Moura
10657f5e81 feat: add trace <string> tactic 2022-02-28 11:16:42 -08:00
Leonardo de Moura
63a5cd5056 fix: trace_state messages should not be lost during backtracking 2022-02-28 11:07:41 -08:00
Sebastian Ullrich
53d313c74c chore: fix function name 2022-02-28 16:16:22 +01:00
Leonardo de Moura
c5fdd54cd8 feat: support for acyclicity at unifyEqs
closes #1022
2022-02-27 10:03:40 -08:00
Leonardo de Moura
89f88b1caa feat: simplify nested arith expressions 2022-02-27 09:01:52 -08:00
Leonardo de Moura
2c00823da9 test: simp_arith 2022-02-27 09:01:52 -08:00
Leonardo de Moura
90055fb7d4 chore: clarify error message at decreasing_tactic 2022-02-26 10:15:05 -08:00
Leonardo de Moura
f22b48b226 fix: display all remaining goals at fail tactic error message 2022-02-26 09:49:06 -08:00
Leonardo de Moura
f7f886dcb2 feat: improve error message for decreasing_tactic failures 2022-02-26 09:42:59 -08:00
Leonardo de Moura
cabd599de1 feat: add fail tactic 2022-02-26 09:31:19 -08:00
Leonardo de Moura
0242eb7ede feat: use simp (config := { arith := true }) at decreasing_tactic
closes #262
2022-02-26 09:12:34 -08:00
Leonardo de Moura
ff76958959 feat: basic support for linear Nat arithmetic at simp 2022-02-26 08:58:32 -08:00