Techniques for proving data structure lower bounds