Skip to content

递归函数的系统 PCF

:material-circle-edit-outline: 约 632 个字 :material-clock-time-two-outline: 预计阅读时间 2 分钟

9 递归系统 PCF.pdf 编程语言原理(本)2024-11-13 第 7-8 节

PCF 是一种表示程序设计可计算函数的语言,是 ⼀ 个基于 \(\lambda\) 演算的类型化的函数式语 ⾔

PCF 语法

每个 PCF 表达式都具有一个唯一的类型,因此可以通过列出其类型来概括 PCF 的构造

只要看到这个表达式长什么样子,就能确定其是什么类型

基本类型为 natboolarr

只有满 ⾜ 特定类型求取约束的表达式才被认为是该语 ⾔ 的部分

[!EXAMPLE]

true+1 :不符合

x+5 :仅当 xnat 时成 ⽴

布尔值和 ⾃ 然数

  • 基本的条件表达式 : if < 布尔值 > then < 值 > else < 值 >
  • 相等测试 Eq? 作用在 自然数 上,返回 布尔值
    • Eq? 5 6
  • if < 布尔值 > then < ⾃然数 > else < ⾃然数 >
    • 是一个自然数表达式
  • if < 布尔值 > then 3 else true
    • 是错的
  • if < 布尔值 > then λx: nat.M else λx: nat.N
    • 是 arr 表达式

BNF 表示的基本表达式

image-20241225174740385

等式公理

废话

每种类型的条件表达式的两个公理模式:

  • if true then M else N = M
  • if false then M else N = N

存在 ⽆ 限多个相等性测试的公理,确定如下:

  • Eq? n n = true, 对每个数 n
  • Eq? m n = false, m 与 n 为互异的数

操作语义

归约规则:通过从左到右读取 ⼀ 个等式公理 ⽽ 获取的基本归约“规则”

redex:与 ⼀ 个归约公理左边相匹配的项(还可以再被规约),与 normal form 相对

例如:

if Eq? (6+5) 17 then (1+1) else 27

为了得到结果,(6+5)必须得做,(1+1)却不一定需要

⼆ 元组(序偶)

PCF 支持积类型,不能支持和类型

看 PPT 吧。。。

数值函数的构造

在 PCF 中,数值函数不仅仅是简单的 ⾃ 然数之间的映射,PCF 语 ⾔ 通过递归和组合等机制可以定义复杂的数值函数

  • 递归函数:PCF 中允许定义递归 ⾃ 然数函数,例如阶乘函数,这些递归函数能够根 据基本的 ⾃ 然数表达式(如加法、乘法、递归调 ⽤ 等)构造复杂的数值函数。
  • ⾼ 阶函数:PCF 中还 ⽀ 持 ⾼ 阶函数,这意味着可以将 ⾃ 然数的 函数作为参数 传递给其他函数,从 ⽽ 构造更复杂的数值操作

隐式定义

数值函数 f(n) = n+5 隐式地被 x+5 表达式定义

if x then false else true 隐式定义了否定

image-20241228155850313

if x then y else false

if x then true else y

image-20241228160313226

参数分离(柯里化)

image-20241228161830813

image-20241228161837271

例题

image-20241228161904956

image-20241228161912046

image-20241228161917530

image-20241228161923049

image-20241228161934536

image-20241228161940035

image-20241228162721916