0

それで、「計算論理入門」スクリプトを使って Coq を学ぼうとしていて、練習問題が与えられました。「forall ab, a + S b = S (a + b)」を証明することです。「nat_ind」の定義が与えられます。

  (p : nat -> Prop)
  (basis : p 0)
  (step : forall n, p n -> p (S n)) :
    forall n, p n := fix f n :=
      match n return p n with
      | 0 => basis
      | S n => step n (f n)
      end.

私はこれを試み、この方法を使用して問題を解決しましたが、うまくいきました:

intros a b. revert a.
  apply (nat_ind(fun a => a + S b = S (a+b))); simpl.
  -reflexivity.
  -intros. f_equal. exact H.

問題は、同じ問題を解決しなければならないということですが、帰納補題をすぐに適用する必要があり、それを行う前にイントロや帰納戦術を使用することはできません。どうすればいいですか?

最初の試行から最初の行を削除しようとしましたが、「現在の環境で参照 b が見つかりませんでした」というエラーがスローされます。

更新:私はどこかに行きました。これは私の現在のコードです:

Goal forall a b, a + S b = S (a + b).
Proof. 
  apply nat_ind.
  - intros a b. revert a. 
    apply (nat_ind (fun a => a + S b = S (a + b)));simpl.
      + reflexivity.
      + intros.  f_equal. exact H.
  -intros. revert a. apply (nat_ind (fun a => a + S b = S (a + b))); simpl.
    + reflexivity.
    + intros. f_equal. exact H0.

最後のサブゴールは単なる nat であり、どうすればよいかまったくわかりません。

4

1 に答える 1