(**Itisconvenienttobeabletotestdefinitionsbeforestartingtoprovethingsaboutthem.Wecanverifythatoursemanticsissensiblebyevaluatingsomesampleuses,usingthecommand%\index{Vernacularcommands!Eval}%[Eval].Thiscommandtakesanargumentexpressinga%\index{reductionstrategy}\emph{%#<i>#reductionstrategy#</i>#%}%,oran%``%#"#order of evaluation.#"#%''%UnlikewithML,whichhardcodesan%\emph{%#<i>#eager#</i>#%}%reductionstrategy,orHaskell,whichhardcodesa%\emph{%#<i>#lazy#</i>#%}%strategy,inCoqwearefreetochoosebetweentheseandmanyotherordersofevaluation,becauseallCoqprogramsterminate.Infact,Coqsilentlychecked%\index{terminationchecking}%terminationofour[Fixpoint]definitionabove,usingasimpleheuristicbasedonmonotonicallydecreasingsizeofargumentsacrossrecursivecalls.
(**Itisconvenienttobeabletotestdefinitionsbeforestartingtoprovethingsaboutthem.Wecanverifythatoursemanticsissensiblebyevaluatingsomesampleuses,usingthecommand%\index{Vernacularcommands!Eval}%[Eval].Thiscommandtakesanargumentexpressinga%\index{reductionstrategy}\emph{%#<i>#reductionstrategy#</i>#%}%,oran%``%#"#order of evaluation.#"#%''%UnlikewithML,whichhardcodesan%\emph{%#<i>#eager#</i>#%}%reductionstrategy,orHaskell,whichhardcodesa%\emph{%#<i>#lazy#</i>#%}%strategy,inCoqwearefreetochoosebetweentheseandmanyotherordersofevaluation,becauseallCoqprogramsterminate.Infact,Coqsilentlychecked%\index{terminationchecking}%terminationofour[Fixpoint]definitionabove,usingasimpleheuristicbasedonmonotonicallydecreasingsizeofargumentsacrossrecursivecalls.Specifically,recursivecallsmustbemadeonargumentsthatwerepulledoutoftheoriginalrecursiveargumentwith[match]expressions.(InChapter7,wewillseesomewaysofgettingaroundthisrestriction,thoughsimplyremovingtherestrictionwouldleaveCoquselessasatheoremprovingtool,forreasonswewillstarttolearnaboutinthenextchapter.)