我有以下假设:
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 H
或destruct H
并不起作用。我该怎么办?
我希望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)
引入m
和n
。
答案 0 :(得分:4)
首先,您需要将假设专门化,以便能够破坏它。
如果您已经知道要应用此假设的变量(假设您已在您的环境中引入n
和m
),则可以执行以下操作:
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)
*)