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) *)
Apply partially instantiated lemma
Using reflexivity in Coq
High-speed calculation of Coq's theorems
Topological Definition of Continuous in Coq
Reference in Coq Lists library not found
Purpose of maximal vs non-maximal implicit arguments
Idris type system properties
How to destruct/generalize over Program's rewritten match statements
Show all axioms Coq
Product Type in Coq
Coq inductive definition for the entailment property
How to make sublists in Coq?
Nested theorems in Coq
Why does this rewrite fail in the context of dependent types
How to raise exception in Coq?(in match … end)