当前位置: 首页 > news >正文

Programming Languages And Lambda calculi 1.1 定义集合

Programming Languages And Lambda calculi

第一章 用文字计算

在本书中,我们将会研究如何用一种人们容易理解的方式去定义一种编程语言以及进行形式分析。

定义语言的其中一种方法是用整段整段的文字去定义,解释语言中的表达方式以及如何去分析它们。这种方法能够让读者很快在整体上大致理解一种语言,但是有关这种语言的细节将会变得非常难以提取。更加糟糕的是,段落文本不适合正式的分析。

另一种定义语言的方法是引入一个叫元语言(meta-language)的解释器。假设读者对元语言非常熟悉,这种方法能够清楚、完成地描述语言的细节。假设元语言有一个正式的规范,那么解释器在语言中将会有正式的含义,并且能够被分析。

用来定义另一种语言的元语言不需要有效地执行,因为它的主要目的是解释语言。元语言的基本数据结构不需要用位和字节定义。实际上,对于元语言,我们可以直接使用逻辑和集合论来处理程序文本,就像在物理机上计算被描述的方式一样。最终,可以用无序位(shuffling bits)来描述内存位置,抽象计算则可以用文本关系描述。

1.1 定义集合

现在给出如下BNF语法:

在这里插入图片描述

实际上我们定义了一组文本字符串。上述的定义可以扩展成如下对B的约束:

在这里插入图片描述

我们提及的B集合是满足上述约束的最小集合。

注意:有时候,“B”意味着“集合B”,另一些时候,“B”意味着“任意一个B集合的元素”。不用担心的是,B的含义在上下文之中不会有歧义。有时候我们也会在集合的名称上使用下标或者上标,如B1, B

因此,上述的约束也可以写作:
在这里插入图片描述

无论是用BNF速记表达,还是扩展为约束集,B集合都是被严格定义的,在这种情况下,枚举有限空间中的所有元素显然是不可能的。
在这里插入图片描述

然而,给定属于B的特定文本,我们可以通过演绎B约束中的规约来证明它是否属于B。例如,(t•(f•t)) 属于B。

在这里插入图片描述

通常我们也会通过用参数构建证明树的方式来证明:
在这里插入图片描述

当然,我们也可以省略某些使用的规则的名称,因为它们通常都很显然。

在这里插入图片描述

练习1.1

下列元素是否属于集合B?如果是,编写出证明树。

  1. t
  2. ((f•t)•(f•f))
  3. ((f)•(t))
题解1.1
  • 1 树略
  • 4 树:
    在这里插入图片描述

相关文章:

  • 算法: 动态规划 编辑距离 Edit Distance / Levenshtein Distance
  • 【Salesforce】【Apex】Trigger中不通过soql查询记录类型的开发名称
  • 【Programming Languages And Lambda calculi】 1.2 ~ 1.3 关系、赋值与关系
  • 【Programming Languages And Lambda calculi】 1.4 有向赋值
  • 【算法】 动态规划 基础题库 1-7 python实现
  • 【Programming Languages And Lambda calculi】 1.5 ~ 1.7 上下文规约 赋值函数 符号摘要
  • 【Programming Languages And Lambda calculi】第二章 结构归纳法 2.1 基础
  • 【Programming Languages And Lambda calculi】2.2 ~ 2.3 定义中的省略,证明树中的归纳
  • 【Programming Languages And Lambda calculi】2.4 ~ 2.5 多重结构,更多的定义与证明 第二章结束
  • 【Programming Languages And Lambda calculi】第三章 求值一致性 Church-Rosser 关系 (本章仅一节)
  • 【Programming Languages And Lambda calculi】第四章 Lambda演算 / Lambda表达式 4.1 演算中的函数 柯里化
  • 【Programming Languages And Lambda calculi】4.2 Lambda演算的语法与约化
  • 【Programming Languages And Lambda calculi】4.3 Lambda 表达式中给布尔值编码
  • 【Programming Languages And Lambda calculi】4.4 Lambda 表达式 对值编码
  • 【Programming Languages And Lambda calculi】4.5 Lambda 表达式 数值编码
  • Google 是如何开发 Web 框架的
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CAP 一致性协议及应用解析
  • DOM的那些事
  • HashMap剖析之内部结构
  • JAVA之继承和多态
  • TypeScript迭代器
  • Vue小说阅读器(仿追书神器)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 第十八天-企业应用架构模式-基本模式
  • 诡异!React stopPropagation失灵
  • 力扣(LeetCode)21
  • 聊一聊前端的监控
  • 深度解析利用ES6进行Promise封装总结
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ###STL(标准模板库)
  • #stm32驱动外设模块总结w5500模块
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (九)c52学习之旅-定时器
  • (转) Android中ViewStub组件使用
  • (转载)hibernate缓存
  • @ModelAttribute 注解
  • @RequestMapping-占位符映射
  • @Validated和@Valid校验参数区别
  • @我的前任是个极品 微博分析
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Android]一个简单使用Handler做Timer的例子
  • [bzoj 3534][Sdoi2014] 重建
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [codevs 1515]跳 【解题报告】
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [English]英语积累本
  • [Head First设计模式]策略模式
  • [JavaScript]_[初级]_[关于forof或者for...of循环语句的用法]
  • [JavaWeb]—前端篇
  • [JS]数据类型
  • [LeetCode] 2.两数相加