编程概念的数学符号表示

4

有许多方法可以表示程序的结构(例如UML类图等)。我想知道是否有一种约定以严格、数学的方式描述程序。我特别关注使用数学符号来达到这个目的。

例如:类被表示为集合(字段、属性)和操作集合元素的函数。父类的字段是子类字段的子集。函数用伪代码描述,必须看起来像这样...


我认为数学符号是标准的。我的所有计算机科学书籍似乎都在使用它。你有哪些计算机科学书籍? - S.Lott
每个领域都有它的工具。Mathematica或MathLab是可用于程序的数学/功能描述的工具。一般来说,您可能会在像F#这样的函数式语言中找到您要寻找的内容。 - Lucero
也许我需要澄清一下。数学符号是标准的(例如http://en.wikipedia.org/wiki/Table_of_mathematical_symbols),但我正在寻找用于编程目的的数学符号使用约定。 - supermedo
我还是完全不理解这个问题。当我看标准的计算机科学教材时,它们充斥着数学内容。你在问什么?是要推荐一本计算机科学教材吗? - S.Lott
本话题是关于编程语言的形式语义学。基本工具/框架是指称语义学和Scott-Strachey域论以及其用于计算和递归定义的不动点语义学。 - philipxy
10个回答

2


1

您正在了解函数式编程。有几种函数式编程语言,它们都基于一种称为Lambda演算的基本数学理论。使用函数式编程语言(如LISP)编写的程序是其自身的数学表示。;-)


1

1
Hoare逻辑只表达/证明语义。此外,它对于函数间的交互并不真正可用,对于类更是一点用处都没有。 - Henri

1

有很多方法,但我认为大部分都不方便表达结构,因为结构通常无法用默认的数学概念来表达。当然,主要例外是函数式编程语言。想想折叠(catamorphisme)、群、代数等。

对于命令式编程,我知道存在 Z,它使用(纯粹和扩展的)λ演算集合论和(一阶)谓词逻辑。然而,我认为这并不是很方便。使用数学来表达结构的唯一好处是你可以证明关于它的东西。但如果你想这样做,请看看 JML、Spec# 或 Eiffel。


我本来要提到Z符号。这里有一个简短的介绍:http://en.wikipedia.org/wiki/Z_notation。如果听起来很有趣,那么可以免费获取一本教材:http://www.usingz.com/。 - hexium

1

这取决于你想要实现什么,但是使用特定的编程语言可能会让你陷入麻烦。

例如,请参阅C++ FAQ Lite上关于圆形-椭圆形讨论的内容。


1
这本书采用演绎法来编程,将程序与使其工作的抽象数学理论联系起来。我相信亚历山大·斯蒂帕诺夫和保罗·麦克琼斯的《程序设计基础》非常接近你所寻找的内容。
概念是关于一个或多个类型的要求描述,以类型上定义的过程、类型属性和类型函数的存在和属性来阐述。

1

Z已经被提到,它基本上就是你所描述的。有一些针对面向对象建模的变体,但我认为如果你想建模类,使用“标准Z”的模式就可以达到相当高的水平。

还有Alloy,它是较新的、受Z启发的工具。它的符号表示可能更接近于面向对象。它也是可分析的,即您可以检查您创建的模型是否满足某些条件,但它不能证明属性保持不变,只能在有限范围内尝试反驳。

文章Dependable Software by Design是Alloy及其类似工具的一个很好的介绍,同时列出了可用的类似工具的表格。


0

我想推荐一下程序代数。它是一种使用关系代数伽罗瓦连接的计算方法来编写程序。

如果您对这个主题有进一步的兴趣,您可以在这里找到一篇令人惊叹的论文,由Shin-Cheng Mu和José Nuno Oliveira(幻灯片)撰写。

使用关系代数和一阶逻辑,也与Alloy、函数式编程和设计契约有很好的协同作用(可轻松应用于面向对象编程)。


0

有一种数学语言,实际上描述了一个程序或者说它的操作。你从初始状态开始,然后转换这个状态,直到达到所需的目标状态。这些转换产生的程序代码必须被执行。

请参阅维基百科关于霍尔逻辑的文章

基本思想是对于每个函数(无论是将其放入类中还是放入旧式函数中),都有前置条件和后置条件。例如,前置条件可以是您拥有一个具有>= 0个元素的数组。后置条件是每个i <= j的元素[i]必须小于等于element[j]。

通常的描述是“该函数对数组进行排序”。但是数学术语允许您将输入(必须匹配前置条件)转换为输出(必须匹配后置条件)。

对于更复杂的程序来说,使用起来有点不方便,但其中一些示例非常令人印象深刻。通常情况下,您会得到非常紧凑的代码作为结果,看起来相当复杂,但第一次尝试就能运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接