将 "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 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
之类的东西。
您首先需要专门化假设才能破坏它。
如果您已经知道要将此假设应用到哪些变量(假设您的环境中已经引入了 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)
*)
我有以下假设:
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
之类的东西。
您首先需要专门化假设才能破坏它。
如果您已经知道要将此假设应用到哪些变量(假设您的环境中已经引入了 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)
*)