E4195

E4195#

编译器诊断名称:invalid_where_clause_field

where 子句只接受当前上下文中有意义的字段。对于函数契约,请使用 proof_requireproof_ensureproof_decreaseproof_axiomatizedproof_reasoning 等字段。对于循环契约,请使用 proof_invariantproof_yieldproof_reasoning 等字段。

关于这些字段背后的证明概念,请参阅形式化验证,尤其是 .mbt 中的契约循环不变式

错误示例#

///|
fn keep(x : Int) -> Int where { proof_note: x >= 0 } {
  x
}

///|
test {
  ignore(keep)
}

建议#

将未知字段替换为支持的 where 子句字段。

///|
fn keep(
  x : Int,
) -> Int where {
  proof_require: x >= 0,
  proof_ensure: result => result == x,
  proof_reasoning: "The function returns its argument unchanged.",
} {
  x
}

///|
test {
  inspect(keep(1), content="1")
}