跳到主要内容

Lean 基本类型

Lean是一种强大的交互式定理证明器,同时也是一种编程语言。它的类型系统是其核心特性之一,理解Lean的基本类型是学习Lean的第一步。本文将带你了解Lean中的基本类型,并通过示例和实际应用场景帮助你掌握这些概念。

什么是Lean的基本类型?

在Lean中,基本类型是最简单的类型,它们是构建更复杂类型的基础。Lean的基本类型包括:

  • Nat:自然数类型
  • Int:整数类型
  • Bool:布尔类型
  • String:字符串类型
  • Unit:单元类型

这些类型是Lean类型系统的基石,理解它们的工作原理对于编写Lean程序至关重要。

自然数类型 (Nat)

Nat 是Lean中表示自然数的类型。自然数包括0和所有正整数。以下是一个简单的例子:

lean
def myNumber : Nat := 42

在这个例子中,myNumber 是一个类型为 Nat 的变量,其值为 42

自然数的运算

Lean支持对自然数进行基本的算术运算,例如加法、减法和乘法:

lean
def sum : Nat := 2 + 3
def difference : Nat := 5 - 2
def product : Nat := 4 * 3
备注

注意:在Lean中,自然数的减法如果结果为负数,会返回 0。例如,2 - 3 的结果是 0

整数类型 (Int)

Int 是Lean中表示整数的类型。与 Nat 不同,Int 可以表示负数。以下是一个简单的例子:

lean
def myInteger : Int := -7

整数的运算

Lean同样支持对整数进行基本的算术运算:

lean
def sum : Int := 2 + (-3)
def difference : Int := 5 - 10
def product : Int := (-4) * 3

布尔类型 (Bool)

Bool 是Lean中表示布尔值的类型,它只有两个可能的值:truefalse。以下是一个简单的例子:

lean
def isTrue : Bool := true
def isFalse : Bool := false

布尔运算

Lean支持常见的布尔运算,如逻辑与 (&&)、逻辑或 (||) 和逻辑非 (!):

lean
def andResult : Bool := true && false
def orResult : Bool := true || false
def notResult : Bool := !true

字符串类型 (String)

String 是Lean中表示字符串的类型。字符串是由字符组成的序列。以下是一个简单的例子:

lean
def myString : String := "Hello, Lean!"

字符串操作

Lean支持一些基本的字符串操作,例如字符串连接:

lean
def combinedString : String := "Hello, " ++ "Lean!"

单元类型 (Unit)

Unit 是Lean中表示“无值”的类型。它只有一个值,即 ()Unit 通常用于表示没有返回值的函数。以下是一个简单的例子:

lean
def doNothing : Unit := ()

实际应用场景

自然数的递归

在Lean中,自然数常用于递归函数的定义。例如,计算阶乘的函数:

lean
def factorial : Nat → Nat
| 0 => 1
| n + 1 => (n + 1) * factorial n

在这个例子中,factorial 函数通过递归调用自身来计算自然数的阶乘。

布尔值的条件判断

布尔值常用于条件判断。例如,判断一个数是否为偶数:

lean
def isEven : Nat → Bool
| 0 => true
| 1 => false
| n + 2 => isEven n

在这个例子中,isEven 函数通过递归调用自身来判断一个自然数是否为偶数。

总结

Lean的基本类型是构建更复杂类型和程序的基础。通过本文,你已经了解了 NatIntBoolStringUnit 这些基本类型的定义、用法和实际应用场景。掌握这些基本类型是学习Lean的重要一步。

附加资源与练习

  • 练习1:编写一个Lean函数,计算两个自然数的最大公约数(GCD)。
  • 练习2:编写一个Lean函数,判断一个字符串是否是回文。
  • 附加资源:阅读Lean官方文档中关于类型系统的部分,深入了解Lean的类型系统。

通过不断练习和探索,你将能够更深入地理解Lean的类型系统,并编写出更复杂的程序。