Commit graph

635 commits

Author SHA1 Message Date
Leonardo de Moura
ba5d622e59 chore: avoid case tactic 2021-05-01 19:50:50 -07:00
Leonardo de Moura
920a2b2a14 perf: Ord USize instance and missing inline 2021-04-27 12:08:21 -07:00
Daniel Fabian
0238bf8c33 refactor: use Ordering inside of rbmap instead of lt. 2021-04-27 07:58:58 -07:00
Leonardo de Moura
3a80e87793 chore: #405 step 1 2021-04-22 20:03:48 -07:00
Leonardo de Moura
157ef80c5a feat: match auto generalization 2021-04-16 21:48:38 -07:00
Daniel Fabian
401765f587 test: add test that deriving Ord compiles in various cases. 2021-04-03 21:27:26 -07:00
Daniel Fabian
fb4a119ed7 fix: allow also recursive types in the Ord construction. 2021-04-03 21:27:26 -07:00
Daniel Fabian
a8914380dc feat: add Ord and deriving instance for it.
For many data structures having an ordering is necessary. This one adds the `Ord` type class and a deriving handler for it. The ordering is based on order of constructors followed by lexicographical ordering within a constructor.
2021-04-03 21:27:26 -07:00
Daniel Fabian
ed75005422 feat: make proofs Hashable
change the `Hashable` class from taking a hash function of `Type u` to taking a
hash function from `Sort u`. This allows to implement `Hashable` for
propositions, which in turn is needed for inductives carrying proofs
2021-03-30 13:36:52 -07:00
Daniel Fabian
fee3390dd1 feat: add Hashable deriving
add support for the `Hashable` deriving by combining structural
hashes over fields
2021-03-30 13:36:52 -07:00
Leonardo de Moura
efe67453ac chore: add Repr Lean.SourceInfo 2021-03-29 16:55:56 -07:00
Leonardo de Moura
3176be136c feat: improve "discriminant refinement" 2021-03-24 21:05:08 -07:00
Leonardo de Moura
9a5f239513 refactor: remove Monad Option and Alternative Option
We should use `OptionM` instead.
`Option` still implements `Functor` and `OrElse`.

cc @Kha
2021-03-20 18:25:25 -07:00
Leonardo de Moura
04e3f21783 chore: add OptionM monad
Motivation: `Option` is data, `OptionM` is control.
2021-03-20 17:50:45 -07:00
Sebastian Ullrich
e62542ed29 feat: CoeSort Bool Prop 2021-03-20 14:52:16 +01:00
Leonardo de Moura
0720a53a9d chore: refactoring and cleanup 2021-03-17 14:56:08 -07:00
pcpthm
f645429df4 chore: slightly nicer UInt shift definition 2021-03-17 10:08:02 +01:00
pcpthm
419a6190e8 fix: bitwise shift overflow of UInt types
It is an undefined behavior in C when the right operand of a shift operation exceeds the bit-width of the left operand.
We define the shift operation to be `x << (y % B)` where `B` is the bit-width of the left operand.
2021-03-17 10:08:02 +01:00
Leonardo de Moura
091fadbf64 feat: add List.rotateLeft and List.rotateRight 2021-03-12 17:09:22 -08:00
Leonardo de Moura
bf8119a5cd chore: convert keywords to snake_case
Again `!` is only for functions that can panic.
2021-03-12 13:34:51 -08:00
Leonardo de Moura
472c5fb900 fix: indentation issues 2021-03-12 11:09:28 -08:00
Leonardo de Moura
df994fd16f fix: add checkColGe to matchAlt
@Kha this is a fix for the example that @gebner posted on Zulip.
There are other possible workarounds, but I think this one is
"intuitive".

Here is the problem description and workaround.
We currently use the `withPosition` combinator at `matchAlts`. The
original motivation was nested `match`-expressions without
parenthesis.
We also have the `checkColGt` in the application parser.

Thus, `frob 5` is not parsed as an application. That is, the term
parser after the `then` keyword stops at `frob`.
Then, we get the weird "expected 'else'" error message at `5` :)

In this commit, I add a `checkColGe` check at the beginning of each
alternative right-hand-side.

The effect on the stdlib was minimal. It basically affected old code
that used the Lean 3 workaround for partial functions
```
partial def f : N -> N | i =>
  ...
```
In Lean 4, we can use the more natural
```
partial def f (i : N) : N :=
...
```
or
```
partial def f : N -> N := fun i =>
...
```

