[英]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.