---
# System prepended metadata

title: 形式证明方案设计

---

[返回主页面](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