Logic 使用嵌套的∃简化表达式;和平等

Logic 使用嵌套的∃简化表达式;和平等,logic,isabelle,simplification,Logic,Isabelle,Simplification,在我把这个引理扔进Isabelle的简化器集合之前,我遇到了一个无法轻松实现自动化的证明: lemma ex_ex_eq_hint: "(∃x. (∃xs ys. x = f xs ys ∧ P xs ys) ∧ Q x) ⟷ (∃xs ys. Q (f xs ys) ∧ P xs ys)" by auto 现在我想知道:有没有一个很好的理由说明简化者或经典推理者不能在一般情况下自动地执行这种简化?这个引理是否有一种更一般的形式可以添加到默认的simpset中以实现这一点?在Is

在我把这个引理扔进Isabelle的简化器集合之前,我遇到了一个无法轻松实现自动化的证明:

lemma ex_ex_eq_hint:
  "(∃x. (∃xs ys. x = f xs ys ∧ P xs ys) ∧ Q x) ⟷
   (∃xs ys. Q (f xs ys) ∧ P xs ys)"
  by auto

现在我想知道:有没有一个很好的理由说明简化者或经典推理者不能在一般情况下自动地执行这种简化?这个引理是否有一种更一般的形式可以添加到默认的simpset中以实现这一点?

在Isabelle 2015中,简化者知道一些规则来消除由等式决定的存在约束变量。对于您的情况,相关的是
simp\u thms(36-40)

  • (∃x、 ?P)⟷ ?P
  • ∃十,。x=?t
  • ∃x、 ??t=x
  • (∃x、 x=?t∧ ?P x)⟷ ?P?t
  • (∃x、 ?t=x∧ ?P x)⟷ ?P?t
此外,
ex\u simps(1-2)
如果一方没有提到绑定变量,则将存在式推到共轭中:

  • (∃x、 ?Px∧ ?Q)⟷ (∃x、 ?P x)∧ ?Q
  • (∃x、 ?P∧ ?Q x)⟷ ?P∧ (∃x、 ?Q x)
在许多情况下,这些规则足以消除存在量词。然而,在您的例子中,
xs
ys
之间还有更多的存在量词。原则上,上述规则和
ex_comm
,即
(∃x y.?P x y)⟷ (∃y x.?P x y)
(以及
op&
的关联性,但这是默认的simp规则),足以通过重写来证明引理。然而,我们必须把存在句从连词中抽出来,然后排列量词,使
x
被限制在最里面。在一般情况下,这些步骤都是不可取的。此外,交换性受制于伊莎贝尔的术语顺序,因此简化者甚至可能不会以非故意的方式应用它

因此,这个问题通常不能通过一组有限的重写规则来解决,因为可能存在任意多个量词嵌套。然而,它可以通过simproc来解决,simproc触发存在量词,并搜索量化谓词项以获得绑定变量的相等性。如果等式出现在可以消除存在性的位置,那么它必须当场生成适当的重写规则(转换可能会有用)

然而,simproc应该确保它不会过多地干扰目标的结构。在您的示例中已经可以看到一些这样的干扰。在左侧,谓词Q不在内部量词的范围内,但它在右侧

这意味着不清楚这种转变是否在所有情况下都是可取的。例如,在左侧,
auto
fastforce
等使用的经典推理器可以在一个存在量词下,然后通过分析
Q
,使用经典推理找到
x
的实例。这可能会进一步简化等式
x=f xs ys
,从而导致进一步的实例化。相反,在右边,推理者在开始研究
Q
之前,首先必须为存在量词引入两个图式变量


总之,我建议您分析一下您的设置,看看为什么在目标状态下会出现这种形式的量词嵌套。也许您可以调整它,使所有内容都符合现有的规则集。

感谢您提供另一个高质量和全面的答案!是否有一个与simpproc相当的程序,它不使用简化程序(不应干扰结构),而是使用经典推理程序?这似乎是“关于如何实例化一个术语的进一步启发”的自然场所。您可以使用“包装器”修改经典推理器的搜索(但不是
blast
)。见《Isabelle/Isar参考手册》第9.4.7节。但我不相信经典推理机是实现这一点的最佳场所。如果这些存在量词出现在结论或假设中,那么一切都很好。但是,如果您将它们作为其他函数的参数,那么经典推理机甚至可能不会单独查看该参数(例如,如果没有适当的规则告诉它这样做)。