I need to prove:
reverse(push(as,bs)) = push(reverse(bs), reverse(as))
where:
def push[T](as: List[T], bs: List[T]):
List [T] = as match {
case Nil => bs
case x::xs => x::push(xs, bs)
}
def reverse[T](ls: List[T]):
List[T] = ls match {
case Nil => Nil
case x::xs => push(reverse(xs), x::Nil)
}
I am already stuck in the base case, since i cant figure out a lemma. The only thing I have this far is:
reverse(push(Nil,bs)) = reverse(bs)
and I'm stuck here since it felt eternity.
Does anyone have an idea for a lemma?