数学与计算

关于计算机数学的博客

Coq中的辩证法解释

我想我已经上瘾了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)

以下内容与上述文件基本相同。

基本定义

我们介绍了哥德尔对逻辑的“辩证法”功能性解释,略为概括并改编为考克。

需要在自然数上实现可判定的平等,否则我们就不能阿里斯.

需要导入Arith。需要导入Bool。

下面一行是针对Coq8.3的,但Coq8.2似乎没有受到影响,所以幸运的是,该文件与这两个版本都兼容。

取消设置自动引入。设置隐式参数。

我们将允许对任意居住类型进行普遍和存在的量化。通常的解释允许对自然数进行量化(也可能是对自然数的泛函),自然数当然是有人居住的。

记录有人居住:=居住{ty:>Set;成员:ty}。

有人居住的自然数量:

定义N:=居住在0。

感应式公共关系计划是对象语言抽象语法的一种“深度嵌入”,我们将把它解释为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表示法做了两个更改:

  1. 首先,我们对连词的计数器使用sum,这里通常使用乘积。这给了我们合取和析取之间的对称性,简化了臭名昭著的合取收缩和(_contr)但使含意和连词之间的附加关系复杂化。Thomas Streicher指出,这种改变是无关紧要的,因为我们可以证明一个单独的引理,它允许我们从计数器p和q作为对计数器作为和的元素(这样的引理依赖于迪亚关系定义如下)。
  2. 其次,因为命题函数的结构可以依赖于它的参数,所以我们不得不在瓦普成本加成什么时候是一个量化的陈述。这并不令人惊讶,但更令人惊讶的是,存在主义的计数器,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。问题。

这就结束了对考克方言解释的验证。至少有三个有趣的方向:

  1. 从Dialectica解释中提取程序。看起来可以将其提取到Scheme中。提取到Haskell和Ocaml中似乎更加复杂,因为W公司C类类型是相互依赖的,似乎没有简单的方法将它们转换为简单类型的编程语言。大概可以在“抽汽内联W C。".
  2. 探索其他变体,例如Diller-Nahm解释,或者可能的解释a la乌尔里希·科伦巴赫保罗·奥利瓦.
  3. 探索完全依赖辩证法解释的可能性。初步调查由托马斯·斯特里彻我也表示这是可以做到的。这可以为我们提供一种构建两级类型系统的方法,以验证MP和IP。

评论

干得好,安德烈,我同意你对这个领域的预测。

技术要点:请不要用短语“HOAS”来表示“我设法用某种函数对我的语法进行了编码,尽管这样做是不够的”。您的编码不是使用高阶抽象语法!更确切地说,这是你想出的一个愚蠢的东西,然后必须加以驯服,以使其在当前的情况下发挥作用。换句话说,你使用的是一个负函数空间,而不是正确的正函数空间,所以你的语法编码不是HOAS。人们把这个神话/错误延续下去真是令人困惑!

鲍勃

我认为Andrej的意思是PHOAS(参数化高阶抽象语法)。这是一种通过普遍量化变量类型来模拟HOAS的聪明方法。请参见Adam Chlipala的论文介绍。当然,HOAS在Coq中是不可能的。

@鲍勃:你说得很对,这不是HOAS。对于我所做的事情,除了“我想出的鸡巴一样的东西”之外,还有更好的名字吗?我认为Coq人有时称之为“深度嵌入”。但有不同的“深度”。HOAS比我做的要“深刻”。总之,我编辑了这篇文章。

@Matija:你会记得,我们(你和我)不久前试过PHOAS,但最终似乎没有什么真正的优势。

顺便说一句,不需要的依赖性带来的麻烦证明是有用的。考克(或者我应该说类型理论)明确指出了辩证法的一个完全独立的版本,其中成本加成取决于瓦普(我必须先弄清楚细节,然后再详细说明)。所以这件鸡冠花的事是有好处的!

乌尔里克·巴赫霍尔茨

谢谢你的精彩帖子!我期待着有一个完全独立版本的续集。另一个有趣的方向是对Avigad&Towsner进行扩展,将经典ID_1减少为构造ID_1(以及更高的ID-可能超限?)。

通过某种软件基础设施,在你的博客上关注评论会更容易。我错过了什么吗?

对于我所做的事情,除了“我想出的鸡巴一样的东西”之外,还有更好的名字吗?

CHOAS作为Cockamamie Higher-Order Abstract Something或other的总称怎么样?那么你也许可以称你的代表为LF风格的CHOAS。

右手边不是有一个“评论RSS”按钮吗?它应该为评论提供RSS提要。

如何在此博客上发表评论:目前,由于相关脚本死亡,注释被禁用。如果你在上评论这篇文章乳臭虫提到andrejbauer@mathstodon.xyz,我会的欣然回应。欢迎您加入联系我直接。