有没有办法将规则应用于伊莎贝尔的特定假设?

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 满足三个条件

  1. Γ b ≠ Γ' b
  2. b∉设置(llocked C2)
  3. (Γ b, Γ' b) ∈ RGUnion R G1 b ∧ 不相交 (dom h2) (dom (Γ' b))

如果你先证明这些事实,你会得到一个更好看的证明。如果它们可用,那么您可能会发现自动化会自动证明您想要的目标。