精益抱怨它看不到一个陈述是可判定的

Lean complains it can't see that a statement is decidable

我正在尝试定义以下数量部分:

variable pi : nat -> Prop
variable (Hdecp : ∀ p, decidable (pi p))

definition partn (n : nat) : nat := ∏ p ∈ (prime_factors n), (if pi p then p^(mult p n) else 1)

但出现错误

error: failed to synthesize placeholder
pi : ℕ → Prop,
n p : ℕ
⊢ decidable (pi p)

我怎样才能帮助 Lean 认识到 (pi p) 确实是可判定的,这要归功于 Hdecp?

我找到了解决方案:

definition partn (n : nat) : nat := ∏ p ∈ (prime_factors n), (@ite (pi p) (Hdecp p) nat (p^(mult p n)) 1)

这允许我在我的 if-the-else 中明确使用 Hdecp

edit: 精化者实际上可以完全自行推断实例,只要它在定义的上下文中可用:

variable (Hdecp : ∀ p, decidable (pi p))

include Hdecp
definition partn (n : nat) : nat := ∏ p ∈ (prime_factors n), (if pi p then p^(mult p n) else 1)

原始答案(如果实例有更复杂的假设,仍然有用):

如果想避免显式调用ite,可以在本地引入decidable实例:

definition partn (n : nat) : nat := ∏ p ∈ (prime_factors n),
have decidable (pi p), from Hdecp p,
if pi p then p^(mult p n) else 1