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