Hencethedistinctionbetween[bool]and[Prop].Programsoftype[bool]arecomputationalbyconstruction;wecanalwaysrunthemtodeterminetheirresults.Many[Prop]sareundecidable,andsowecanwritemoreexpressiveformulaswith[Prop]sthanwith[bool]s,buttheinevitableconsequenceisthatwecannotsimply"run a [Prop] to determine its truth."
...
...
@@ -349,24 +346,24 @@ We will see more about Coq's program extraction facility in a later chapter. Ho
WhydoesCoqusethisrestriction?Wewilldiscusstheissueindetailinafuturechapter,whenweseethedependently-typedprogrammingtechniquesthatwouldallowustowritethisprooftermmanually.Fornow,wejustsaythatthealgorithmicproblemof"logically complete case analysis"isundecidablewhenphrasedinCoq'slogic.Afewtacticsanddesignpatternsthatwewillpresentinthischaptersufficeinalmostallcases.Forthecurrentexample,whatwewantisatacticcalled[inversion],whichcorrespondstotheconceptofinversionthatisfrequentlyusedwithnaturaldeductionproofsystems.*)
...
...
@@ -493,12 +493,13 @@ Sometimes using [destruct] when you should have used [inversion] can lead to con
%\item%#<li>#Defineabig-stepevaluationrelation[eval],capturingwhatitmeansforanexpressiontoevaluatetoavalueunderaparticularvariableassignment."Big step"meansthattheevaluationofeveryexpressionshouldevaluatablewithasingleinstanceoftheinductivepredicateyouwilldefine.Forinstance,"[1 + 1] evaluates to [2] under assignment [va]"shouldbederivableforanyassignment[va].#</li>#
%\item%#<li>#Defineabig-stepevaluationrelation[eval],capturingwhatitmeansforanexpressiontoevaluatetoavalueunderaparticularvariableassignment."Big step"meansthattheevaluationofeveryexpressionshouldbeprovedwithasingleinstanceoftheinductivepredicateyouwilldefine.Forinstance,"[1 + 1] evaluates to [2] under assignment [va]"shouldbederivableforanyassignment[va].#</li>#