Агда - обратный помощник

Я пытаюсь доказать эту лему

reverse-++ : ∀{ℓ}{A : Set ℓ}(l1 l2 :  A) → reverse (l1 ++ l2) ≡ (reverse l2) ++ (reverse l1)     
reverse-++ [] [] = refl
reverse-++ l1  [] rewrite ++[] l1 = refl
reverse-++ l1 (x :: xs) =  {!!}

Но другая функция, обратный помощник, продолжает приближаться к моей цели, и я понятия не имею, как мне от нее избавиться. Любое руководство или предложения?

2 ответа

Я предполагаю, что при реализации reverse, ты звонишь reverse-helper, В этом случае вы, вероятно, хотите доказать лемму о reverse-helper что вы можете назвать в лемме о reverse, Это общая вещь: если вы доказываете что-то о функции с помощью вспомогательной функции, вам обычно требуется доказательство с вспомогательным доказательством, потому что индукционная структура доказательства обычно совпадает с рекурсивной структурой функции.

Я думаю, что вы должны начать с другого аргумента.

поскольку ++ вероятно, определяется с [] ++ a = a, а также reverse (x :: xs) = (reverse xs) ++ (x :: nil) будет лучше доказать reverse-++ (x :: xs) ys = cong (\xs -> xs ++ (x :: nil)) (reverse-++ xs ys)

Другие вопросы по тегам