lean4-htt/library
Sebastian Ullrich 8f55ec4c50 fix(init/core): remove out_param from has_pow
With the current elaboration scheme, out_params and coercions do not mix well,
as evidenced by the following example by @digama:

```
variables {α : Type*} [group α]
def gpow : α → ℤ → α := sorry
instance group.has_pow : has_pow α ℤ := ⟨gpow⟩

example (a : α) : a ^ 0 = 1 := sorry -- failed to synth ⊢ has_pow α ℕ
example (a : α) : a ^ (0:ℕ) = 1 := sorry -- ok, coerces
example (a : α) : a ^ (0:ℤ) = 1 := sorry -- ok
```

The issue is that
* we first try to solve `has_pow ?α ?β`, which is postponed
* then infer `?α = nat` from `a`
* then at some point call `elaborator::synthesize()` and default `β` to `nat`
* then try to solve `has_pow nat nat`, which fails at `int =?= nat`
2018-04-04 13:05:59 +02:00
..
data fix(library/init/core): closes #1951 2018-03-29 16:25:47 -07:00
init fix(init/core): remove out_param from has_pow 2018-04-04 13:05:59 +02:00
smt chore(library/init/meta): add to_unfold parameter to simplify, and remove redundant simp* tactics 2017-07-02 15:26:06 -07:00
system feat(library/system/io): add io.run_tactic 2018-03-07 12:15:26 -08:00
tools/debugger chore(library): use new structure update notation in the core lib 2017-11-17 16:57:54 -08:00
leanpkg.path feat(leanpkg): add package manager 2017-05-01 14:11:38 -07:00
library.md chore(library/library.md): update documentation 2017-08-16 14:17:26 -07:00