理论水平获得命令

时间:2016-02-16 14:55:33

标签: isabelle

在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命令一样好的东西?

0 个答案:

没有答案