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

寻找Prolog程序的Busy Beaver函数值,求n<39的更大下界

Prolog版忙碌海狸函数(BB_Prolog(n))下界征集

著名的忙碌海狸函数用于衡量n状态m符号的停机图灵机的最大复杂度:一种版本以空白带启动,统计停机时磁带上最终的1的数量;另一种版本统计停机前的总移位次数。

由于Prolog表达能力极强,研究忙碌海狸风格的Prolog程序颇具意义。为此制定以下Prolog程序及查询规则:

  • 程序与查询必须是纯Prolog:不得使用库、标准谓词、数字、not或cut。
  • 程序加查询的大小以总符号数计量:包括谓词、函数、常量及变量的出现次数。
  • 运行复杂度以执行查询时的总调用次数计量。采用Prolog标准过程语义:按顺序执行子句,从左到右执行子目标。一次调用指尝试匹配子句头部(无论成功或失败)。程序必须能停机,成功或失败均可。

据此,Prolog版忙碌海狸函数BB_Prolog(n)定义为:所有大小为n符号且能停机的Prolog程序加查询的最大调用次数。


示例1:大小38符号的Ackermann程序

以下是总符号数为38(5+10+15+8)的Prolog程序加查询,执行213次调用后停机,因此BB_Prolog(38) >= 213。该程序用后继函数(s)和零(o)表示数字,计算Ackermann函数,查询对应计算Ackermann(4,0)=13。

a( o,    N,    s(N) ).                                   
a( s(M), o,    A    ) :- a(   M,  s(o), A ).                
a( s(M), s(N), B    ) :- a( s(M), N,    A ), a( M, A, B ).     

:- a( s(s(s(s(o)))), o, X ).  

当计算Ackermann(5,0)=65533时,调用次数超过12000000,因此BB_Prolog(39) > 12000000。


示例2:大小31符号的随机程序

通过研究随机Prolog程序,发现以下总符号数为31(5+3+18+5)的程序加查询执行174次调用后停机(成功),因此BB_Prolog(31) >= 174。

p( X,      f(o,o) ).  
p( X,      X      ).   
p( f(X,o), Y      ) :- p( o, Z ), p( Y, o ),  p( f(Y,W), f(Z,X) ).

:- p( f(o,o), o ) .

现诚邀各位寻找BB_Prolog(n)的更大下界,尤其是n=31或其他n<39的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:49:50