本文仅讨论 AlphaGeometry DSL 本身,不讨论模型训练、搜索策略或论文结果。
目标是把这套 DSL 当作一份面向研发的协议说明书来拆开,回答以下问题:
-
问题输入如何编码
-
defs.txt中 action 如何定义 -
几何关系如何映射为 predicate
-
数值构造与符号推理如何衔接
如果要复现 AlphaGeometry、编写几何数据生成器,或为自定义 solver 设计兼容层,理解 DSL 协议是基础前置工作。
一、DSL 的角色定义
AlphaGeometry DSL 是一套面向几何构造与关系表达的领域语言。它主要承担 3 个职责:
-
表达初始几何前提
-
表达可执行的构造动作
-
表达待验证的几何目标
其输出不是最终证明文本,而是可供推理引擎消费的几何关系集合。
从实现角度看,DSL 更接近一层中间表示:
-
上游连接题目描述或数据生成器
-
中游连接 action 定义与关系展开
-
下游连接
rules.txt与 DDAR 推理
协议核心不在“图形绘制”,而在“关系生成”。
二、问题文件结构
一个完整问题通常写成:
problem_name
premises ? goal
示例:
orthocenter
a b c = triangle;
h = on_tline b a c, on_tline c a b
? perp a h b c
可以拆成 3 个区块:
-
a b c = triangle;初始前提与自由对象 -
h = on_tline b a c, on_tline c a b基于已知对象执行构造 -
? perp a h b c目标 predicate
这段 DSL 的含义不是自然语言题解,而是一段几何程序:
Premises
-> constructions
-> predicate graph
-> goal checking
在解析后,系统通常需要产出:
-
初始对象表
-
action 调用序列
-
predicate 初始集合
-
待检查目标
三、基本语法约定
DSL 的核心表达形式是:
output = action(parameters)
示例:
h = on_tline b a c, on_tline c a b
表示点 h 同时满足两个构造约束:
-
过
b作直线,垂直于ac -
过
c作直线,垂直于ab
因此 h 是两条垂线的交点。
这类表达具有两个特点:
-
输出变量统一使用点变量
-
几何对象通过点集隐式表示,而非独立对象类型
例如:
line a b
circle o a
-
line a b表示由点a、b定义的直线 -
circle o a表示圆心o、经过点a的圆
这种设计简化了解析器和关系图结构,但要求 predicate 系统足够强,能够覆盖线、圆、角的高层语义。
四、defs.txt 中 action 的定义结构
defs.txt 是 action 注册表。每个 action 通常由 5 个部分组成:
action_name outputs inputs
variable dependency
input conditions
geometric constraints
numerical constructions
示例:
midpoint x a b
x : a b
a b = diff a b
x : coll x a b, cong x a x b
midp a b
各部分作用如下。
1. action 签名
midpoint x a b
表示:
-
action 名称为
midpoint -
输出点为
x -
输入点为
a b
2. 变量依赖
x : a b
表示输出变量 x 依赖于输入 a、b。
这部分通常用于构造依赖图或变量作用域管理。
3. 输入合法性条件
a b = diff a b
表示 a 和 b 必须是不同点。
这层用于阻止退化构造,不直接生成证明关系。
4. 几何约束
x : coll x a b, cong x a x b
表示 action 完成后必须成立的 predicate:
-
coll x a b,即x与a、b共线 -
cong x a x b,即XA = XB
这部分是 action 的符号语义定义,也是后续推理系统消费的主要输入。
5. 数值构造接口
midp a b
表示底层数值引擎应调用中点构造。
数值层的典型用途包括:
-
生成具体坐标实例
-
检查构造是否退化
-
为 predicate 提供数值真值校验
五、predicate 系统
predicate 是 AlphaGeometry 推理系统的核心输入格式。
常见核心谓词包括:
predicate
含义
coll A B C
三点共线
cong A B C D
AB = CD
perp A B C D
AB ⟂ CD
para A B C D
AB ∥ CD
eqangle ...
角相等
cyclic A B C D
四点共圆
这些 predicate 会进入 rules.txt 所定义的规则系统,触发进一步推导。
典型流程如下:
construction
-> initial predicates
-> rule firing
-> new predicates
-> goal reached / not reached
因此 DSL 的核心不是动作目录本身,而是 predicate 生成能力。
一个 action 是否有价值,主要取决于:
-
能引入哪些 predicate
-
这些 predicate 是否容易触发规则链
-
是否能显著缩短目标证明路径
六、常见 action 类型
1. 基础对象
free a
triangle a b c
quadrangle a b c d
-
free生成自由点 -
triangle生成三角形的 3 个基础点 -
quadrangle生成四边形的 4 个基础点
2. 点落在线或圆上
on_line x a b
on_circle x o a
on_pline x a b c
on_tline x a b c
-
on_line对应共线约束 -
on_circle对应等半径约束 -
on_pline对应平行约束 -
on_tline对应垂直约束
3. 交点构造
intersection_ll x a b c d
intersection_lc x a o b
intersection_cc x o w a
分别表示:
-
两线交点
-
线与圆交点
-
两圆交点
4. 基本几何构造
midpoint x a b
foot x a b c
mirror x a b
-
midpoint生成中点 -
foot生成垂足 -
mirror生成对称点
这类 action 的特点是单次调用能引入多条高密度关系。
5. 三角形中心
例如:
circumcenter x a b c
incenter x a b c
excenter x a b c
centroid x y z i a b c
ninepoints x y z i a b c
这类 action 通常会一次性引入多组关系,如等距、角平分、垂直平分等。
6. 特殊多边形
例如:
square a b x y
rectangle a b c d
parallelogram a b c x
trapezoid a b c d
eq_trapezoid a b c d
这类 primitive 的特点是初始关系更强,更适合生成结构化题目或高约束训练样本。
七、示例解析
示例:
orthocenter
a b c = triangle;
h = on_tline b a c, on_tline c a b
? perp a h b c
执行过程如下。
第一步:解析前提
triangle a b c 生成基础点集与非退化条件。
第二步:执行构造
h 被定义为以下两条约束的交点:
-
过
b且垂直于ac -
过
c且垂直于ab
第三步:落成 predicate
构造动作被转成:
perp b h a c
perp c h a b
第四步:验证目标
系统检查是否能推出:
perp a h b c
如果可推出,则目标成立;否则该问题在当前构造与规则集下未被证明。
八、执行 pipeline
从问题文本到目标验证,典型 pipeline 如下:
Problem DSL
-> parse.py
-> action expansion via defs.txt
-> geometry graph
-> predicate inference via rules.txt
-> DDAR solver
各阶段职责如下:
-
解析问题文本,识别前提、构造、目标
-
查找
defs.txt中对应 action 定义 -
展开变量依赖、输入条件、几何约束
-
把约束写入几何关系图
-
依据
rules.txt触发新的 predicate -
对目标 predicate 做可达性检查
数值构图与符号推理在该流程中通常并行存在:
-
数值层负责实例化与真值检查
-
符号层负责严格推导与证明追踪
九、实现注意事项
1. action 设计应面向关系产出
一个 action 是否值得保留,应优先评估其 predicate 产出质量,而不是几何含义是否“直观”。
2. 必须显式处理退化条件
如点重合、平行线无交点、零半径圆等情况,都应在输入条件或数值层被拦截。
3. predicate 集合决定可表达上限
若系统只能表达共线、平行、垂直,复杂几何题的表示能力会迅速受限。
4. 数值层接口不应省略
如果只有符号定义而没有数值构造接口,数据生成、调试和真值校验成本会显著上升。
十、最小可实现子集建议
若需要实现兼容 AlphaGeometry 思路的最小版本,可优先支持以下 action:
-
triangle -
on_line -
on_tline -
on_pline -
intersection_ll -
midpoint -
foot
并至少支持以下 predicate:
-
coll -
perp -
para -
cong -
cyclic -
eqangle
这是一个较小但可工作的协议核心。
十一、协议本质
AlphaGeometry DSL 可以概括为:
Geometry Construction DSL
+ Predicate Interface
+ Rule-System Input Layer
它的主要价值不在于“描述图形”,而在于把几何问题压缩成一个可执行、可验证、可推理的协议层。
十二、靠谱推荐:大角几何(Dino-GSP)
如果需要一个比 AlphaGeometry DSL 更开放、面向产品与生态集成的几何表达环境,可以看我推出的 大角几何(Dino-GSP)。
它同样把几何对象表示为可执行结构,并且也定义了自己的 DSL 与约束表示层,用于支持:
-
更开放的几何构造与编辑流程
-
面向教学、内容生产与 AI 几何应用的生态接入
-
图形生成、约束验证、辅助结构构造等可编程能力
如果把 AlphaGeometry DSL 看成偏求解器和研究系统内部协议,大角几何更偏向可扩展产品层与开放生态接口。
延伸阅读
本文使用 markdown.com.cn 排版