Math 程序设计概念的数学表示法

Math 程序设计概念的数学表示法,math,conventions,Math,Conventions,有许多表示程序结构的方法(如UML类图等)。我感兴趣的是,是否有一个惯例,它以严格的数学方式描述程序。我特别感兴趣的是为此目的使用数学符号 示例:类表示为集合(字段、属性)和函数(对集合元素进行操作)。父类“字段是子类的子集”。函数是用伪代码描述的,伪代码必须看起来像这样或那样…是的,有很多方法,但我认为它们中的大多数对于表达结构是不方便的,因为结构在默认的数学概念中通常是不可表达的。当然,主要的例外是函数式编程语言。想想折叠(反同构)、群、代数等 对于命令式编程,我知道Z的存在,它使用(纯的和

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


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

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


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

取决于你想完成什么,但是在这条路上使用特定的语言可能会给你带来麻烦


例如,见C++ FAQ Lite .< /P> < P>我知道Z符号在软件形式化验证中有一定的应用,如.</P>

这本书采用演绎法 通过附加程序来编程 用抽象的数学 使他们能够工作的理论。[……]

我相信亚历山大·斯捷潘诺夫和保罗·麦克琼斯的作品非常接近你想要的

概念是对概念的描述 对一种或多种类型的要求 以存在和存在的方式陈述 过程的属性、类型 定义的属性和类型函数 在类型上


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


其基本思想是,对于每个函数(无论是将其放入类还是老式函数),都有一个前置和后置条件。例如,前提条件可以是您有一个数组,其中
=0
元素。后置条件是,每个元素[i]必须由Z完成,前面已经提到过,与您描述的基本相同。有一些面向对象建模的变体,但我认为如果您希望对类进行建模,可以使用“标准Z”模式

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

这篇文章很好地介绍了Alloy及其同类产品,并提供了一个可用的类似工具表。

您正在寻找几种函数式编程语言,它们都基于一种基本的数学理论,称为。用函数式编程语言(如LISP)编写的程序是其自身的数学表示形式

我想推荐编程代数。这是一种计算程序、使用和维护的方法

如果你对这个话题有进一步的兴趣,你可以找到一篇惊人的论文,作者是Shin Cheng Mu和JoséNuno Oliveira()


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

我认为数学符号是标准的。我所有的计算机科学书籍似乎都在使用它。你有什么CS书籍?每个领域都有自己的工具。Mathematica或MathLab是可用于程序数学/功能描述的工具。一般来说,您可能会在函数式语言(如F#)中找到所需内容。也许我需要澄清一下。数学记数法是标准的,但我正在寻找编程中使用数学记数法的惯例。我仍然无法理解这个问题。当我看标准的计算机科学教科书时,里面都是关于计算机科学的数学。你在问什么?对于推荐的计算机科学文本,主题是编程语言的形式语义。基本工具/框架是指称语义学、Scott Strachey域理论及其用于计算和递归定义的定点语义学。霍尔逻辑仅表达/证明语义学。此外,它实际上不适用于函数间,也不适用于类。如果这听起来很有趣,有一本免费的教科书:你把它钉在这里了+1.