【函数语言程序设计】Hw4 - Coq2

1.定义函数

定义函数gtb,使得gtb n m 返回布尔值 true当且仅当 n > m。至少用两种方法定义这个函数。

(请用 【Example】 语句测试 n>m, n=m, n<m 三种情况下你定义的gtb函数(含两种方式)的输出)

方法一 根据先前定义的函数来定义

Coq代码

Fixpoint leb (n m : nat) : bool :=
  match n with
  | O => true
  | S n' =>
      match m with
      | O => false
      | S m' => leb n' m'
      end
  end.
Definition gtb(n m :nat):bool :=
 negb (leb n m).

Example test_gtb1: gtb 4 2 = true.
Proof. simpl. reflexivity. Qed.
Example test_gtb2: gtb 2 2 = false.
Proof. simpl. reflexivity. Qed.
Example test_gtb3: gtb 2 4 = false.
Proof. simpl. reflexivity. Qed.

Coq运行截图

图片说明

方法二:设置新的 Fixpoint

Coq代码

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

Example test_gtb1: gtb 4 2 = true.
Proof. simpl. reflexivity. Qed.
Example test_gtb2: gtb 2 2 = false.
Proof. simpl. reflexivity. Qed.
Example test_gtb3: gtb 2 4 = false.
Proof. simpl. reflexivity. Qed.

Coq运行截图

图片说明

2.证明性质

证明下面的性质。

Theorem gtb_test : forall n : nat, gtb (n+1) 0 = true.

Coq代码

Theorem gtb_test : forall n : nat, gtb (n+1) 0 = true.
Proof.
intros n.
destruct n as [| n'] eqn:E.
- reflexivity.
- reflexivity.

Coq运行截图

alt

3.定义函数

(请用【Compute】语句使用你定义的F函数 分别计算出第【1、5、10】个斐波那契数以表明定义的正确性。 )

Coq代码

Fixpoint F(n : nat) : nat :=
  match n with
  | O => O
  | S n' => 
    match (S n') with
    |O => O
    |S O => S O
    |S n''=> plus (F(n'')) (F(pred n''))
    end
  end.

Coq运行截图

图片说明

【学习】函数语言程序设计 文章被收录于专栏

函数语言程序设计 Coq章节 Ch1 Basics【COQ中的函数编程】 Ch2 Induction【归纳法证明】 Ch3 Lists【使用结构化数据】 Ch4 Poly【多态性与高阶函数】 Ch5 Tactics【更基本的战术】 Ch6 Logic【COQ中的逻辑】 Ch7 IndProp【归纳定义命题】 Ch8 Maps【全图和局部图】 Ch9 Rel【关系的性质】

全部评论

相关推荐

哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务