将 "forall" 假设与连词分解成组件?

Break "forall" hypothesis with conjunctions up into components?

我有以下假设:

 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 之类的东西。

您首先需要专门化假设才能破坏它。

如果您已经知道要将此假设应用到哪些变量(假设您的环境中已经引入了 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)
*)