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