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