Вместо того чтобы пытаться доказать эквивалентность напрямую, я бы для каждой функции доказывал (используя индукцию), что она фактически переворачивает список.Если оба они переворачивают списки, то они эквивалентны.
Эскиз доказательства:
Мы хотим доказать, что rev работает для всех списков:
базовый случай списки длиной 0: доказать, что rev [] правильно вычисляет
индуктивный случай : доказать, что для любого n, rev может обратитьлюбой список длины n, предполагая, что rev может перевернуть любой список длины до n-1