Theorem proving 有限有界量词的消去规则
我有以下目标:Theorem proving 有限有界量词的消去规则,theorem-proving,quantifiers,isabelle,Theorem Proving,Quantifiers,Isabelle,我有以下目标: ∀x ∈ {0,1,2,3,4,5}. P x 我想把这个目标分成六个子目标p0,p1,p2,p3,p4和p5。这可以通过apply auto轻松完成。但是auto用于执行此操作的相关规则是什么?我这样问是因为我的实际目标更像这样: ∀x ∈ {0..<6}. P x 相反)。自动使用的规则是ballI(所有简介都有限制)。这将转换∀x∈ S.P x转换为x∈ S==>px 转换x的问题∈ {0,1,2,3,4,5}分为6个单独的子目标是一个单独的子目标。基本上,aut
∀x ∈ {0,1,2,3,4,5}. P x
我想把这个目标分成六个子目标p0
,p1
,p2
,p3
,p4
和p5
。这可以通过apply auto
轻松完成。但是auto
用于执行此操作的相关规则是什么?我这样问是因为我的实际目标更像这样:
∀x ∈ {0..<6}. P x
相反)。自动
使用的规则是ballI
(所有简介都有限制)。这将转换∀x∈ S.P x
转换为x∈ S==>px
转换x的问题∈ {0,1,2,3,4,5}
分为6个单独的子目标是一个单独的子目标。基本上,auto
将显式枚举转换为析取,然后将其拆分。使用[simp]
引理将集合转换为更方便的集合版本非常方便。例如,{0..你可以使用一个引理,比如下面的引理来划分一个目标:
lemma expand_ballI: "⟦ (n :: nat) > 0; ∀x ∈ {0..< (n - 1)}. P x; P (n - 1) ⟧ ⟹ ∀x ∈ {0..< n}. P x"
by (induct n, auto simp: less_Suc_eq)
lemma expand_ballI: "⟦ (n :: nat) > 0; ∀x ∈ {0..< (n - 1)}. P x; P (n - 1) ⟧ ⟹ ∀x ∈ {0..< n}. P x"
by (induct n, auto simp: less_Suc_eq)
lemma "∀x ∈ {0..< 6 :: nat}. P x"
apply (rule expand_ballI, fastforce)+
apply simp_all
goal (6 subgoals):
1. P 0
2. P (Suc 0)
3. P 2
4. P 3
5. P 4
6. P 5