Isabelle 用于区域设置解释的案例名称
我的一些本地人有很多假设,非常类似于数据类型归纳法(这就是假设的来源)。在解释这样一个区域设置时,命名案例将非常方便。如何实现以下功能Isabelle 用于区域设置解释的案例名称,isabelle,isar,Isabelle,Isar,我的一些本地人有很多假设,非常类似于数据类型归纳法(这就是假设的来源)。在解释这样一个区域设置时,命名案例将非常方便。如何实现以下功能 locale Foo = fixes P assumes 0: "P 0" assumes Suc: "P n ⟹ P (Suc n)" interpretation Foo "λ _ . True" proof(default) case 0 show ?case.. next case (Suc n) show ?case .. qe
locale Foo =
fixes P
assumes 0: "P 0"
assumes Suc: "P n ⟹ P (Suc n)"
interpretation Foo "λ _ . True"
proof(default)
case 0 show ?case..
next
case (Suc n) show ?case ..
qed
据我所知,方法
induct
和case
负责设置命名案例。因此,我不认为default
会按照您的要求执行
你可以引入一个新规则,比如
lemma foo_rule [case_names 0 Suc]:
assumes "P 0"
and "⋀n. P n ⟹ P (Suc n)"
shows "foo P"
using assms by (simp add: foo_def)
或者
lemmas foo_rule [case_names 0 Suc] =
conjI [THEN foo_def [THEN meta_eq_to_obj_eq, THEN iffD2], rule_format]
如果你这么想的话。然后使用
interpretation foo "λ_. True"
proof (induct rule: foo_rule)
我无意中发现声明foo\u规则[case\u names 0 Suc,inclut type]
允许您忽略规则名称,即
interpretation foo "λ_. True"
proof (induct)
但是我可以想象,这将打破现有的默认导入规则。方法
默认
在内部调用方法规则
,展开区域设置
和介绍类
。这些都不支持case
名称(对于unfold\u locales
,这已在上讨论过)。因此,无法让案例名称
系统使用默认值
。该线程提到了两个要点:
unfow_locales
基本上只应用规则Foo.intro
,其中Foo
是区域设置的名称。如果您有一个复杂的区域设置层次结构,它会检查哪些解释已经可用,并相应地组合.intro
规则cases
是获取案例名称的规范方法case\u name
属性手动获取案例名称:
interpretation Foo "λ _ . True"
proof(cases rule: Foo.intro[case_names 0 Suc])
当然,如果您多次需要,也可以使用案例名称标记定理:
lemmas Foo_intro[case_names 0 Suc] = Foo.intro
unfow_locales
中的案例名称支持的问题是,实现没有跟踪哪个子目标来自哪个locale继承。如果您有一些空闲时间,请随意实施对案例名称的支持。谢谢,特别是您指出了Foo.intro
。我觉得情况就是这样,但我找不到它,因为当我发布find_定理Foo
时,这个定理没有出现。我也遇到了同样的问题,因此在下面的回答中使用了笨拙的辅助引理。