AlphaGeometry DSL 教程:Google 几何构造语言、defs.txt 与 Predicate 详解

6 阅读1分钟

本文仅讨论 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 个区块:

  1. a b c = triangle; 初始前提与自由对象

  2. h = on_tline b a c, on_tline c a b 基于已知对象执行构造

  3. ? 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 表示由点 ab 定义的直线

  • 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 依赖于输入 ab

这部分通常用于构造依赖图或变量作用域管理。

3. 输入合法性条件

a b = diff a b

表示 ab 必须是不同点。

这层用于阻止退化构造,不直接生成证明关系。

4. 几何约束

x : coll x a b, cong x a x b

表示 action 完成后必须成立的 predicate:

  • coll x a b,即 xab 共线

  • 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

各阶段职责如下:

  1. 解析问题文本,识别前提、构造、目标

  2. 查找 defs.txt 中对应 action 定义

  3. 展开变量依赖、输入条件、几何约束

  4. 把约束写入几何关系图

  5. 依据 rules.txt 触发新的 predicate

  6. 对目标 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 排版