打破" forall"结合组件的假设?

时间:2016-12-08 15:22:43

标签: coq

我有以下假设:

 H : forall m n : nat,
      f 0 n = S n /\ f (S m) 0 = f m 1 /\ f (S m) (S n) = f m (f (S m) n)

我的目标是将其分解为组件。但是,尝试intros m n in Hdestruct H并不起作用。我该怎么办?

我希望H0 : f 0 n = S nH1 : f (S m) 0 = f m 1H2 : f (S m) (S n) = f m (f (S m) n)引入mn

1 个答案:

答案 0 :(得分:4)

首先,您需要将假设专门化,以便能够破坏它。

如果您已经知道要应用此假设的变量(假设您已在您的环境中引入nm),则可以执行以下操作:

specialize (H n m).
destruct H as (H0 & H1 & H2).

或更短:

destruct (H n m) as (H0 & H1 & H2).

(这也保留了原始假设H,而第一个解决方案清除了它。)

最后,如果你还不知道你将要应用这个假设,你可以使用edestruct策略:

edestruct H as (H0 & H1 & H2).
(* And you get:
H0 : f 0 ?n = S ?n
H1 : f (S ?m) 0 = f ?m 1
H2 : f (S ?m) (S ?n) = f ?m (f (S ?m) ?n)
*)