伊莎贝尔:如果声明里面的一笔款项

时间:2013-11-29 08:39:51

标签: isabelle

我在一个总和中有一个if语句的问题。

我在if statements in isabelle的另一个问题中检查了解决方案 但它没有帮助。

以下是一个例子:

theorem dummy:
  fixes a :: "('a::comm_ring_1 poly)" 
    and B :: "(('a::comm_ring_1 poly)^'n∷finite^'n∷finite)"
  shows "1=1"
proof-
  { fix i j
   have "(∑k∈UNIV. if i = k then (B $ i $ j) else 0) = B $ i $ j" sorry
  }

如何证明“对不起”的引理?

1 个答案:

答案 0 :(得分:2)

您正在寻找的定理是setsum_delta

finite ?S ⟹
(∑k∈?S. if k = ?a then ?b k else 0) =
    (if ?a ∈ ?S then ?b ?a else 0)

如果你在总和中写k = i而不是i = k,它甚至可以自动解决:

have "(∑k∈UNIV. if k = i then (B $ i $ j) else 0) = B $ i $ j" 
    by (simp add: setsum_delta)

find_theorems命令对此非常有用。如果您输入

find_theorems "∑_∈_. if _ then _ else _"

你得到setsum_delta作为其中一个匹配项 - 这就是我找到它的方式。