Logic coq非指示逻辑中的存在量词(系统F)

Logic coq非指示逻辑中的存在量词(系统F),logic,coq,impredicativetypes,Logic,Coq,Impredicativetypes,我试着用lambda演算和typeála系统F编码成Coq逻辑连接词。下面是我写的一堆代码(我想是标准的东西) 基本上,我写下了合取、析取、真与假的消去法则和引入法则。我不确定这件事做得是否正确,但我认为事情应该是这样的。现在我想定义存在量化,但我不知道如何继续。有人有什么建议吗?存在量化只是一种连词的泛化,连词对中第二个成分的类型取决于第一个成分的值。当没有依赖关系时,它们是等价的: Goal forall P1 P2 : Prop, (exists _ : P1, P2) <->

我试着用lambda演算和typeála系统F编码成Coq逻辑连接词。下面是我写的一堆代码(我想是标准的东西)


基本上,我写下了合取、析取、真与假的消去法则和引入法则。我不确定这件事做得是否正确,但我认为事情应该是这样的。现在我想定义存在量化,但我不知道如何继续。有人有什么建议吗?

存在量化只是一种连词的泛化,连词对中第二个成分的类型取决于第一个成分的值。当没有依赖关系时,它们是等价的:

Goal forall P1 P2 : Prop, (exists _ : P1, P2) <-> P1 /\ P2.
Proof. split. intros [H1 H2]. eauto. intros [H1 H2]. eauto. Qed.
非指示性定义的问题(除非我弄错了)是不存在依赖消除。有可能证明

forall (A : Type) (P : A -> Prop) (Q : Prop),
  (forall x : A, P x -> Q) -> (exists x, P x) -> Q,
但不是

 forall (A : Type) (P : A -> Prop) (Q : (exists x, P x) -> Prop),
   (forall (x : A) (H : P x), Q (ex_intro P x H)) ->
   forall H : exists x, P x, Q H

一个小评论:错误,和,或已经是Coq条款。你可能想使用other来轻松区分你的结构和Coq的结构。你还没有证明析取和连接定义的引入和消除原则。你已经证明了Coq的定义。您需要将您的符号置于
类型范围内
以覆盖Coq。
forall (A : Type) (P : A -> Prop) (Q : Prop),
  (forall x : A, P x -> Q) -> (exists x, P x) -> Q,
 forall (A : Type) (P : A -> Prop) (Q : (exists x, P x) -> Prop),
   (forall (x : A) (H : P x), Q (ex_intro P x H)) ->
   forall H : exists x, P x, Q H