lean4-htt/tests/lean/mutwftypemismatch.lean
Joachim Breitner f89ed40618
refactor: ArgsPacker (#3621)
This introduces the `ArgsPacker` module and abstraction, to replace the
exising `PackDomain`/`PackMutual` code. The motivation was that we now
have more uses besides `Fix.lean` (`GuessLex` and `FunInd`), and the
code was spread in various places.

The goals are

* consistent function naming withing the the `PSigma` handling, the
`PSum` handling, and the combined interface
* avoid taking a type apart just based on the `PSigma`/`PSum` nesting,
to be robust in case the user happens to be using `PSigma`/`PSum`
somewhere. Therefore, always pass an `arity` or `numFuncs` or `varNames`
around.
* keep all the `PSigma`/`PSum` encoding logic contained within one
module (`ArgsPacker`), and keep that module independent of its users (so
no `EqnInfos` visible here).
 * pick good variable names when matching on a packed argument
* the unary function now is either called `fun1._unary` or
`fun1._mutual`, never `fun1._unary._mutual`.

This file has less heavy dependencies than `PackMutual` had, so build
parallelism is improved as well.
2024-03-14 14:59:40 +00:00

28 lines
466 B
Text

namespace Ex1
mutual
def foo : Nat → Nat
| 0 => 1
| n+1 => bar n
termination_by n => n
def bar : Nat → Nat
| 0 => 1
| n+1 => foo n
termination_by n => n > 2
end
end Ex1
namespace Ex2
-- With dependency on fixed parameter
mutual
def foo (fixed : Nat) : Nat → Nat
| 0 => 1
| n+1 => bar fixed n
termination_by n => n
def bar (fixed : Nat) : Nat → Nat
| 0 => 1
| n+1 => foo fixed n
termination_by n => (⟨n, sorry⟩ : Fin fixed)
end
end Ex2