It also affected code such as
```
instance : Repr String.Iterator where
  reprPrec | ⟨s, pos⟩, prec =>
    Repr.addAppParen ("String.Iterator.mk " ++ reprArg s ++ " " ++ reprArg pos) prec
```
This is a workaround for a missing feature. We really wanted to write
```
instance : Repr String.Iterator where
  reprPrec ⟨s, pos⟩ prec :=
    Repr.addAppParen ("String.Iterator.mk " ++ reprArg s ++ " " ++ reprArg pos) prec
```
2021-03-12 11:06:07 -08:00
Leonardo de Moura
1112ab6eff chore: use new notation 2021-03-11 11:19:33 -08:00
Leonardo de Moura
9f88ea8047 chore: remove old decide!, nativeRefl!, and nativeDecide! 2021-03-11 08:06:20 -08:00
Leonardo de Moura
9901898258 feat: add Nat.gcd
This commit also fix some theorem names to new naming convention.
2021-03-07 18:47:02 -08:00
Joe Hendrix
9bd60c7519 feat: Nat/Fin/UInt instances of bitwise classes 2021-03-04 15:42:43 -08:00
Leonardo de Moura
4aec7579db test: add do equivalence examples 2021-03-03 13:44:30 -08:00
Leonardo de Moura
228bc2dd54 refactor: Traversable => ForM 2021-03-02 06:22:22 -08:00
Leonardo de Moura
35e1f5ad97 refactor: Foldable => Traversable 2021-02-28 16:11:20 -08:00
Leonardo de Moura
9d9f14cd5e chore: mark List.foldlM as protected 2021-02-28 09:14:37 -08:00
Leonardo de Moura
ef4d5950ae feat: add Foldable typeclass
We use it in the "`do` unchained" paper.
It will eventually replace `ForIn`.
2021-02-28 09:00:52 -08:00
Leonardo de Moura
b9ef6f89a4 chore: cleanup 2021-02-26 19:34:39 -08:00
Leonardo de Moura
5662e2e745 refactor: move ToString Syntax and BEq Syntax to Init 2021-02-26 13:21:04 -08:00
Leonardo de Moura
e1f6965266 feat: allow user to define rewrite lemmas with (local) match expressions 2021-02-19 15:18:19 -08:00
Leonardo de Moura
d1009e8405 chore: add simp lemmas, theorem naming convention 2021-02-16 11:53:49 -08:00
Leonardo de Moura
09ad6cc50a fix: fixes #306 fixes #307 2021-02-06 12:31:51 -08:00
Leonardo de Moura
f57c184dbd chore: remove = true old workarounds
@Kha The old `= true` workarounds are not needed anymore, they were
due to another issue and are not related to yesterday's issue.
That is, the one exposed by the `ForIn` typeclass.
2021-02-05 13:48:03 -08:00
Leonardo de Moura
d0ffecd419 chore: consistency
Make sure `Array.all` and `Array.any` parameter order is similar to
`List.all` and `List.any`.
2021-02-04 20:39:28 -08:00
Leonardo de Moura
53539b1dff chore: use polymorphic method forIn 2021-02-04 18:13:01 -08:00
Leonardo de Moura
aae8a35150 feat: add ForIn type class 2021-02-04 17:59:44 -08:00
Leonardo de Moura
d956f0ae9f feat: use destructTuple to compile for in notation instead of pattern matchin 2021-02-04 17:17:51 -08:00
Leonardo de Moura
768f2642bd chore: document why alternative Stream design does not work 2021-02-04 17:17:51 -08:00
Leonardo de Moura
5f704b6b6f chore: fix option name 2021-01-26 18:30:46 -08:00
Leonardo de Moura
d408c835d2 fix: defaultInstance priorities for Neg Int and OfScientific Float 2021-01-25 13:21:07 -08:00
Sebastian Ullrich
446f953461 feat: allow hygienic capture of section variables in quotations 2021-01-24 11:46:04 -08:00
Sebastian Ullrich
0c91b3769e chore: replace variables in src/ 2021-01-22 14:36:05 +01:00
Leonardo de Moura
1f88d66035 feat: add missing instances 2021-01-21 10:35:22 -08:00
Leonardo de Moura
e8401ea6e7 chore: remove old instances 2021-01-20 18:12:35 -08:00
Sebastian Ullrich
79107a2316 feat: copy & store whole ref range in SourceInfo 2021-01-20 16:48:50 +01:00
Sebastian Ullrich
8ad061e328 feat: leanpkg: change print-path to print-paths that also emit LEAN_SRC_PATH (unused as of yet) 2021-01-19 19:06:01 +01:00