I'm confused as to why assert and cut are behaving differently in this case. I am trying to prove this lemma with the ssreflect seq library.
Lemma subseq_add_both: forall{A: eqType} (L1 L2: seq A) (a: A),
subseq L1 L2 -> subseq (a:: L1) (a :: L2).
Proof. intros.
assert (subseq [:: a] (a:: L2)).
The above works fine. However,
Lemma subseq_add_both: forall{A: eqType} (L1 L2: seq A) (a: A),
subseq L1 L2 -> subseq (a:: L1) (a :: L2).
Proof. intros.
cut (subseq [:: a] (a:: L2)).
generates the error
Error: Not a proposition or a type.
Why is this happening? I thought both assert and cut would take an arbitrary goal as argument, but this is evidently not the case. How are these two tactics different with regard to the goals they work on?
Thank you.