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

基本信息

  • LSR 编号 010

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

  • 作者 Ziyang-Bai

  • 状态 草案

  • 类型 标准规范

  • 创建日期 07-28-2026

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

摘要

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

技术规范

1. 设计目标

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

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

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

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

2. 虚数单位

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

I^2 == -1

规则:

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

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

  • sym I 非法,必须报错 ImaginaryUnitReserved

  • 小写 i 是普通标识符,可以作为变量名或通过 sym i 声明为符号

  • 标准库只导出 std.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

规则:

  • I 在 Expr 中仍表示虚数单位

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

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

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

6. 相等性

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

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

规则:

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

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

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

7. 标准库要求

std.math 必须暴露;复数多结果场景按集合返回约定处理 [4]:

名称

类型

说明

I

complex

虚数单位

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. 引用