LSR 010 - 虚数单位与复数规范

基本信息

  • LSR 编号 010

  • 标题 虚数单位与复数规范

  • 作者 Ziyang-Bai

  • 状态 草案

  • 类型 标准规范

  • 创建日期 07-28-2026

  • 归属项目 编译器、标准库、CAS

摘要

定义虚数单位 i、复数字面量、复数类型提升和 Expr 中复数的表示边界。

技术规范

1. 设计目标

  • 明确 3 + 4i 的语法含义

  • 避免虚数单位与普通变量或 sym 声明冲突

  • 保持 Complex (C) Expr 的数值塔规则

  • 为 LMCAS 提供稳定的复数表达接口

2. 虚数单位

i 是预定义虚数单位,满足:

i^2 == -1

规则:

  • i 是预定义常量,不是普通变量

  • 用户不得在同一作用域重新绑定 i

  • sym i 非法,必须报错 ImaginaryUnitReserved

  • 标准库可同时导出 std.math.istd.math.I,二者表示同一虚数单位

3. 复数字面量

虚数字面量由数值字面量紧跟后缀 i 构成,中间不得有空白。

let a = 4i
let b = 3 + 4i
let c = -2.5i
let d = 1/2 + 3/4i

规则:

  • 4i 等价于 4 * i

  • 3 + 4i 等价于复数 complex(3, 4)

  • 3 + 4 * i 同样合法,但按普通乘法解析

  • 4 i 非法,必须报错 ComplexLiteralSpacing

4. 复数类型

complex 表示复数值,逻辑结构为实部与虚部:

complex = real_part + imaginary_part * i

规则:

  • 实部和虚部均为数值类型

  • 数值塔中 R C

  • 实数与复数二元运算时,实数自动提升为复数

  • 复数参与 Expr 运算时整体提升为 Expr

5. 与 Expr 的关系

当复数进入 Expr,它必须作为明确的复数表达式保留,不得拆成普通变量 i

sym x
let z = x + 2i       # Expr

规则:

  • iExpr 中仍表示虚数单位

  • CAS 后端应提供虚数单位节点或复数节点

  • i 不参与普通符号变量绑定

  • Expr 降级为 complex 必须显式求值,且表达式中不得有未绑定符号

6. 相等性

结构相等 == 与数学等价 === 分别遵循 LSR-000 和 LSR-007。

(i * i) === -1       # true,若当前等价 profile 支持复数基础规则

规则:

  • i^2 -> -1 属于复数基础规则

  • 复数结构相等比较实部与虚部

  • Expr 中复数等价判定仍受预算限制

7. 标准库要求

std.math 必须暴露:

名称

类型

说明

i

complex

虚数单位

I

complex

i 的别名

complex

func complex(re num, im num) -> complex

构造复数

real

func real(z complex) -> num

实部

imag

func imag(z complex) -> num

虚部

conj

func conj(z complex) -> complex

共轭

abs

func abs(z complex) -> num

模长

8. 错误模型

  • ImaginaryUnitReserved: 尝试绑定或声明 i

  • ComplexLiteralSpacing: 虚数字面量后缀前存在非法空白

  • ComplexTypeMismatch: 复数操作收到不兼容类型

  • ComplexEvalUnboundSymbol: Expr 降级为 complex 时存在未绑定符号

9. 与其他 LSR 的关系

  • LSR-000:声明 complex 类型、数值塔和 3 + 4i 示例

  • LSR-004:std.math 应暴露复数相关常量与函数

  • LSR-007:Expr 上复数等价判定由有限规则和预算约束

  • LSR-009:复数结果可出现在 set<complex>set<Expr>