Machine-checked semantic session typing