是。如果可以验证它们是否相同,那么计算机也可以。
以下是Coq中整数排序的快速说明:
Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.
Fixpoint is_sorted (l : natlist ) : bool :=
match l with
| nil => true
| (cons x nil) => true
| (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
end.
...
Theorem sort_spec : forall l, is_sorted (sort_list l).
可以使用从属类型将规范直接编码为排序声明。
对于这个特殊的问题,约翰·达林顿(John Darlington)在20世纪70年代证明,可以通过将分类规范机械地转换为实现方式来获得6种分类算法。我相信这取名为“基于语义的程序派生”。
在软件工程界,找到扩展上等效的功能称为“语义克隆检测”。
戴夫·克拉克(Dave Clarke)在CS StackExchange上也对这个问题给出了很好的答案:https ://cs.stackexchange.com/questions/2059/how-do-you-check-if-two-algorithms-return-the-same-result 对于任何输入
这一切都属于形式方法和编程语言的范畴。指称语义是用于建模语义的一类技术,但是由于与操作语义相比难以使用,因此它们不受欢迎。