我想定义一个按案例证明的规则,与proof (cases rule: <rule-name>)
. 我设法使用case_names
和consumes
参数,但我没有设法绑定示意图变量?case
,因此,在使用我的规则进行证明的情况下,可以编写show ?case ...
. 我该如何绑定它?
具体来说:我有一个受 Mizar 启发的琐碎集的概念,即空集或单例集。我想通过空与单例分析来证明平凡集的属性。到目前为止,我有:
definition trivial where "trivial x = (x ⊆ {the_elem x})"
lemma trivial_cases [case_names empty singleton, consumes 1]:
assumes "trivial X"
assumes empty: "P {}"
and singleton: "⋀ x . X = {x} ⟹ P {x}"
shows "P X"
using assms unfolding trivial_def by (metis subset_singletonD)
我可以按如下方式使用它:
notepad
begin
fix Q
fix X::"'a set"
have "trivial X" sorry
then have "Q X"
proof (cases rule: trivial_cases)
case empty
show "Q {}" sorry
next
case (singleton x)
show "Q {x}" sorry
qed
end
但我不能使用show ?case
. 如果我尝试,它会给我错误消息“未绑定的示意图变量:?case”。 print_cases
在证明里面输出以下内容:
cases:
empty:
let "?case" = "?P {}"
singleton:
fix x_
let "?case" = "?P {x_}"
assume "X = {x_}"
这表明它不起作用,因为?P
不受trivial
.
顺便说一句:我使用它的完整上下文可以在https://github.com/formare/auctions/blob/master/isabelle/Auction/SetUtils.thy看到。