Coq中的辩证法解释
- 2011年1月3日
- 安德烈·鲍尔
-
建构主义数学,逻辑
我想我已经上瘾了Coq公司或者更广泛地说,是用计算机做数学,包括证明。我上周完成了哥德尔逻辑函数解释的形式化,也称为辩证逻辑解释。现在似乎还没有一个可用的,这是一个发表博客文章的好机会。
我想,我们离数学研究的标准不远了,即总是发表论文和计算机验证的证据。在理论计算机科学的某些领域,例如编程语言理论,这样的未来正迅速成为现实。主流数学仍然不存在,但一旦工具足够好,计算机辅助定理证明的传播速度将与一段时间前的TeX差不多。让这成为我的新年预测吧!与此同时,爱好者们应该探索现有产品所提供的可能性。
我一直喜欢上面的工作验证性开采,但我永远记不清哥德尔的辩证法解释的细节,它是证据挖掘的基础。在Coq中做这些是学习辩证法解释的好方法,我甚至有了一些新的想法(但这是另一天的话题)。
如果你不熟悉Dialectica解释,我建议你杰里米·阿维加德的和所罗门·费费曼的第章"哥德尔的功能(“辩证法”)解释"S.Buss编辑。,《证明理论手册》,北荷兰,第337-405页,1999年。
由于这不是一个教程,我只想说,主要思想是将每个公式$\phi$转换为形式为$\exists x的经典等价公式$\fi^D$。\对所有人来说。\phi_D(x,u)$与$\phi_D$无量词。令人惊讶的是,$\phi^D$有时是有效的,即使$\phi$不是,所以这是一种“构造”经典数学的系统方法。要查看可以用它做什么,请查看乌尔里希·科伦巴赫的书.
写这篇帖子迫使我思考如何呈现一段计算机辅助的数学。我应该只发布Coq文件并使用它,还是应该内联Coq代码?我认为两者都做比较好。
下载: 辩证法。v(v)
以下内容与上述文件基本相同。
基本定义
我们介绍了哥德尔对逻辑的“辩证法”功能性解释,略为概括并改编为考克。
需要在自然数上实现可判定的平等,否则我们就不能阿里斯
.
下面一行是针对Coq8.3的,但Coq8.2似乎没有受到影响,所以幸运的是,该文件与这两个版本都兼容。
我们将允许对任意居住类型进行普遍和存在的量化。通常的解释允许对自然数进行量化(也可能是对自然数的泛函),自然数当然是有人居住的。
记录有人居住:=居住{ty:>Set;成员:ty}。
有人居住的自然数量:
感应式公共关系计划
是对象语言抽象语法的一种“深度嵌入”,我们将把它解释为Coq。我们只接受可判定的原始谓词,这在基本辩证法变体中很常见。(注:此帖子的原始版本声称我们使用了高阶抽象语法(HOAS)。感谢鲍勃·哈珀指出事实上我们没有。)
感应prp:类型:=|基本体:bool→prp|连接词:prp→prp→prp|析取:prp→prp→prp|含义:prp→prp→prp|否定:prp→prp|通用:所有(ty:有人居住),(ty→prp)→prp|存在:对于所有人(ty:有人居住),(ty→prp)→prp。
我们的语法表示允许我们表达“奇异”命题函数p:ty→prp
其中的逻辑结构第x页
可能取决于x个
。由于这种现象,我们稍后将被迫引入某些在通常的辩证法解释中没有的类型依赖。
对象语言的方便符号。
符号“'['p']'”:=(原语p)(在80级,无关联性)。符号“'neg'x”:=(否定x)(70级,无关联性)。符号“x”和“y”:=(连词x y)(在74级,左结合)。符号“x”或“y”:=(析取x y)(在76级,左结合)。符号“x==>y”:=(隐含x y)(78级,右结合)。符号“'all'x:t,p”:=(@universal t(fun x=>p))(80级,99级x)。符号“'some'x:t,p”:=(@existative t(fun x=>p))(80级,99级x)。
每个提议对
我们将类型关联起来瓦普
和成本加成
分别是“证人”和“反方”。将其视为玩家之间游戏中的动作W公司
和一个对手C类
.我们对标准的Dialectica表示法做了两个更改:
- 首先,我们对连词的计数器使用sum,这里通常使用乘积。这给了我们合取和析取之间的对称性,简化了臭名昭著的合取收缩
和(_contr)
但使含意和连词之间的附加关系复杂化。Thomas Streicher指出,这种改变是无关紧要的,因为我们可以证明一个单独的引理,它允许我们从计数器p和q
作为对计数器作为和的元素(这样的引理依赖于迪亚
关系定义如下)。
- 其次,因为命题函数的结构可以依赖于它的参数,所以我们不得不在
瓦普
和成本加成
什么时候对
是一个量化的陈述。这并不令人惊讶,但更令人惊讶的是,存在主义的计数器,C(存在性p')
,不仅依赖于第y天
但也在W(p'x)
。规则中需要依赖项存在_埃利姆
辩证法解释的其余部分不受这一变化的影响,但前提的独立性除外,在这一点上,我们必须施加一个通常解释中不需要的条件。这些类型依赖性清楚地指向一个更依赖于类型的Dialectica变体。实际上,我们将在一个单独的文件中对其进行调查。目前,我们只是试图忠实地代表辩证法的解释。
固定点W(p:prp):=(将p与匹配|基本p=>单位|结合p1 p2=>(W p1)*(W p2)|分离p1 p2=>(W p1)+(W p2)|隐含p1 p2=>(W p1→W p2)*(W p1*C p2→C p1)|否定p'=>(Wp'→Cp')|通用ty p'=>(对于所有x:ty,W(p'x))|存在typ'=>{x:ty&W(p'x)}end)%类型C p:设置:=(将p与匹配|基本p=>单位|连词p1 p2=>(C p1)+(C p2)|分离p1 p2=>(C p1)*(C p2)|含义p1 p2=>(W p1)*(C p2)|否定p'=>W p'|通用typ'=>{x:ty&C(p'x)}|存在性ty p'=>(对于所有x:ty,W(p'x)→C(p'x))end)%类型。
关系直径pwc
是辩证法解释中通常写为$p_D(w,c)$的内容,即解释公式的矩阵。
就游戏而言,直径pwc
告诉玩家是否移动w个
战胜对手的动作c(c)
在由命题决定的游戏中对
.
固定点直径(p:prp):W p→C p→Prop:=匹配p return W p→C p→Prop|本原p=>(fun__=>Is_true p)|结合p1 p2=>(有趣a b=>匹配b|inl b1=>直径p1(fst a)b1|inr b2=>直径p2(snd a)b2结束)|分离p1 p2=>(有趣a b=>匹配a|inl x=>直径p1 x(fst b)|inr u=>直径p2 u(snd b)结束)|隐含p1 p2=>(fun a b=>直径p1(fst b)(snd a b)→直径p2(fst a(fst b))(snd-b))|否定p'=>(乐趣a b=>~直径p’b(a b))|通用t p’=>(函数a b=>直径(p'(projT1 b))(a(projT b)))(projT2 b)|存在tp'=>(函数a b=>直径(p'(projT1 a))(projT2 a)结束。
这个迪亚
这种关系是可以判定的。这个事实只用于连词和含意之间的附加词。
可判定定理(p:prp)(a:Wp)(b:Cp):{diapab}+{not(diapab)}。证明。介绍p a b。诱导p。展开直径,Is_true。诱导磷;灰褐色。在a中展开W;a中的simple;在a中折叠W。将a破坏为[a1a2]。在b中展开C;b中的simple;在b中折叠C。将b破坏为[b1|b2];很简单。应用IHp1。应用IHp2。将b破坏为[b1b2]。将a破坏为[a1|a2];[应用IHp1 |应用IHp2]。将a分解为[fg]。将b分解为[xv]。断言(I:=IHp1 x(g(x,v)))。断言(J:=IHp2(f x)v)。展开直径;褶皱直径。陶托。展开直径;褶皱直径。破坏(IHp b(a b))。正确的。简介;矛盾。左;自动。展开直径;褶皱直径。应用H。展开直径;褶皱直径。应用H。问题。
当然,可判定命题对于双重否定是稳定的。
引理dia_not_not_stable(p:prp)(w:Wp)(c:Cp):~~diapwc→diapwc。证明。简介pwcH。destruct(可判定的pwc);陶托。问题。
类型W公司
和C类
总是有人居住,因为我们将量词限制为有人居住的类型。
WC_成员定义(p:prp):W p*C p。诱导磷;展开W;展开C;简单;折叠W;折叠C;分裂;试着点一份。精确(成员类型0)。精确(成员类型0)。定义。定义W_member(p:prp):=fst(WC_member p)。定义C_member(p:prp):=snd(WC_member p)。
谓词有效p
是对对
。上面说有w个
这样的话直径pwc
保留任何c(c)
。就游戏语义而言,这意味着W公司
有一个成功的战略(相当于成功的举措w个
).
定义有效(p:prp):={a:Wp|对于所有b:Cp,diapab}。
推理规则的有效性
现在,我们通过我们的解释验证了一阶逻辑的希尔伯特式公理。我们关注Avigad&Feferman。
定理模因(pq:prp):有效p→有效(p=>q)→有效q。证明。展开有效,W,C;简单;折叠W;折叠C;很简单。简介p q[wp H][[u v]G]。G中的simple。存在(u-wp)。介绍b。适用(G(wp,b));很简单。应用H。问题。定理impl_chain(pqr:prp):有效(p==>q)→有效(q==>r)→有效。证明。展开有效,W,C;简单;折叠W;折叠C;很简单。简介p q r[[a b]H][G]。存在(fun w=>c(a w),fun v=>b(fst v,d(a(fst v),snd v)))。H中的simple。G中的simple。很简单。介绍g I。应用(G(a(fst G),snd G));很简单。应用(H(fst g,d(a(fst g,snd g)));很简单。假设。问题。定理或控制(p:prp):有效(p或p==>p)。证明。介绍p。展开有效,C,W;辛普森;折叠C;折叠W。存在(fun x=>(将x与inl a=>a | inr a=>an end匹配),fun x=>(snd x,snd x));很简单。内含子[u v];很简单。破坏u;自动。问题。
在下面的定理中,我们避免了迪亚
因为我们把连词的计数器定义为和。
定理与控制(p:prp):有效(p==>p与p)。证明。介绍p。展开有效,C,W;简单;折叠C;折叠W。存在(乐趣x=>(x,x),fun y=>匹配snd y|inl c=>c|inr c=>c结束);很简单。简介[u[v1|v2]H;自动。问题。定理或控制(pq:prp):有效(p==>p或q)。证明。介绍pq。展开有效,C,W;简单;折叠C;折叠W。存在(fun x=>@inl x,fun y=>fst(snd y))。自动。问题。定理和_eliml(pq:prp):有效(p和q==>p)。证明。介绍pq。展开有效,C,W;辛普森;折叠C;折叠W。存在(@fst _,fun y=>@inl _(snd y))。陶托。问题。定理or_comm(pq:prp):有效(p或q==>q或p)。证明。介绍pq。展开有效,C,W;简单;折叠C;折叠W。存在(fun x=>匹配x与inl a=>@inr _ _ a | inr b=>@in _ _ b end,fun y=>(snd(snd y),fst(snd y));很简单。简介[u[vw]];很简单。破坏u;自动。问题。定理and_comm(pq:prp):有效(p和q==>q和p)。证明。介绍pq。展开有效,C,W;简单;折叠C;折叠W。存在(fun x=>(snd x,fst x),fun y=>匹配snd y|inr c=>@inr _ c|inr c=>@inl _ _ c结束)。内含子[[a1-a2][b1|b2]];自动。问题。定理or_distr(pqr:prp):有效(p==>q)→有效(r或p==>r或q)。证明。引言p q r。展开有效,C,W;简单;折叠C;折叠W。简介[[a b]H]。H中的simple。存在(fun x=>匹配x与inl t=>@inl _ _ t | inr u=>@inr _ _(a u)end,fun y=>匹配fst y|inl i=>(fst(snd y),b(W_成员p,snd(snd y))|inr j=>(fst(snd y),b(j,snd(snd y))结束)。简介];很简单。破坏c;自动。介绍G。适用(H(w,e));很简单。应用G。问题。
接下来的两个定理验证了合取和蕴涵之间的附加关系。这就是我们需要确定的直径pwc
和居住W公司
和C类
.
定理impl_conj_adjunct1(pqr:prp):有效(p==>(q==>r))→有效(p和q==>r)。证明。简介pqr。展开有效,C,W;简单;折叠C;折叠W。简介[[a b]H]。在H。eexists(fun x=>fst(a(fst x))(snd x),乐趣(y:W p*W q*C r)=>让(wp,wq):=fst y in设cr:=snd y如果dia_decidable q wq(snd(a wp)(wq,cr))然后@inl _(b(wp,(wq,cr)))否则@inr(snd(a wp)(wq,cr)))。很简单。介绍[e]。很简单。destruct(dia_decidetable q d(snd(a c)(d,e)))为[D1|D2]。介绍G。适用(H(c,(d,e));自动。介绍G。矛盾。问题。定理impl_conj_adjunct2(pqr:prp):有效(p和q==>r)→有效(p==>(q==>r))。证明。简介pqr。展开有效,C,W;简单;折叠C;折叠W。简介[[a b]H];H中的simple。存在(fun x=>(fun u=>a(x,u),fun v=>匹配b((x,fst v),snd v)|inl c=>c_成员q|inr d=>d结束),fun y=>匹配b((fst y,fst(snd y)),snd(snd y))|inl c=>c|inr d=>C_成员p结束)。很简单。简介[u[vw]];很简单。内含子F G。应用(H(u,v,w))。析构函数(b(u,v,w));自动。问题。定理false_elim(p:prp):有效([false]=>p)。证明。介绍p。展开有效,C,W;简单;折叠C;折叠W。存在((fun_=>W_member p),(fun=>tt))。介绍[uv]G。矛盾。问题。所有_ intro定理(ty:有人居住)(p:prp)(q:ty→prp):(对于所有x:ty,有效(p==>qx))→有效(p==>所有x:dy,qx)。证明。简介tpq。展开有效,C,W;简单;折叠C;折叠W。介绍H。存在((fun u x=>fst(projT1(H x))u),(乐趣(y:(Wp*{x:t&C(qx)}))=>snd(projT1(H(projT1(snd y)))(fst y,projT2(snd y)))。简介[u[xv]]。很简单。介绍G。应用(项目T2(H x)(u,v))。自动。问题。所有极限定理(ty:有人居住)(a:ty)(p:ty→prp):有效((所有x:ty,px)==>pa)。证明。介绍t a p。展开有效,C,W;简单;折叠C;折叠W。存在((fun f=>f a),(fun y=>existT _ a(snd y));自动。问题。定理exists_intro(ty:有人居住)(a:ty)(p:ty→prp):有效(p a==>一些x:ty,p x)。证明。介绍t a p。展开有效,C,W;简单;折叠C;折叠W。存在((fun x=>existT _ a x),(fun y=>snd y a(fst y));自动。问题。
这就是我们在存在语句中需要计数器依赖性的规则。
定理exists_elim(ty:有人居住)(p:ty→prp)(q:prp):(对于所有x:ty,有效(px==>q))→有效((某些x:ty、px)==>q)。证明。简介tpq。展开有效,C,W;简单;折叠C;折叠W。介绍H。存在((fun(u:{x:t&W(px)})=>fst(projT1(H(projT1u)))(projT2u)),(fun v x w=>snd(projT1(H x))(w,snd v))。很简单。简介[[xu]v];很简单。介绍G。应用(项目T2(H x)(u,v))。很简单。应用G。问题。
平等
接下来,我们验证平等规则。为了简单起见,我们只考虑自然数的相等性。在一般情况下,我们可以考虑居住类型上的可判定平等。
定义prpEq(m n:n):=[beq_nat m n]。
辩证法上的平等意味着平等。
定理prpEq_eq(m n:n):有效(prpEq m n)→m=n。证明。展开prpEq,有效;简单;折叠有效。简介m n[_ H]。断言(G:=Htt)。应用beq_nat_true。应用Is_true_eq_true。假设。问题。
当然,平等意味着辩证法上的平等,但请注意证明似乎有多么复杂prp设备_版本
如下所示。
定理eq_prpEq(m n:n):m=n→有效(prpEq m n)。证明。介绍m n E。重写E。存在tt。介绍b。展开直径;简单;褶皱直径。应用Is_true_eq_right。应用(beq_nat_refl n)。问题。
自反性。
定理prpEq_refl(n:n):有效(prpEq n n)。证明。介绍n。应用eq_prpEq。自反性。问题。
莱布尼茨定律作为推理规则。
定理leibniz_rule(p:N→prp)(m N:N):有效(prpEq m n)→有效(p m)→有效(p n)。证明。展开有效,C,W;辛普森;折叠C;折叠W。简介pmn[a H][b G]。断言(E:=Htt)。在E中应用Is_true_eq_true。在E中应用beq_nat_true。重写<-E。存在b。假设。问题。
证明莱布尼茨定律作为一个命题更为复杂,因为在通常的辩证法解释中不存在类型依赖性。
事实上,我们似乎需要UIP(身份证明的唯一性)来证明自然数,幸运的是,由于自然数是可判定的,所以UIP是成立的。下面我们证明了N的UIP。Coq 8.3包含了可判定类型的UIP的更一般证明,请参见逻辑。设备dep_dec
.
定义eqN_compose(k m n:n)(p:k=m)(q:k=n):m=n。证明。介绍kmnpq。诱导p。精确q。定义。引理eqN_compose_transibility(mn:n)(p:m=n):eqN_compose p p=ref_equal n。证明。介绍m n p。病例p;琐碎的。问题。引理eqN_可判定(mn:n):{m=n}+{m<>n}。证明。诱导m;诱导n;自动。析构函数(IHm n)为[E1|E2]。重写E1。左。自反性。正确的。注入。矛盾。问题。定义eqN_nu(m n:n)(p:m=n):(m=n)。证明。介绍m n p。destruct(eqN_decrotable m n)为[EQ|NEQ]。精确EQ。矛盾。定义。定义eqN_mu(m n:n)(p:m=n):=eqN_compose(eqN_nu(ref_equal m))p。引理eqN_mu_nu(n m:n)(p:n=m):eqN_mu(eqN_nu p)=p。证明。简介n m p。案例p。展开eqN_mu。应用eqN_compose_transibility。问题。定理UIP_N:对于所有(mn:N)(pq:m=N),p=q。证明。介绍mn-pq。使用(p:=p)删除eqN_mu_nu。使用(p:=q)删除eqN_mu_nu。展开eqN_nu。destruct(eqN_decrotable m n)为[EQ|NEQ]。自反性。矛盾。问题。定义W_传输(p:N→prp)(mn:N):W(pm)→W(pn)。证明。简介p m n w。destruct(eqN_decrotable m n)为[E1|E2]。重写<-E1。精确w。精确(W_member((pn)))。定义。定义C_transfer(p:N→prp)(m N:N):C(p m)→C(p N)。证明。介绍p m n c。析构函数(eqN_decisible m n)为[E1|E2]。重写<-E1。精确c。精确(C_member((p n)))。定义。
最后,证明了莱布尼茨定律的有效性。如果有人知道捷径,我想知道。
莱布尼茨定理(p:N→prp)(mn:N):有效(prpEq m N==>p m==>pn)。证明。介绍pmn。展开有效,C,W;简单;折叠C;折叠W。存在((fun-tt=>((fun(w:w(pm))=>w_transfer p m n w),(fun y=>C_transfer p n m(snd y))),(乐趣=>tt))。简介[u[wc]]。很简单。介绍E。在E中应用Is_true_eq_true。在E中应用beq_nat_true。破坏E。展开C_transfer、W_transfer。destruct(eqN_decrotable m m)为[E1|E2]。断言(U:=UIP_N E1(ref_equal m))。改写U。很简单。自动。断言(F2:m=m);自动。矛盾。问题。
自然数
接下来,我们验证自然数符合皮亚诺公理。它们很容易,除了归纳法有两部分:原始递归的通常“向前”方向,以及我们搜索反例的“向后”方向,从上界开始,一直到0。
定理nat_zero_not_succ(n:nat):有效(否定(prpEq(Sn)0))。证明。介绍n。展开有效,C,W;简单;折叠C;折叠W。存在(fun tt=>tt);自动。问题。定理suc_injective(m n:nat):有效(prpEq(S m)(S n)==>prpEqm n)。证明。引言mn。展开有效,C,W;简单;折叠C;折叠W。存在(fun=>tt,fun=>tt);自动。问题。
给定命题函数p:nat→prp
,假设百万英镑
无效。然后第0页
无效,或导入步骤之一p k==>p(S k)
失败。归纳法的辩证法解释的“向后”方向是一个搜索函数,用于查找失败的基本情况或失败的归纳步骤。我们将其与主证明分开构造。
定义搜索(p:N→prp)(m:N):W(p 0)→(对于所有k:N,W(p k)→W(p(S k))→(对于所有k:N,W(p k)*C(p(S k))→C(p kC(p m)→C(p0)+{n:n&(W(pn)*C(p(Sn)))%type}。证明。内含子p m z s b c。感应m。左;精确c。姿势(w:=natrect z s m)。destruct(dia_destimable(pm)w(bm(w,c)))为[D1|D2]。正确的。存在m。精确(w,c)。应用IHm。精确(b m(w,c))。定义。
最后我们验证了归纳法的有效性。
定理N_归纳(p:nat→prp)(m:nat):有效(p 0和(所有n:n,p n==>p(S n))==>pm)。证明。下午介绍。展开有效,C,W;简单;折叠C;折叠W。存在(fun x=>nat_rect _(fst x)(fun k=>fst(snd x k))m,fun y=>搜索pm(fst(fst y))(fun k=>fst(snd(fst y)k))(fun k=>snd(snd(fst y)k))(snd y))。很简单。简介[[zh]c];很简单。集合(s:=fun k:nat=>fst(h k))。设置(b:=funk:nat=>snd(hk))。诱导m;自动。展开搜索;简单。设置(w:=nat_rect(fun k:nat=>w(p k))z s m)。析构函数(dia_decidable(p m)w(b m(w,c)))为[D1|D2];很简单。介绍H。应用H。应用D1。介绍。断言(G:=IHm(b m(w,c))。在G中折叠w。埃利姆D2。应用G。应用H。问题。
做过普通归纳法之后,人们会尝试验证W类型的归纳法,但这里没有。
马尔可夫原理与前提的独立性
辩证法解释的特点是两个非教学推理原则,即马尔可夫原理(MP)和经营场所的独立性(IP)。
MP和IP都涉及原始命题函数N→布尔
。关键是他们W公司
和C类
类型是单位。因此,我们将使用任意命题,而不是实际使用原始命题W公司
和C类
类型是单例的。首先,我们做出相关定义。
定义单体(t:有人居住):=所有x,x=成员t。定义trivial_C(p:prp):=单例(栖息(C_member p))。定义trivial_W(p:prp):=单例(居住(W_member p))。当然,原始命题是微不足道的。引理primitive_trival_W(b:bool):trivial_W([b])。证明。简介b w。案例w;自动。问题。引理primitive_trivial_C(b:bol):平凡_C([b])。证明。内含子b。案例c;自动。问题。
除了原始命题之外,是否还有一些琐碎的命题,这取决于我们可用的额外公理。例如,在函数的外延性存在的情况下,琐碎命题的含意和否定都是琐碎的。我们不详细讨论给出琐碎命题的确切条件,而只是演示如何利用函数的可拓性来导出琐碎命题蕴涵的琐碎性。
有更好的方法得到下一个引理吗?
引理pair_equal(XY:集)(pq:X*Y):fst p=fst q→snd p=snd q→p=q。证明。介绍X Y p q G H。诱导磷;感应q。G中的simple;H中的simple。重写G;重写H。自反性。问题。
我们只对函数的外延感兴趣s→t
对于其中t吨
是独生子女。这种扩展性可以用“单例的任何幂都是单例”来表述。
单电源定义:=对于所有t,singleton t→对于所有s:集合,singleon(居住(fun_:s=>成员t))。
我认为无法证明单电源
,有吗?我们可以用它来证明W(p==>q)
是微不足道的,如果成本加成
和W q(重量)
都是微不足道的。
引理含义_平凡_ W(pq:prp):单粒子功率→trivial_C p→triviall_W q→trivialt_W(p==>q)。证明。E TCp TWq简介。展开trivial_W。展开单体。展开W_member,C_member;简单;折叠W_成员;折叠C_member。简介[f g]。应用pair_equal;很简单。重写(E _ TWq _)。重写(E _ TWq _ f)。自反性。重写(E _ TCp _)。重写(E _ TCp _ g)。自反性。问题。
琐碎的C(p==>q)
不需要任何额外的假设。
引理蕴涵_trivial_C(pq:prp):trivial_W p→trivial_C q→triviall_C(p==>q)。证明。介绍p q TWp TCq。展开trivial_C。展开C、W;简单;折叠C;折叠W。简介[wp cq]。重写(TWp wp)。重写(TCq cq)。应用pair_equal;自动。问题。
马尔可夫原理
马尔可夫原理适用于任何有人居住的类型(不仅仅是自然数)和一个平凡的命题W公司
和C类
类型。
定理markov_generalized(t:有人居住)(p:t→prp):(对于所有x,trivial_C(p x))→(对于所有x,trivial_W(p x))→有效(neg(所有x:t,neg(px))===一些x:t,px)。证明。TC TW简介。展开有效,C,W;简单;折叠C;折叠W。姿势(u:=有趣(h:_→{x:t&W(px)})=>设y:=projT1(h(fun x(_:W(px))=>C_member(px存在t(fun x:t=>W(p x))y(W_member(p y)))。存在(u,fun_x_=>C_member(px));很简单。简介[f g]。很简单。集合(v:=projT1(f(fun x _=>C_member(p x)))。集合(w:=项目T2(f(fun(x:t)(_:w(px))=>C_member(px,)))。重写(TC v(g v(W_成员(p v)))。重写(TW v w)。应用dia_not_not_stable。问题。
通常的马尔可夫原理现在很容易遵循。
马尔可夫定理(p:N→bool):有效(neg(所有n:n,neg[p n])==>一些n:n、[p n')。证明。介绍p。应用markov_generalized with(t:=N)(p:=fun(N:N)=>[p N])。简介;应用primitive_trivial_C。简介;应用primitive_trivial_W。问题。
前提的独立性
通常的IP与可判定的命题函数$p$和任意的一个$q$:
$$((对于所有x.p(x))\Rightarrow\存在y。q(y))\右箭头\存在y。(\对于所有x.p(x))\向右箭头q(y)$$
可以将原语$p$推广到p:s→prp
使用trivalW(p x)
另一方面,类型依赖性迫使我们要求C(季度)
变得微不足道。下面的证明在最后不必要地复杂了,因为我碰到了中的一个错误重写
.
定理ip_广义(st:有居)(p:s→prp)(q:t→prp(对于所有(x:s),trivial_W(px))→(对于所有(y:t),琐碎_ C(q y))→有效(((所有x:s,px)==>some y:t,qy)==>some y:t,(所有x:s,px==>qy)。证明。TW TC简介。展开有效,C,W;简单;折叠C;折叠W。姿势(u:=有趣(x:s)=>W_成员(px))。姿势(v:=fun(y:t)(w:w(qy))=>C_member(qy。细化(现有_((fun a=>existT _(projT1(fst a u)))(fun _=>projT2(fst-a u),(函数b=>snd a(u,v))),(乐趣=>(u,v))_).很简单。简介[[fg]h]。很简单。设置(y:=项目T1(f u))。设置(z:=项目T1(g(u,v)))。介绍G。折叠。介绍H。重写(TC y);很简单。在G中重写(TCy(vy(projT2(f u)));在G。应用G。将(uz)替换为(fst(h y(fun _:对于所有x:s,W(p x)=>projT2(f u),fun_:(对于所有x:s,W(px))*C(qy)=>g(u,v))z)。假设。及物性(成员(居住(W_成员(pz)));应用(TW z)。问题。
当我们的IP出现特殊情况时对
是一个原始命题函数。
定理ip(st:有居)(p:s→bool)(q:t→prp):(对于所有(y:t),琐碎_ C(q y))→有效(((所有x:s,[px])==>some y:t,qy)==>some y:t,(所有x:s,[p x])==>q y)。证明。介绍了TC。应用ip_generalized。简介;应用primitive_trivial_W。简介;应用TC。问题。
这就结束了对考克方言解释的验证。至少有三个有趣的方向:
- 从Dialectica解释中提取程序。看起来可以将其提取到Scheme中。提取到Haskell和Ocaml中似乎更加复杂,因为
W公司
和C类
类型是相互依赖的,似乎没有简单的方法将它们转换为简单类型的编程语言。大概可以在“抽汽内联W C。
".
- 探索其他变体,例如Diller-Nahm解释,或者可能的解释a la乌尔里希·科伦巴赫和保罗·奥利瓦.
- 探索完全依赖辩证法解释的可能性。初步调查由托马斯·斯特里彻我也表示这是可以做到的。这可以为我们提供一种构建两级类型系统的方法,以验证MP和IP。