Admitted. (* QuickChick plus_comm3_take3. *)
Fixpoint rev_append {X} (l1 l2 : list X) : list X :=
match l1 with
| [] => l2
| x :: l1' => rev_append l1' (x :: l2)
end.
Definition tr_rev {X} (l : list X) : list X :=
rev_append l [].

Lemma tr_rev_correct : forall X, @tr_rev X = @rev X.
Admitted. (* Higher Order *)