有没有办法将规则应用于伊莎贝尔的特定假设?
Is there a way to apply the rule to a specific assumption in Isabelle?
这是我的目标
...
∀a b. P1 a b ⟹
∀a b. P2 a b ⟹
...
⟹ some goal
我想将引理应用于第二个假设
lemma K: ⟦ ∀a b. P a b⟧ ⟹ ∀b. P a b"
通过使用
apply (drule_tac a = "x" in K)
但是Isabelle总是先将策略应用于第一个假设,我怎么可以只将策略应用于第二个假设?
其实我的目标是
...
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C1) ∧ (Γ b, Γ' b) ∈ RGUnion R G2 b ∧ disjoint (dom h1) (dom (Γ' b)) ⟶
rgsep_safe n C1 s h1 Γ' (RGUnion R G2) G1 Q1 ⟹
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C2) ∧ (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ disjoint (dom h2) (dom (Γ' b)) ⟶
rgsep_safe n C2 s h2 Γ' (RGUnion R G1) G2 Q2 ⟹
rgsep_safe n C2 s h2 Γ' (RGUnion R G1) G2 Q2
我想在第二个假设中使用引理
theorem K1: ∀b. ?P b ⟶ ?Q ⟹ ∀b. ?P b ⟹ ?Q
使目标成为
...
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C1) ∧ (Γ b, Γ' b) ∈ RGUnion R G2 b ∧ disjoint (dom h1) (dom (Γ' b)) ⟶
rgsep_safe n C1 s h1 Γ' (RGUnion R G2) G1 Q1 ⟹
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C2) ∧ (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ disjoint (dom h2) (dom (Γ' b))
有很多丑陋的黑客可以让你绕过第一个假设(例如通过删除它或重新排序)。 drule_tac 已经在朝着那个方向前进。到目前为止,如果对您的问题可行,最好使用结构化证明。然后很容易命名您的假设并使用 OF 属性将它们连接到“K”。
您的定理 K1
毫无用处:由于量词的作用域,它没有按照您的想法行事。我尝试使用您的目标的更简单版本进行实验,并通过输入
取得了相当大的进步
申请(简单翻转:imp_conjL)
这个公认晦涩的步骤将您的含义转换为连词;简化器注意到量化变量没有出现在 right-hand 侧,所以你现在需要做的就是展示一个 b
满足三个条件
- Γ b ≠ Γ' b
- b∉设置(llocked C2)
- (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ 不相交 (dom h2) (dom (Γ' b))
如果你先证明这些事实,你会得到一个更好看的证明。如果它们可用,那么您可能会发现自动化会自动证明您想要的目标。
这是我的目标
...
∀a b. P1 a b ⟹
∀a b. P2 a b ⟹
...
⟹ some goal
我想将引理应用于第二个假设
lemma K: ⟦ ∀a b. P a b⟧ ⟹ ∀b. P a b"
通过使用
apply (drule_tac a = "x" in K)
但是Isabelle总是先将策略应用于第一个假设,我怎么可以只将策略应用于第二个假设?
其实我的目标是
...
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C1) ∧ (Γ b, Γ' b) ∈ RGUnion R G2 b ∧ disjoint (dom h1) (dom (Γ' b)) ⟶
rgsep_safe n C1 s h1 Γ' (RGUnion R G2) G1 Q1 ⟹
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C2) ∧ (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ disjoint (dom h2) (dom (Γ' b)) ⟶
rgsep_safe n C2 s h2 Γ' (RGUnion R G1) G2 Q2 ⟹
rgsep_safe n C2 s h2 Γ' (RGUnion R G1) G2 Q2
我想在第二个假设中使用引理
theorem K1: ∀b. ?P b ⟶ ?Q ⟹ ∀b. ?P b ⟹ ?Q
使目标成为
...
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C1) ∧ (Γ b, Γ' b) ∈ RGUnion R G2 b ∧ disjoint (dom h1) (dom (Γ' b)) ⟶
rgsep_safe n C1 s h1 Γ' (RGUnion R G2) G1 Q1 ⟹
∀b. Γ b ≠ Γ' b ⟶
b ∉ set (llocked C2) ∧ (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ disjoint (dom h2) (dom (Γ' b))
有很多丑陋的黑客可以让你绕过第一个假设(例如通过删除它或重新排序)。 drule_tac 已经在朝着那个方向前进。到目前为止,如果对您的问题可行,最好使用结构化证明。然后很容易命名您的假设并使用 OF 属性将它们连接到“K”。
您的定理 K1
毫无用处:由于量词的作用域,它没有按照您的想法行事。我尝试使用您的目标的更简单版本进行实验,并通过输入
申请(简单翻转:imp_conjL)
这个公认晦涩的步骤将您的含义转换为连词;简化器注意到量化变量没有出现在 right-hand 侧,所以你现在需要做的就是展示一个 b
满足三个条件
- Γ b ≠ Γ' b
- b∉设置(llocked C2)
- (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ 不相交 (dom h2) (dom (Γ' b))
如果你先证明这些事实,你会得到一个更好看的证明。如果它们可用,那么您可能会发现自动化会自动证明您想要的目标。