编程概念的数学符号

时间:2009-10-27 18:31:25

标签: math conventions

有许多表示程序结构的方法(如UML类图等)。如果有一个以严格的数学方式描述程序的约定,我感兴趣。我特别感兴趣的是为此目的使用数学符号。

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

10 个答案:

答案 0 :(得分:2)

我知道Z Notation已在某种程度上用于软件的形式验证,例如the Tokeneer project

Z Notation

Z Reference Manual

答案 1 :(得分:2)

答案 2 :(得分:1)

是的,有Floyd-Hoare Logic

答案 3 :(得分:1)

有很多方法,但我认为它们中的大多数都不便于表达结构,因为结构在默认的数学概念中通常是不可表达的。主要的例外当然是功能编程语言。想想折叠(catamorphisme),群体,代数等等。

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

答案 4 :(得分:1)

取决于您想要完成的任务,但是使用特定语言走这条路会让您陷入困境。

例如,请参阅C ++ FAQ Lite上的circle-ellipse discussion

答案 5 :(得分:1)

  

本书采用演绎法   通过附属计划进行编程   用抽象的数学   使他们工作的理论。 [...]

我相信Alexander Stepanov和Paul McJones的Elements of Programming非常接近你所寻找的。

  

Concepts

     

概念是对...的描述   对一种或多种类型的要求   根据存在和   程序属性,类型   属性和定义的类型函数   关于类型。

答案 6 :(得分:1)

Z,已经提到过,几乎就是你所描述的。它有一些用于面向对象建模的变体,但我认为如果你想对类进行建模,你可以使用“标准Z”模式。

还有Alloy,它更新,受Z的启发。它的符号可能更接近于面向对象。它也是可分析的,即你可以检查你创建的模型是否满足某些条件,但它不能证明属性成立,只是试图在有限的范围内反驳。

文章Dependable Software by Design是对Alloy及其同类产品的精彩介绍,以及可用类似工具的表格。

答案 7 :(得分:1)

您正在寻找functional programming.有几种函数式编程语言,它们都基于一种称为Lambda calculus的基本数学理论。用LISP等函数式编程语言编写的程序是他们自己的数学表示。 ; - )

答案 8 :(得分:0)

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

请参阅Wikipedia article about Hoare logic

基本思想是,对于每个函数(无论你将它放入类或旧函数中),你都有一个前置条件和一个后置条件。例如,前提条件是您有一个具有>= 0元素的数组。后置条件是每个元素[i]必须由< = element [j]为每个i< = j。

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

使用它有点笨拙,特别是对于更复杂的程序,但有些例子非常令人印象深刻。通常情况下,您会得到非常紧凑的代码,因为结果看起来相当复杂,但首先尝试使用。

答案 9 :(得分:0)

我想建议编程代数。这是一种计算方法,使用Relational AlgebraGalois Connections

如果您对此主题有进一步的兴趣,可以找到由Shin-Cheng Mu和JoséNunoOliveira(here)撰写的精彩论文slides

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