Lean 策略索引
标有 * 的策略是本书专用的策略,因此你无法通过搜索引擎、网络论坛等渠道获得关于它们的帮助。请重读书中指出的相关部分,或询问你的教师。
* addarith(首次使用:第 1.5 节)
试图通过把项从等式或不等式的一边移到另一边来证明该等式或不等式。
apply(首次使用:第 2.2 节;用于 \(\forall\) 和 \(\to\) 假设:第 4.1 节)
调用指定的引理或假设来改变目标。
by_cases(首次使用:第 5.2 节)
按给定命题为真或为假进行分类讨论。
* cancel(首次使用:第 2.1 节)
消去等式或不等式两边的公因子,消去两边共同出现的幂,等等。
constructor(首次使用:第 2.4 节;用于 ↔ 目标:第 4.2 节)
把一个“且”目标(\(\land\))拆成分别对应左右两部分的子目标。
contradiction(首次使用:第 4.4 节)
若当前已有两个相互矛盾的假设,则结束证明。
dsimp(首次使用:第 3.1 节)
展开一个定义。它通常用于证明探索阶段,而不是用于最终版本;它有助于更仔细地查看目标或假设,但在多数情况下,删除一行 dsimp 后证明仍能成立。
* extra(首次使用:第 1.4 节;用于同余:第 3.4 节)
用于不等式或同余等其他关系的比较策略:它可以检查两边相差一个正量的不等式、两边相差 3 的倍数的模 3 同余,等等。
interval_cases(首次使用:第 4.1 节)
给定一个自然数变量或整数变量 \(n\),并且已有关于 \(n\) 的数值上下界时,对 \(n\) 的每一种可能数值分别产生一个情形。
intro(首次使用:第 4.1 节;用于 \(\lnot\) 目标:第 4.5 节)
从目标中引入一个全称量化变量(\(\forall\))或一个蕴含(\(\to\))的前件;或者在证明否定(\(\lnot\))目标时,为了导出矛盾而假设其正向版本。
left(首次使用:第 2.3 节)
选择“或”目标(\(\lor\))的左侧选项。
have(首次使用:第 2.1 节;配合引理使用:第 2.3 节;引入新目标:第 2.4 节)
记录一个事实(随后给出该事实的证明),然后这个事实会作为额外假设可供使用。
mod_cases(首次使用:第 3.4 节)
按照变量模指定数的余数来引入分类讨论。
* numbers(首次使用:第 1.4 节;配合 at 处理矛盾:第 4.4 节)
证明数值事实,例如 \(3\cdot 12 < 13 + 25\) 或 \(3\cdot 5+1=4\cdot 4\)。
obtain(首次用于 \(\lor\):第 2.3 节;用于 \(\land\):第 2.4 节;用于 \(\exists\):第 2.5 节)
拆解形如“或”(\(\lor\))、“且”(\(\land\))或“存在”(\(\exists\))的假设。
push_neg(首次使用:第 5.3 节)
把一个假设或目标转换为逻辑等价的形式,其中否定号被尽可能向内推进。
rel(首次使用:第 1.4 节;用于同余:第 3.4 节;用于逻辑等价:第 5.3 节)
一个用于不等式或同余等其他关系的“类似代换”的策略:它会在目标中寻找某个指定不等式(或同余等)事实的左边,并在这种替换“显然”给出一个有效的不等式(或模算术等)推理时,把它替换为该事实的右边。可与 rw 比较。
right(首次使用:第 2.3 节)
选择“或”目标(\(\lor\))的右侧选项。
ring(首次使用:第 1.2 节)
解决代数等式目标,例如 \((x + y) ^ 2 = x ^ 2 + 2xy + y ^ 2\),前提是证明实质上只是“展开两边并重新整理”。
rw(首次使用:第 1.2 节;用于 ↔ 假设或引理:第 4.2 节)
代换:在目标中寻找某个指定等式事实的左边,并把它替换为该事实的右边。
对于 ↔ 假设或引理,把指定 ↔ 事实的左边替换为其右边。
use(首次使用:第 2.5 节)
为存在性目标(\(\exists\))提供一个见证。