以下简单函数被接受为终止函数似乎是不正确的:
val fnc : (nw: nat) -> (ni: nat) -> (ni_max: nat) -> bool
let rec fnc nw ni ni_max =
match ni with
| ni_max -> false
| _ -> fnc nw (nw + ni) ni_max
令人惊讶的是,该函数确实在评估它时终止,例如,通过fnc 0 0 1
和返回false
。我错过了什么?
以下简单函数被接受为终止函数似乎是不正确的:
val fnc : (nw: nat) -> (ni: nat) -> (ni_max: nat) -> bool
let rec fnc nw ni ni_max =
match ni with
| ni_max -> false
| _ -> fnc nw (nw + ni) ni_max
令人惊讶的是,该函数确实在评估它时终止,例如,通过fnc 0 0 1
和返回false
。我错过了什么?