精益抱怨它看不到一个陈述是可判定的
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
我正在尝试定义以下数量部分:
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