用Isabelle的缩写缩写命题

时间:2019-04-02 20:56:39

标签: isabelle

想象一下以下定理:

 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

但是在定理语句中不起作用。想法?

1 个答案:

答案 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子句最有用。