@@ -304,15 +332,18 @@ Theorem m2 : forall P Q R : Prop, P -> Q -> R -> Q.
...
@@ -304,15 +332,18 @@ Theorem m2 : forall P Q R : Prop, P -> Q -> R -> Q.
Byapplying[pose],aconvenientdebuggingtoolfor"leaking information out of [match]es,"weseethatthis[match]firsttriesbinding[H]to[H1],whichcannotbeusedtoprove[Q].Nonetheless,thefollowingvariationonthetacticsucceedsatprovingthegoal:*)
Byapplying[pose],aconvenientdebuggingtoolfor"leaking information out of [match]es,"weseethatthis[match]firsttriesbinding[H]to[H1],whichcannotbeusedtoprove[Q].Nonetheless,thefollowingvariationonthetacticsucceedsatprovingthegoal:*)
(**Weusetheequalitycheckingthatisbuiltintopattern-matchingtoseeifthereisahypothesisthatmatchesthepropositionexactly.Ifso,weusethe[fail]tactic.Withoutarguments,[fail]signalsnormaltacticfailure,asyoumightexpect.When[fail]ispassedanargument[n],[n]isusedtocountoutwardsthroughtheenclosingcasesofbacktrackingsearch.Inthiscase,[fail1]says"fail not just in this pattern-matching branch, but for the whole [match]."Thesecondcasewillneverbetriedwhenthe[fail1]isreached.
(**Weusetheequalitycheckingthatisbuiltintopattern-matchingtoseeifthereisahypothesisthatmatchesthepropositionexactly.Ifso,weusethe[fail]tactic.Withoutarguments,[fail]signalsnormaltacticfailure,asyoumightexpect.When[fail]ispassedanargument[n],[n]isusedtocountoutwardsthroughtheenclosingcasesofbacktrackingsearch.Inthiscase,[fail1]says"fail not just in this pattern-matching branch, but for the whole [match]."Thesecondcasewillneverbetriedwhenthe[fail1]isreached.
...
@@ -331,14 +363,17 @@ The body of the [?P1 /\ ?P2] case guarantees that, if it is reached, we either s
...
@@ -331,14 +363,17 @@ The body of the [?P1 /\ ?P2] case guarantees that, if it is reached, we either s
(**Thefirstorderofbusinessincraftingour[matcher]tacticwillbeauxiliarysupportforsearchingthroughformulatrees.The[search_prem]tacticimplementsrunningitstacticargument[tac]oneverysubformulaofan[imp]premise.Asittraversesatree,[search_prem]appliessomeoftheabovelemmastorewritethegoaltobringdifferentsubformulastotheheadofthegoal.Thatis,foreverysubformula[P]oftheimplicationpremise,wewant[P]to"have a turn,"wherethepremiseisrearrangedintotheform[P/\Q]forsome[Q].Thetactic[tac]shouldexpecttoseeagoalinthisformandfocusitsattentiononthefirstconjunctofthepremise.*)
(**Thefirstorderofbusinessincraftingour[matcher]tacticwillbeauxiliarysupportforsearchingthroughformulatrees.The[search_prem]tacticimplementsrunningitstacticargument[tac]oneverysubformulaofan[imp]premise.Asittraversesatree,[search_prem]appliessomeoftheabovelemmastorewritethegoaltobringdifferentsubformulastotheheadofthegoal.Thatis,foreverysubformula[P]oftheimplicationpremise,wewant[P]to"have a turn,"wherethepremiseisrearrangedintotheform[P/\Q]forsome[Q].Thetactic[tac]shouldexpecttoseeagoalinthisformandfocusitsattentiononthefirstconjunctofthepremise.*)