(* This file contains highly trivial proofs, but they are carefully engineered in such a way that the Qed is fast. This is tricky because we have to avoid that constants such as 12 or 13 are unfolded by the typechecker while unifying two terms. *)
Local Open Scope Z.

Lemma map_append_eq_4x4:
forall (a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15: int)
(b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15: int),
a0  = b0  -> a1  = b1  ->  a2 = b2  -> a3  = b3  ->
a4  = b4  -> a5  = b5  ->  a6 = b6  -> a7  = b7  ->
a8  = b8  -> a9  = b9  -> a10 = b10 -> a11 = b11 ->
a12 = b12 -> a13 = b13 -> a14 = b14 -> a15 = b15 ->
map Vint ([a0; a1; a2; a3] ++ [a4; a5; a6; a7] ++ [a8; a9; a10; a11] ++ [a12; a13; a14; a15])
= [Vint b0; Vint b1; Vint b2; Vint b3; Vint b4; Vint b5; Vint b6; Vint b7;
Vint b8; Vint b9; Vint b10; Vint b11; Vint b12; Vint b13; Vint b14; Vint b15].