如何证明Coq中的归纳步骤?

时间:2018-09-17 10:32:13

标签: coq induction

这里是Coq的初学者,我最近独自完成了“ Logical Foundations ”的前7章。

我正在尝试通过Coq的归纳法创建证明 ∀ n>= 3, 2n+1 < 2^n

我从destruct开始删除错误的假设,直到达到 n = 3 。 然后,我在 n 上进行归纳,对于 n = 3 来说是微不足道的,但是,我如何证明归纳步骤?

我可以看到目标成立。我可以通过使用destruct进行案例分析来证明这一点,但是还不能以一般形式显示出来。

The functions I'm using are from "Logical Foundations" and can be seen here

到目前为止我的证明

(* n>=3, 2n+1 < 2^n *)
Theorem two_n_plus_one_leq_three_lt_wo_pow_n : forall n:nat,
    (blt_nat (two_n_plus_one n) (exp 2 n)) = true
       -> (bge_nat n 3) = true.   
Proof.
  intros n.
  destruct n.
  (* n = 0 *)
  compute.
  intros H.
  inversion H.

  destruct n.
  (* n = 1 *)
  compute.
  intros H.
  inversion H.  

  destruct n.
  (* n = 2 *)
  compute.
  intros H.
  inversion H.

  induction n as [ | k IHk].
  (* n = 3 *)
  - compute.
    reflexivity.
  - rewrite <- IHk.
    (* Inductive step... *)

2 个答案:

答案 0 :(得分:1)

好吧,因为这是家庭作业,所以我不能为您提供很多帮助。让我写下您在math-comp中构成的引理,该引理已经允许使用理智的符号:

Theorem two_n_plus_one_leq_three_lt_wo_pow_n n :
  2*n.+1 < 2^n -> 3 <= n.

答案 1 :(得分:1)

缺少的重要部分是使归纳假设变得笼统。 我能够使用this.fb.login(['public_profile', 'user_friends', 'email']) .then((retorno: FacebookLoginResponse) => { const facebookCredential = firebase.auth.FacebookAuthProvider.credential(retorno.authResponse.accessToken); firebase.auth().signInAndRetrieveDataWithCredential(facebookCredential) .then(credential => { this.resultado_facebook = credential.user; console.log(this.resultado_facebook); console.log('UID = ', this.resultado_facebook.uid); }) }) 完成证明。

所以证明看起来像这样:

generalize dependent k.