other questions的回答者解释说,所有Agda程序都将终止。
我的理解是,终止任何有效的Adga程序都是受Agda的高级从属类型系统约束的要求。这个严格的要求似乎将消除许多错误。但是,似乎也禁止非终止程序会阻止该语言表达一些有用的程序。例如,服务器是一种程序,其中不终止的可能性是其功能的关键方面。
是否可以在Agda中编写服务器?我认为在这种情况下,可以通过将服务器设置为最终终止于十亿年左右的时间来绕开不终止限制。但是我想知道类型系统是否有某种技巧可以允许Agda表达这样的非终止程序,也许只有那些达到某种静态封闭循环的程序。如果不是这样,那么从理论上讲,是否可以发明出这样的技巧?
没有这种可能性,似乎Agda概念从根本上受到它可以表达的有用程序的限制。
答案 0 :(得分:5)
所有Agda程序都必须总计。这意味着:
生产率意味着对过程的任何有限观察都需要在有限的时间内返回答案。服务器将是一个核心递归程序,向用户提供他们可以发出的一组命令,并在有限时间内返回响应,并(如果适用)提供下一组命令。