Coq 的 'fix' 关键字在精益中创建固定点的等效项是什么

What is the equivalent of Coq's 'fix' keyword to create fixpoints in Lean

我正在尝试将 Coq 术语直译为精益术语,但意识到我不知道如何翻译 Coq 原语 fix,如:

Definition Fac : nat -> nat :=
    fix f (n:nat) : nat :=
        match n with
        | 0     => 1
        | S p   => S p * f p
        end.

我不是在问如何定义归纳类型的递归函数,这在精益文档中有很好的解释,而是如何定义 'recursive lets',即主体调用自身的 lambda 抽象。我假设精益中存在等效的原语。

谢谢。

有关于此的讨论here。据我所知,没有很好的表示法。

最接近的方法是直接使用 nat 的递归,或者直接使用 well_founded.fix

例如

def fact (n : ℕ) : ℕ :=
let f : ℕ → ℕ := λ n, nat.rec_on n 1 (λ n fact, (n + 1) * fact) in
f n

def fact' (n : ℕ) : ℕ :=
let f : ℕ → ℕ := λ n, well_founded.fix nat.lt_wf 
  (λ n fact, show ℕ, from nat.cases_on n (λ _, 1)
    (λ n fact, (n + 1) * fact n n.lt_succ_self) fact) 
  n in
f n