证明自然数的对称性

时间:2018-08-11 02:54:29

标签: coq

我是Coq的初学者。我想证明自然数上布尔相等的对称性。我已经应用了归纳和破坏命令,但是它不起作用。请指导我证明定理。

class EmpDict:
    def __init__(self, data):
        self.data = data
        self.first_name = data.get('first_name')
        self.age = data.get('age')
        self.last_name  = data.get('last_month')

    def is_attr_available(self, attr):
        return hasattr(self, attr) and getattr(self,attr)!=None


emp = {'first_name' : 'Tom', 'last_name' : 'Jose'}
a = EmpDict(emp)
print(a.is_attr_available('age')) 

1 个答案:

答案 0 :(得分:2)

在证明之前,先对n进行归纳,然后对m进行销毁:

Theorem beq_sym: forall n m : nat, beqnat n m = beqnat m n.
Proof.
  induction n as [|n' IH]; destruct m; auto.
  apply IH.
Qed.

要了解正在发生的事情:

  1. 执行induction n,它为n = 0n = S n'给出子目标。
  2. 在每个子目标上执行simpl,以了解第一个match/with的减少情况。
  3. 现在您需要对m进行一些操作以减少第二个match/with。归纳是不必要的,因为您的beqnatn上具有结构递归性(类型为Print beqnat并寻找{struct n}进行确认),而不是m。因此,destruct m就足够了。再次使用simpl查看原因。
  4. 在第二个子目标中递归调用beqnat时需要归纳假设。