想象一下以下定理:
assumes d: "distinct (map fst zs_ws)"
assumes e: "(p :: complex poly) = lagrange_interpolation_poly zs_ws"
shows "degree p ≤ (length zs_ws)-1 ∧
(∀ x y. (x,y) ∈ set zs_ws ⟶ poly p x = y)"
我想消除第二个假设,而不必在每次出现时都替换p的值。我用let命令来做这件事:
let ?p = lagrange_interpolation_poly zs_ws
但是在定理语句中不起作用。想法?
答案 0 :(得分:1)
您可以像这样在引理语句中进行局部定义:
lemma l:
fixes zs_ws
defines "p == lagrange_interpolation_poly zs_ws"
assumes d: "distinct (map fst zs_ws)"
shows "degree p ≤ (length zs_ws)-1 ∧ (∀(x,y) ∈ set zs_ws. poly p x = y)"
证明完成后,定义就会展开。因此,稍后查看thm l
时,所有出现的p
都已被右侧代替。在证明中,p_def
指的是p
的定义方程式(您称为e
)。当您想控制Isabelle的校对工具仅看到defines
以及看到扩展的右侧时,p
子句最有用。