You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Coq证明中如何用单行语句处理含exists的公理调用?

Coq中带存在量词的谓词如何直接构造证明项?

我在Coq里的理论最初有这么一条公理:

Axiom context_existence : forall s t a,
  F a s -> Ps t a -> exists u, C u s t.

当时用的时候直接一行就能搞定:

pose proof (context_existence s t a Fas Psta) as (u & Cust).

后来因为a没出现在公理结论里,我把公理重构了:

Axiom context_existence : forall s t,
  (exists a, F a s /\ Ps t a) -> exists u, C u s t.

又因为exists a, F a s /\ Ps t a这个式子在我的理论里有特定含义,我定义了一个谓词Cb:

Definition Cb s t := exists a, F a t /\ Ps s a.

最后公理改成了这样:

Axiom context_existence : forall s t,
  Cb t s -> exists u, C u s t.

但现在用起来就不直观了,得拆成两步:

pose proof (context_existence s t) as (u & Cust).
exists a; split; auto.

我知道合取可以用conj直接构造证据,比如这种写法:

pose proof (context_existence s t (conj Fas Psta)) as (u & Cust).

但现在涉及到存在量词,不知道有没有类似的构造函数能让我用单行语句完成证明?


有的,Coq里对应存在量词的构造函数是ex_intro,它的作用就是把具体的实例a,加上该实例满足谓词的证据,打包成exists a, ...形式的命题证据。结合conj一起用,就能写出单行的证明语句:

pose proof (context_existence s t (ex_intro _ _ a (conj Fas Psta))) as (u & Cust).

如果Coq能自动推断Cb t s对应的存在量词的类型参数,还可以简化成:

pose proof (context_existence s t (ex_intro _ a (conj Fas Psta))) as (u & Cust).

这样就不用拆分步骤,直接构造出Cb t s的证据传给公理,一步拿到u和对应的C u s t证据了。

内容的提问来源于stack exchange,提问作者Lepticed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:44:59