跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Lean有理数
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Lean有理数}} == 简介 == '''有理数'''在数学中定义为可以表示为两个整数之比的数,即形如<math>\frac{a}{b}</math>(其中<math>b \neq 0</math>)的数。在Lean定理证明器中,有理数作为基础数学对象被实现,并支持完整的算术运算和证明功能。本章将详细介绍Lean中有理数的定义、操作及实际应用。 == Lean中的有理数表示 == 在Lean中,有理数类型为<code>ℚ</code>(可通过<code>\Q</code>输入),其底层实现基于分子和分母的规范化存储。以下是一个简单的定义示例: <syntaxhighlight lang="lean"> import data.rat.basic -- 定义有理数 def q1 : ℚ := 3 / 4 -- 正有理数 def q2 : ℚ := -2 / 5 -- 负有理数 </syntaxhighlight> === 规范化特性 === Lean会自动将有理数化简为最简形式,并保证分母为正。例如: <syntaxhighlight lang="lean"> #eval (6 / 8 : ℚ) -- 输出: 3/4 #eval (-4 / -10 : ℚ) -- 输出: 2/5 </syntaxhighlight> == 基本运算 == Lean支持有理数的标准算术运算: <syntaxhighlight lang="lean"> #eval (1/2 + 1/3 : ℚ) -- 输出: 5/6 #eval (3/4 * 2/3 : ℚ) -- 输出: 1/2 #eval (5/6 - 1/6 : ℚ) -- 输出: 2/3 #eval (3/4 / 2/3 : ℚ) -- 输出: 9/8 </syntaxhighlight> == 比较操作 == 有理数可通过<code>==</code>, <code><</code>, <code>></code>等运算符比较: <syntaxhighlight lang="lean"> #eval (1/2 < 2/3 : bool) -- 输出: tt (true) #eval (3/4 == 6/8 : bool) -- 输出: tt (true) </syntaxhighlight> == 实际案例:分数计算器 == 以下是一个用Lean实现简单分数计算的例子: <syntaxhighlight lang="lean"> import data.rat.basic def add_fractions (a b : ℚ) : ℚ := a + b -- 计算1/2 + 1/4 #eval add_fractions (1/2) (1/4) -- 输出: 3/4 </syntaxhighlight> == 数学证明中的应用 == 有理数在数学证明中常用于比例关系的推导。例如证明加法交换律: <syntaxhighlight lang="lean"> theorem rat_add_comm (a b : ℚ) : a + b = b + a := begin rw add_comm, -- 使用内置的加法交换律 end </syntaxhighlight> == 高级主题:有理数与其他类型的转换 == === 与整数的转换 === <syntaxhighlight lang="lean"> #check rat.cast_int -- ℤ → ℚ的转换函数 #eval (rat.cast_int 3 : ℚ) -- 输出: 3/1 </syntaxhighlight> === 与自然数的转换 === <syntaxhighlight lang="lean"> #check rat.cast_nat -- ℕ → ℚ的转换函数 #eval (rat.cast_nat 5 : ℚ) -- 输出: 5/1 </syntaxhighlight> == 性能考虑 == 有理数运算会产生约分操作,在性能敏感场景需注意: * 分子分母的值域(避免大整数运算) * 频繁运算的累积开销 == 常见问题 == === 为什么<code>1/2</code>在Lean中不是有理数? === 在Lean中,未指定类型时<code>1/2</code>会默认为自然数除法(结果为0)。必须显式声明类型: <syntaxhighlight lang="lean"> #eval (1/2 : ℚ) -- 正确输出: 1/2 </syntaxhighlight> === 如何提取有理数的分子和分母? === 使用<code>rat.num</code>和<code>rat.denom</code>: <syntaxhighlight lang="lean"> #eval rat.num (3/4) -- 输出: 3 #eval rat.denom (3/4) -- 输出: 4 </syntaxhighlight> == 总结 == Lean的有理数实现提供了完整的数学运算和证明支持,其特性包括: * 自动规范化存储 * 完备的算术运算体系 * 与其他数字类型的无缝转换 * 数学证明友好的表示形式 通过合理使用有理数,可以构建精确的数学模型和算法实现。 [[Category:计算机科学]] [[Category:Lean]] [[Category:Lean数学基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)