簡體   English   中英

在 coq 中規范化二進制數的冪等性

[英]Idempotency of normalizing a binary number in coq

我想證明采用二進制數的函數normalize的冪等性(如下定義,請注意B0 (B1 Z) == 2 ,以便從右到左讀取它們)並通過刪除前導0對其進行規范化。

Inductive bin : Type :=
  | Z
  | B0 (n : bin)
  | B1 (n : bin).

Fixpoint normalize (m: bin) : bin :=
  match m with
  | Z => Z
  | B0 Z => Z
  | B0 m' =>
    match (normalize m') with
    | Z => Z
    | m'' => B0 m''
    end
  | B1 m' => B1 (normalize m')
  end.
Theorem normalize_idemp :
  forall b: bin, normalize b = normalize (normalize b).
Proof.
induction b as [| b' IHb' | c' IHc'].
- simpl. reflexivity.
- simpl. ???
Qed.

但是我被困在我標記的證明上??? . 我嘗試破壞b' ,但這無濟於事,因為我只是進入了更多的match模式。 如何完成證明?

銷毀b確實有效:

Theorem normalize_idemp :
  forall b: bin, normalize b = normalize (normalize b).
Proof.
  induction b ; cbn.
  - easy.
  - destruct b.
    + easy.
    + destruct (normalize (B0 b)).
      * easy.
      * cbn in *.
        now rewrite <- IHb.
      * cbn. now rewrite IHb.
    + cbn in *.
      now rewrite IHb.
  - now rewrite <- IHb.
Qed.

但是請注意,您B0 Z的情況這一事實使得不必要地涉及歸納證明。 相反,您可以將定義簡化為以下內容(如果您想說服自己,請嘗試證明兩者是等效的):

Fixpoint normalize' (m: bin) : bin :=
  match m with
  | Z => Z
  | B0 m' =>
    match (normalize' m') with
    | Z => Z
    | m'' => B0 m''
    end
  | B1 m' => B1 (normalize' m')
  end.

然后歸納證明就更直接了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM