Commit graph

6 commits

Author SHA1 Message Date
Kyle Miller
45fccc5906
feat: custom eliminators for induction and cases tactics, and beautiful eliminators for Nat (#3629)
Replaces `@[eliminator]` with two attributes `@[induction_eliminator]`
and `@[cases_eliminator]` for defining custom eliminators for the
`induction` and `cases` tactics, respectively.

Adds `Nat.recAux` and `Nat.casesAuxOn`, which are eliminators that are
defeq to `Nat.rec` and `Nat.casesOn`, but these use `0` and `n + 1`
rather than `Nat.zero` and `Nat.succ n`.

For example, using `induction` to prove that the factorial function is
positive now has the following goal states (thanks also to #3616 for the
goal state after unfolding).
```lean
example : 0 < fact x := by
  induction x with
  | zero => decide
  | succ x ih =>
    /-
    x : Nat
    ih : 0 < fact x
    ⊢ 0 < fact (x + 1)
    -/
    unfold fact
    /-
    ...
    ⊢ 0 < (x + 1) * fact x
    -/
    simpa using ih
```

Thanks to @adamtopaz for initial work on splitting the `@[eliminator]`
attribute.
2024-03-09 15:31:51 +00:00
Leonardo de Moura
41539a7725 fix: leftovers in the local context when applying induction 2021-03-27 19:42:22 -07:00
Leonardo de Moura
4a0f8bf21a feat: improve generalizing at induction 2021-03-27 14:28:03 -07:00
Sebastian Ullrich
f4c3d068ae feat: uniform "unsolved case" positions with fullRange
/cc @leodemoura
2021-03-17 12:45:15 +01:00
Sebastian Ullrich
b2b78eb222 test: use printMessageEndPos for leantests 2021-01-15 16:27:59 +01:00
Leonardo de Moura
b0e8183663 fix: error position for unsolved goals at cases and induction tactics 2020-11-13 07:59:50 -08:00