### coq

#### Break “forall” hypothesis with conjunctions up into components?

I've the following hypotheses: 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) My goal is to break it up into it components. However, trying intros m n in H or destruct H doesn't work. How do I proceed? I would like something like H0 : f 0 n = S n, H1 : f (S m) 0 = f m 1 and H2 : f (S m) (S n) = f m (f (S m) n) with m and n introduced.

You first need to specialize the hypothesis to be able to destruct it. If you already know to which variables you want to apply this hypothesis (let's say you have n and m already introduced in your environment), you could do the following: specialize (H n m). destruct H as (H0 & H1 & H2). or shorter: destruct (H n m) as (H0 & H1 & H2). (which also keeps the original hypothesis H, while the first solution clears it). Finally, if you don't know yet to what you are going to apply this hypothesis, you can use the edestruct tactic: 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) *)

### Related Links

Proof with false hypothesis in Isabelle/HOL Isar

Is there a convention for the order of applying ssreflect tactic/taticals?

How to systematically normalize inequalities to < (lt) and <= (le) in Coq?

Inductive subset of an inductive set in Coq

How to find the source file for an identifier in Coq

Coq “Unknown interpretation for notation” error

How to switch the current goal in Coq?

Reasoning about lists in Coq

what does the curly braces {} do in ssreflect rewrite

How to define unspecified constants in Coq

How to automatically prove simple equality of real numbers in Coq?

How to simplify real number terms in Coq?

How can I prove that (eqb x y) means x = y

What's the difference between `Reals` and `Coq.Reals.*` in Coq?

when is the `:` (colon) in necessary in ssreflect/Coq?

What's with the `of` and `&` in the Coq Inductive definition?