Coq 自然数对称性的证明

Coq 自然数对称性的证明,coq,Coq,我是coq的初学者。我想证明自然数上布尔等式的对称性。我已经应用了归纳和析构函数命令,但它不起作用。请指导我证明这个定理 Fixpoint beqnat(n m : nat): bool:= match n with |0=> match m with |0=> true |S m' => false end |S n'=> match m with |0=>false |S

我是coq的初学者。我想证明自然数上布尔等式的对称性。我已经应用了归纳和析构函数命令,但它不起作用。请指导我证明这个定理

Fixpoint  beqnat(n m : nat): bool:= 
  match n with 
  |0=> match m with
      |0=> true
      |S m' => false
      end 
  |S n'=> match m with
         |0=>false
         |S m'=> beqnat n' m'
         end  
  end. 

  Theorem beq sys:  
    forall(n m:nat), 
      beqnat n m = beqnat m n.

证明之后是对
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.
要了解正在发生的事情:

  • 执行
    归纳法n
    ,它给出了
    n=0
    n=sn'
    的子目标
  • 在每个子目标上执行
    siml
    ,以查看第一个
    匹配/与
    如何减少
  • 现在,您需要对
    m
    执行一些操作,以减少第二个
    匹配/with
    。归纳是不必要的,因为您的
    beqnat
    n
    上是结构递归的(键入
    Print beqnat
    并查找
    {struct n}
    以确认),而不是
    m
    。所以,
    destructm
    就足够了。再次使用
    siml
    查看原因
  • 第二个子目标中对
    beqnat
    的递归调用需要归纳假设

  • 证明之后是对
    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.
    
    要了解正在发生的事情:

  • 执行
    归纳法n
    ,它给出了
    n=0
    n=sn'
    的子目标
  • 在每个子目标上执行
    siml
    ,以查看第一个
    匹配/与
    如何减少
  • 现在,您需要对
    m
    执行一些操作,以减少第二个
    匹配/with
    。归纳是不必要的,因为您的
    beqnat
    n
    上是结构递归的(键入
    Print beqnat
    并查找
    {struct n}
    以确认),而不是
    m
    。所以,
    destructm
    就足够了。再次使用
    siml
    查看原因
  • 第二个子目标中对
    beqnat
    的递归调用需要归纳假设

  • 如果你能在上链接到一个可执行的例子,这会有帮助。使用标准库可行吗?或者你想证明这个事实作为练习吗?我想证明它作为练习,因为我已经学习了关于归纳和析构函数命令的一章,这是那一章的练习题。因此,我认为应该用同样的策略来证明。然后,请你添加到目前为止你所掌握的证据并解释你在哪里挣扎,来更新这个问题,好吗?这样我们可以更容易地帮助你。定理beqnatrefl:forall n:,beq_n=true。证明。介绍。诱导n[n IH]。简单。自反性。简单。自反性。Qed。定理等式beq-nat:对于所有n1-n2,n1n=n2->beq-nat n1-n2=true。证明。介绍n1 n2 H.重写H.重写beqnatrefl。自反性。Qed。如果你能链接到一个可执行的示例,这会很有帮助。使用标准库可行吗?或者你想证明这个事实作为练习吗?我想证明它作为练习,因为我已经学习了关于归纳和析构函数命令的一章,这是那一章的练习题。因此,我认为应该用同样的策略来证明。然后,请你添加到目前为止你所掌握的证据并解释你在哪里挣扎,来更新这个问题,好吗?这样我们可以更容易地帮助你。定理beqnatrefl:forall n:,beq_n=true。证明。介绍。诱导n[n IH]。简单。自反性。简单。自反性。Qed。定理等式beq-nat:对于所有n1-n2,n1n=n2->beq-nat n1-n2=true。证明。介绍n1 n2 H.重写H.重写beqnatrefl。自反性。Qed。