[返回主页面](https://hackmd.io/@LVcpSNoxQAim3tB5Xaj-gg/H1IpnzxAU) # 形式证明方案设计 [题目1证明代码设计](/pfpNy5K5QAuCneUP-jjSTQ) [历史垃圾](/4JDgiLJOSFqA39oZLD_O0g) ### 设计方案说明 [更详细的设计方案](/v4TB7vIzQnqdp1ygPO4XXg) 形式逻辑推导的过程和不等式、等式的推导过程一样,是可以被严格格式化的。 #### claim 建议词汇 structure: detail: expression: wehave:高票 #### so 建议词汇 latest #### 有限元素求和设计 在表达式形势下,我们会使用 $a+b+c$ 的格式去表达,然而,如果需要对每一项分别去进行推理、验算,我们将把它写成如下形式 ``` claim: a + b + c ``` 在这种写法中,看不到任何这么做的必要性。我们的目的不是为了表达$a+b+c$本身,而是为了表达一个动态推导的过程。例如,已知 $a=d$, $b=e$, $c=f$, 我们如何知道 $a+b+c = d+e+f$ 呢? 我们可以写成如下形式 ``` claim: a = d + b = e + c = f ``` ``` wehave: forsome c. c is an integer: c = a and forsome d. d is an integer: d = b these implies forsome c,d. c,d are integers: c = a and d = b ``` 这就代表 $a+b+c$ 和 $d+e+f$ 两个表达式中,我们分别有 $a=d$, $b=e$ 和 $c=f$。 同样的例子也可以用于逻辑表达中,比如 ``` claim: 我是个大呆瓜 implies 我看起来憨憨的 and 我没有女朋友 implies 我很自由 ``` 其实这个句子作为一个整体,从 我是个没有女朋友的大呆瓜 推出了 我是一个看起来憨憨的自由人。因此,claim 的设计是一个起头,其主要作用是用于<span style="color:red">局部演算和推导</span> #### 无限元素求和设计(量词) 虽然claim 可以把一个表达式拆成有限的部分并进行局部推导,但很多情况下我们需要对无穷个情形进行局部演算和推导,这时,我们要借助量词来帮我们实现 首先看计算上的例子。如何说明 $$ \sum_{n\in\mathbb N}\frac1{n^2}>\sum_{n\in\mathbb N}\frac1{n^3} $$ ``` sumover n. n is integer: \frac1{n^2} > \frac1{n^3} ``` 其实上面的这样的表达式可能电脑还是看不懂,因此如果需要告诉电脑 $\frac1{n^2}>\frac1{n^3}$ 是因为 $n^3>n^2$,可以这么写 ``` sumover n. n is integer: claim: 1 divide n^2 < n^3 ``` 上面便是局部推导的例子。我们再回到逻辑: ``` forall x. x is a girl: x is not my girlfriend ``` 这句话的意思是 任何女生都不是我的女朋友 以下是一个逻辑上局部推导的例子 ``` forall x. x is a girl: x is not my girlfriend implies I am not a boyfriend of x ``` ## 形式推导 ``` True implies 我是个大呆瓜 ``` 这句话的意思表示 “我是个大呆瓜” 是个永远成立的命题。一般的 True implies p 是代表 p 成立的意思。逻辑推导有很多种例子,以下列举一些常见的 ## 参数消失处理原则 当一个量词声明发生后,子句没有用到该量词声明的变量,这时我们称之为 参数消失 情形。面对参数消失情形,数学上有很多处理 $$ \sum_{x\in A}n = n\# A $$ $$ \prod_{x\in A}n = n^{\#A} $$ $$ \text{forall} \quad x, p \iff p $$ $$ \text{forsome} \quad x, p \iff p $$ 这时,我们用so 关键字来处理此事,比如 ``` sumover x. x in A: y = so // an obvious matter ``` 等价于 ``` y times #A ``` 又如 ``` forall x. x in A: p implies so ``` 等价于 ``` p ``` #### 分类讨论 这是运用 True => p or not p 来完成的,比如证明一个平方数必须有4k+1 或 4k 形式 ``` forany n. n is an integer: True implies claim: n is an odd number implies forsome m. m is an integer: n = 2m + 1 implies claim: n = 2m+1 implies n^2 = 4m(m+1)+1 and True implies forsome k. k is an integer: k = 4m(m+1) implies forsome k. k is an integer: n^2 = 4k+1 implies so//用于将implies 的最后一个命题直接传递到此处 or n is an even number implies forsome m. m is an integer: claim: n = 2m implies n^2 = 4m^2 and True implies forsome k. k is an integer: k=4m^2 implies for some k. k is an integer: n^2 = 4k implies so implies for some k. k is an integer: n^2 = 4k+1 or n^2 = 4k ``` #### 反证法 反证法也是一样。比如,设3个球放进2个抽屉,证明必然有一个抽屉有至少两个球 ``` True implies claim: True implies claim: 所有抽屉中只有一个球 implies 一共最多两个球 implies False or 必然有一个抽屉有至少两个球 implies so ``` $$ True \implies (\text{所有抽屉只有一球} or \text{至少有一个抽屉有俩球}) $$ 又因为 所有抽屉只有一球 => False 因此 $$ True\implies (False \text{ or } \text{至少有一个抽屉有俩球}) $$ 这个表达式可以直接化简成 至少有一个抽屉有俩球 ### 哈 (True => p or q) and (p=>r), then (True => r or q) (True => (False or p)), then p False or p = p False or True = True Flase or False = False False or p = p