在Isabelle的本地校对块中,我可以使用非常方便的obtain
命令,它允许我定义具有给定属性的常量:
proof ... from `∃x. P x ∧ Q x` obtain x where "P x" and "Q x" by blast ...
在理论或语言环境层面上最方便的方法是什么?
我可以使用SOME
手动完成,但似乎没有必要复杂:
lemma ex: "∃x. P x ∧ Q x" sorry definition x where "x = (SOME x. P x ∧ Q x)" lemma P_x: "P x" and Q_x: "Q x" unfolding atomize_conj x_def by (rule someI_ex, rule ex)
另一种更直接的方式似乎是specification
:
consts x :: nat specification (x) P_x: "P x" Q_x: "Q x" by (rule ex)
但它需要稍低级别的consts
命令,更糟糕的是,它在本地环境中不起作用。
是否有可能在理论层面上拥有与obtain
命令一样好的东西?