// Code from last class datatype List = Nil | Cons(head: T, tail: List) // New definitions from this class function Map(f: A -> B, ls: List): List { match ls case Nil => Nil case Cons(x, ls') => Cons(f(x), Map(f, ls')) } function Foldl(f : (A, B) -> B, acc: B, ls: List): B { match ls case Nil => acc case Cons(x, ls') => Foldl(f, f(x, acc), ls') } // Your task: fill in a proof for this lemma lemma FoldlMap(f: A -> B, g : (B, C) -> C, acc: C, ls: List) ensures Foldl(g, acc, Map(f, ls)) == Foldl((x, a) => g(f(x), a), acc, ls)