Why can't inversion
figure out that it isn't structurally possible for a term to contain itself? Here's a basic example:
Inductive test_type : Type :=
| Base
| Arrow (i o : test_type).
Theorem should_be_easy : forall T,
T <> Arrow T T.
Proof.
intros T contra. inversion contra. (* why doesn't this solve the goal? *)
Admitted.
How would I go about solving this proof? The only evidence I have, contra
, is just an equality, so I can't induct on it. Additionally, induction on T
results in a similarly-recursive set of evidence in the inductive case that doesn't let me make progress on the goal.
I thought the tactic existed to deal with matters of constructor equivalence to some degree. For example, it solves this trivial constructor inequality:
Theorem xyz : true <> false.
Proof. intro contra. inversion contra. Qed.