It addresses issue reported at https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/'unreachable'.20code.20was.20reached.20by.20termination.20check/near/281159704
20 lines
734 B
Text
20 lines
734 B
Text
universe u
|
||
|
||
/-- A curried function of exactly `n` arguments; `α → ... → α → β` -/
|
||
abbrev CurriedFun (α β : Type u) : Nat → Type u
|
||
| 0 => β
|
||
| n+1 => α → CurriedFun α β n
|
||
|
||
/-- A curried type function of `n` arguments, i.e., `Type u → Type u → ... → Type u` -/
|
||
abbrev CurriedTypeFun : Nat → Type (u+1)
|
||
:= CurriedFun (Type u) (Type u)
|
||
|
||
/-- In my actual code, `GenTypeFun` is distinct from `CurriedTypeFun`, and `m` is used -/
|
||
abbrev GenTypeFun (n m : Nat) : Type _
|
||
:= CurriedFun (Type u) (Type u) n
|
||
|
||
def asCurried {n m : Nat} (F : GenTypeFun n m) : CurriedTypeFun (m + n)
|
||
:= match n, m with
|
||
| 0, _ => by sorry
|
||
| _, 0 => by sorry
|
||
| n+1, _ => fun τ => asCurried (F τ)
|