(**Whydidwenotrunintothisprobleminourproofof[fhapp_ass'']?Thereasonisthatthepairconstructorispolymorphicinthetypesofthepaircomponents,whilefunctionslike[S]arenotpolymorphicatall.Useofsuchnon-polymorphicfunctionswith[JMeq]tendstopushtowarduseofaxioms.Theexamplewith[nat]hereisabitunrealistic;morelikelycaseswouldinvolvefunctionsthathave%\emph{%#<i>#some#</i>#%}%polymorphism,butnotenoughtoallowabstractionsofthesortweattemptedabovewith[pattern].Forinstance,wemighthaveanequalitybetweentwolists,wherethegoalonlytype-checkswhenthetermsinvolvedreallyarelists,thougheverythingispolymorphicinthetypesoflistdataelements.The#<ahref="http://www.mpi-sws.org/~gil/Heq/">#Heq%\footnote{\url{http://www.mpi-sws.org/~gil/Heq/}}%#</a># library builds up a slightly different foundation to help avoid such problems. *)