Questions tagged «semantics»

语义学正式描述了某些语法的含义。


5
带有反射的
我在寻找一个简单的演算,支持推理反射,即内省和正在运行的程序的操作。 是否存在未类型化的微积分扩展,从而使人们可以将λ-项转换为可以在语法上进行处理然后进行评估的形式?λλ\lambdaλλ\lambda 我认为微积分有两个主要附加术语: :取 v和产生的表示 v易于进行句法操纵。reflect vreflect v\mathtt{reflect}\ vvvvvvv :对一个术语进行句法表示并对其进行评估。eval veval v\mathtt{eval}\ v 为了支持反思,需要术语的句法表示。它看起来像: 将被表示为术语(大号阿中号 - [R (ë )),其中 [R (é )是的反射版本 ë,λx.eλx.e\lambda x.e(LAM R(e))(LAM R(e))(\mathsf{LAM}\ R(e))R(e)R(e)R(e)eee 将被表示为项(A P P R (e )R (e ')),并且e e′e e′e\ e'(APP R(e) R(e′))(APP R(e) R(e′))(\mathsf{APP}\ R(e)\ R(e')) 将被表示为(V A R x )。xxx(VAR x)(VAR …

3
什么时候两个模拟不是双模拟?
给定一个标记的过渡系统 ,其中小号是一组状态,Λ是一组标签,并→ ⊆ 小号× Λ × 小号是三元关系。与往常一样,写入p α →交通 q为(p ,α ,q )∈ →交通。将标记的过渡p α →交通 q表示在状态中的系统p改变状态到q与标签(S,Λ ,→ )(S,Λ,→)(S,\Lambda,\to)小号SSΛΛ\Lambda→交通⊆小号× Λ × S→⊆S×Λ×S\to\subseteq S\times\Lambda\times Sp →αqp→αqp \stackrel\alpha\rightarrow q(p ,α ,q)∈ →(p,α,q)∈→(p,\alpha,q)\in\top →αqp→αqp\stackrel\alpha\to qpppqqq,表示 α是引起状态变化的一些可观察动作。αα\alphaαα\alpha 现在关系被一个称为模拟当且仅当 ∀ (p ,q )∈ [R , 如果 p α →交通 p ' 然后 ∃ q ',ř …

2
这种形式分数形式的“离散数学”式表示法是什么?
在论文“无冲突的JSON数据类型”中,我遇到了这种形式化定义“规则”的表示法: 这个符号叫什么?我该怎么读? 例如: 该DOC规则的“分子”中没有任何内容-为什么不呢? 在EXEC和GET规则似乎也行上述两个不同的术语,这是什么意思? 该VAR规则也很引人注目,因为尽管许多其他规则在顶部使用某种箭头(我将其表示为“暗示”),但该规则似乎只是在说x是某物的元素。 几乎所有内容都以首字母开头,Ap,其文字描述为“副本p的状态由Ap描述,是有限的部分函数” –精明的读者怎么会倾向于“看到”每条规则的那一部分? 该站点确实提出了一个相关的问题,该问题的注释看起来非常相似,在此问题上,smallB,s⟩->⟨B',s'⟩作为关于小步长问题的初始规则的意义是什么?语义?—这被标记为“ 操作语义”,这似乎是一个强有力的线索。确实是我解释这些数字所依据的框架吗?您能否以“速成课程”形式轻松地概括一下这一点,以便即使我无法验证他们的证明的正确性,我也至少可以对他们在本节中所说的内容有更多的了解?

3
在非功能设置中实施关闭的问题
在编程语言中,闭包是一种流行且经常需要的功能。维基百科说(强调我的): 在计算机科学中,闭包(...)是一个函数,以及对该函数的非局部变量的引用环境。闭包允许函数访问其直接词法范围之外的变量。 因此,闭包本质上是一个(匿名?)函数值,可以使用超出其自身范围的变量。以我的经验,这意味着它可以访问定义点范围内的变量。 实际上,至少在函数式编程之外,这个概念似乎有所不同。不同的语言实现了不同的语义,甚至似乎还有意见之战。许多程序员似乎不知道闭包是什么,只把它们看作是匿名函数。 同样,在实现闭包时似乎存在主要障碍。最值得注意的是,Java 7本应包含它们,但该功能已推回将来的版本。 为什么闭包这么难(难以理解和实现)?这个问题过于笼统和含糊不清,因此让我将重点放在这些相互关联的问题上: 在常见的语义形式主义(小步骤,大步骤等)中表达闭包是否存在问题? 现有的类型系统是否不适合封闭并且无法轻松扩展? 使闭包与传统的基于堆栈的过程转换保持一致是否有问题? 请注意,该问题通常与程序,面向对象和脚本语言有关。据我所知,函数式语言没有任何问题。

2
斯科特连续函数:替代定义
我真的很挣扎于此属性: 令为相干空间,而f :C l (X )→ C l (Y )为单调函数。˚F是连续的,当且仅当˚F (⋃ X ∈ d X )= ⋃ X ∈ d ˚F (X ),对于所有的,使得是一个有向集。X,YX,YX,Yf:Cl(X)→Cl(Y)f:Cl(X)→Cl(Y)f: Cl(X) \rightarrow Cl(Y)ffff(⋃x∈Dx)=⋃x∈Df(x)f(⋃x∈Dx)=⋃x∈Df(x)f(\bigcup_{x\in D} x)=\bigcup_{x \in D}f(x)D⊆Cl(X)D⊆Cl(X)D \subseteq Cl(X)DDD 向集合被这样定义:偏序是一个有向组当且仅当这样和。Ç 升(X )表示X的派系:{ X ⊆ | X | | 一,b ∈ X ⇒ 一个连贯b }。D⊆D⊆D \subseteq ∀x,x′∈D∀x,x′∈D \forall …

4
程序语言是否具有足够的延展性以允许程序扩展语言语义
关于诸如ruby(和javascript)之类的语言的功能,允许程序员在定义类后随时扩展/覆盖类(包括诸如String之类的类),从理论上讲,设计一种允许程序在以后扩展的语言是否可行?它的语义。 例如:Ruby不允许多重继承,但是我可以扩展/覆盖默认语言行为以允许多重继承的实现。 是否有其他语言允许这样做?这实际上是语言设计师关注的主题吗?在选择使用ruby构建用于Web应用程序开发的Rails框架的选择时,此类语言可能非常强大,可以允许为各种应用程序设计框架(或DSL)。


2
融合证明,可实现简单的重写系统
假设我们有一种简单的语言,其中包含以下术语: truetrue\mathtt{true} falsefalse\mathtt{false} 如果t1,t2,t3t1,t2,t3t_1,t_2,t_3是项,则ift1thent2elset3ift1thent2elset3\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 现在假设以下逻辑评估规则: iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t′1ift1thent2elset3→ift′1thent2elset3[E-If]iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t1′ift1thent2elset3→ift1′thent2elset3[E-If] \begin{gather*} \dfrac{} {\mathtt{if}\: \mathtt{true} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_2} \text{[E-IfTrue]} \quad \dfrac{} {\mathtt{if}\: \mathtt{false} \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to t_3} \text{[E-IfFalse]} \\ \dfrac{t_1 \to t_1'} {\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3 \to \mathtt{if}\: t_1' \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3} …

3
微积分和编程语言之间有什么区别?
我对所谓的微积分和编程语言感到很困惑。 我倾向于认为并且可能已经被告知,微积分是用于推理程序等效性的正式系统。程序具有机器指定的操作语义,(我认为?)应该是确定性的。以此方式,针对语言的(正确)演算是用于程序等效的证明方法。大号LL 对我来说,这似乎是合理的划分,但这是否是普遍接受的含义?也许这是错误的? 相关的,为什么某些操作语义是不确定的(假设它们是融合的)?保持战略选择开放会带来什么好处? 我真的很感谢这些澄清。和具体参考!谢谢!

1
什么是语义?
有许多流行的语言。但是,计算机科学家告诉我们,为了确切,明确地理解那些语言的程序行为(例如证明其身份),我们需要将它们翻译成另一种易于理解的语言。他们称这种语言为“语义”。作者提出了许多语义之一。他们解释了结构的含义以及如何将语言翻译成它们。他们说,一旦您这样做,每个人都一定会理解您的程序。 看起来不错,但是我听不懂。他们是否告诉我们他们引入另一种语言来理解第一种语言?为什么我们比最初的理解得更好?为什么这种语义比这更好?为什么不立即学习C的语义而不是发明另一种语言来描述C的语义呢?语法也一样。为什么不就语法提出相同的问题? PS在评论中,我听到语义并不意味着另一种语言或对其的翻译。但是VHDL的形式语义学说,如果您仅以一种方式理解某些东西,那么您就不会理解它,并且如果我们提供一种语言将其翻译成另一种(已知)语言的机制,则可以指定“含义的含义”。也就是说,“语义是形式系统之间的关系”。Hennessy在《编程语言语义学》中说,当语义以BNF或语法图的形式提供时,语义允许对程序“含义”进行正式处理。如果不是语言,什么是正式系统? PS2我可以说将给定HDL程序的硬件综合成门的互连,这是语义提取的过程吗?之后,我们将(高级)描述翻译成我们理解的(低级)语言。

1
编程语言语义原型制作工具
是否有用于对编程语言语义和类型系统进行原型制作的工具,并且还允许对标准属性(例如类型健全性)进行某种模型检查? 我之所以这样问,是因为我正在读一本有关Alloy的书,它提供了我想要的确切功能,但是对于使用关系逻辑表示的模型而言。 我知道Ott,但是它没有这种“模型检查”功能,因为它专注于为证明助手系统生成代码。 任何有关这种工具存在的参考都将是不错的。

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
在Hoare风格的正确性证明中如何处理数组
在围绕该问题的讨论中,Gilles正确地提到,使用数组的算法的任何正确性证明都必须证明没有越界的数组访问;根据运行时模型,这将导致运行时错误或访问非数组元素。 一种执行这种正确性证明的通用技术(至少在本科生中,可能在自动验证中)是使用Hoare逻辑。我不知道标准规则集包含与数组有关的任何内容;他们似乎仅限于单子变量。 我可以想象添加以下形式的公理 {0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}{0≤i<A.length∧P[A[i]/E]} A[i]:=E; {P}\qquad \displaystyle \frac{}{\{0 \leq i \lt A.\mathrm{length} \land {P[A[i]/E]} \}\ A[i] := E;\ \{P\}} 但是,我不清楚您将如何处理右侧的数组访问,即在某些语句x:= E中它是否是复杂表达式EEE的一部分。x:=Ex:=Ex := E 如何在Hoare逻辑中对数组访问进行建模,以便可以并且必须证明无效访问的存在以确保程序的正确性? 答案可能假设我们不允许数组元素比其他语句中使用或一些的一部分在,因为这不限制表现; 我们总是可以为临时变量分配所需的值,即写而不是。A[i]:=EA[i]:=EA[i] := EEEEx:=Ex:=Ex := Et:=A[i]; if(t>0)…t:=A[i]; if(t>0)…t := A[i];\ \mathtt{if} ( t > 0 ) \dotsif(A[i]>0)…if(A[i]>0)…\mathtt{if} ( A[i] > 0 )\dots

3
程序分析入门
我正在寻找有关程序分析入门的资源。 我找到的关于该主题的唯一一本书是尼尔森与尼尔森的书。 除此之外,似乎只有“编译器”书中的“程序分析”将作为一章或类似内容。 人们是否还知道其他资源?

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.