我正在尝试使用传输包为自定义数据类型建立归纳规则,但apply transfer
对我不起作用。这是一个简单的例子:
theory TransferHO imports Main begin
typedef pos = "{x :: nat. x > 0}" by blast
setup_lifting type_definition_pos
lift_definition one :: pos is 1 by auto
lift_definition S :: "pos ⇒ pos" is Suc by auto
lemma
assumes "P one"
assumes "⋀ x. P x ⟹ P (S x)"
shows "P n"
using assms
apply transfer
这个时候目标还是
⋀P x. P one ⟹ (⋀x. P x ⟹ P (S x)) ⟹ P x
并不是
⋀P x. P 1 ⟹ (⋀x. x > 0 ⟹ P x ⟹ P (Suc x)) ⟹ x > 0 ⟹ P x
我会期待的。在证明它之前我需要做什么来转移引理?
另外,一般来说,如何才能更好地控制apply transfer
,或者至少是更好的调试方式?