### coq

#### Split conjunction goal into subgoals

Consider the following toy exercise: Theorem swap_id: forall (m n : nat), m = n -> (m, n) = (n, m). Proof. intros m n H. At this point I have the following: 1 subgoal m, n : nat H : m = n ______________________________________(1/1) (m, n) = (n, m) I would like to split the goal into two subgoals, m = n and n = m. Is there a tactic which does that?

Solve using the f_equal tactic: Theorem test: forall (m n : nat), m = n -> (m, n) = (n, m). Proof. intros m n H. f_equal. With state: 2 subgoals m, n : nat H : m = n ______________________________________(1/2) m = n ______________________________________(2/2) n = m

### Related Links

Coq eapply generates a goal with a question mark while proving existence of a function

Universe inconsistency (because of strict positivity restriction?)

How do you selectively simplify arguments to each time a function is called, without evaluting the function itself?

Why is it impossible to perform induction on a term that is used in conclusion?

How to destruct a exist in goal for coq

Why do Coq recursion principles pass along both the substructure and the result of the recursive call?

Stronger completeness axiom for real numbers in Coq

Subtyping in Coq

When is the first input to `list_rec` not a constant function?

what does the colon greater than sign mean in coq

Prove that a sequence of steps terminates

How to leverage auto's searching and hint databases in custom tactics?

How to use auto with repeat in custom tactics?

How to use Coq GenericMinMax to prove facts about the reals

Coq modular arithmetic

Break “forall” hypothesis with conjunctions up into components?