data-rate theorem Catalan theorem Pythagorean theorem Hamilton-Cayley theorem Picard theorem Barbier theorem Lee Yorke theorem Sturm theorem Butchart-Moser theorem Fermat last theorem