微积分和编程语言之间有什么区别?


13

我对所谓的微积分和编程语言感到很困惑。

我倾向于认为并且可能已经被告知,微积分是用于推理程序等效性的正式系统。程序具有机器指定的操作语义,(我认为?)应该是确定性的。以此方式,针对语言的(正确)演算是用于程序等效的证明方法。L

对我来说,这似乎是合理的划分,但这是否是普遍接受的含义?也许这是错误的?

相关的,为什么某些操作语义是不确定的(假设它们是融合的)?保持战略选择开放会带来什么好处?

我真的很感谢这些澄清。和具体参考!谢谢!


3
对于同一事物的不同看法,它们是不同的词。
拉斐尔

1
@Raphael,它如何回答问题?这不是做哲学的地方。
fade2black

4
有时,在任何地方都需要一点哲学。
安德烈Souza的莱莫斯

Answers:


10

这些词的含义不是固定的,但我可以给您我的解释。

一个微积分是什么,我们有计算的杂耍式的感觉(想泰勒级数或分析积分的计算操作)。微积分告诉我们什么是操纵规则,但不能告诉我们在给定情况下应该使用哪些规则。

一个编程语言是什么,告诉我们如何来计算。它准确地告诉我们如何使用规则。我们通常让计算机使用规则,因为它要快得多。规则可能是不确定的,并且可能有很好的理由使规则不确定。演算的本质可能是不确定的(认为并发通信过程),或者确定特定的策略可能对实现技术和优化有害。

λλ

相反,标准ML是一种编程语言。它是根据操作语义(即计算规则)给出的。我们可以衍生出相等的概念(语境对等,观察上的对等),可以将其视为一种演算。

当然,在微积分及其作为编程语言的表现形式之间通常会存在有用的联系。融合归一化只是从微积分到编程语言的一种方法(尽管可悲的是,有些人已将其变成一种宗教)。演算语言和编程语言之间的相互作用很重要:可以实际使用编程语言,但是演算可以解释程序的含义。

只是为了使人们烦恼,让我也要声明,假装微积分及其操作表现形式之间没有区别,有时会导致编程界和编程界的微型宗教观点出现偏差。您可以尝试猜测我要记住的语言。(这是一种非常酷的语言!)


那么,编程语言是否具有与之兼容的策略/重写系统的演算呢?
xavierm02

ppp=p

π

您可以提供方程,这些方程不仅说明程序,而且说明程序的环境(状态或转换)。但是我不会说这样的事是微积分。而是一个代数模型。
安德烈·鲍尔

非常感谢Andrej,这对我来说很有意义。我意识到这可能因人而异,但是我接受这个答案,因为(我认为)这是最好的答案。
Guido

2

结石的目标不仅是研究程序的对等物,还在于研究程序。花式演算的一个例子是其中的策略(呼叫按值或呼叫按姓名)被局部地确定。可以有一天用一种编程语言来实现它,但它首先是作为一种演算进行研究的。您还可以使用计算来研究类型系统(有些计算,例如Martin-Löf类型理论中的计算也可以计算类型)。


我认为主要区别在于,计算(相对)易于正式学习,而编程语言(相对)易于使用。这导致以下差异:

计算趋于最小化,而PL趋向于具有冗余性(当您已经拥有while循环时进行循环,如果已经拥有if则进行切换,...​​),以便于表达您想要的内容变得更加容易。

演算具有完全指定的语义,而PL语义通常由默认解释器/编译器描述。


一些操作语义是不确定的,因为它允许:

  • 证明所有“亚语义”的东西。
  • 允许选择实现,从而(可能)加快执行速度。
  • 因为有时候,您有一个“ radnom()”运算,并且如果您不关心概率,但只关心可能的情况,则不确定性是表示它的好方法。

请注意,按值调用是不确定的:您可以选择先评估函数还是自变量。


不,我不同意这与形式化或复杂程度有关。
安德烈·鲍尔

2

“编程语言”和“演算”是多义性术语,也就是说,根据上下文,它们的含义不同。

在某些情况下,编程语言和计算已经收敛到同一概念,即基于可“机械”应用的一组正式规则的重写系统

这种融合有时对我们(而不是对工作的软件开发人员或数学家)来说是难以理解的,原因是我们的工作是将具体的编程语言设想为计算的,并在具体的编程语言中实际体现计算。

为了直接回答您的问题,计算和编程语言之间的混淆(如果存在的话)不是偶然的,而是项目。我们的项目。这证明了我们作为一门科学学科的相对成功。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.