123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293let_=Mltop.add_known_module"coq-waterproof.plugin"# 21 "src/g_waterproof.mlg"openExceptionsopenWaterproveletwaterproof_version:string="3.0.0+8.17"(* The code below is a hack to patch in (open_)lconstr into Ltac2 *)(* It should be removed when merged to coq-master (open_)lconstr should be in release 9.1 *)letadd_scopesf=Ltac2_plugin.Tac2entries.register_scope(Names.Id.of_strings)fletrecpr_scope=letopenLtac2_plugin.Tac2exprinletopenCAstinfunction|SexprStr{v=s;_}->Pp.qstrings|SexprInt{v=n;_}->Pp.intn|SexprRec(_,{v=na;_},args)->letna=matchnawith|None->Pp.str"_"|Someid->Names.Id.printidinPp.(na++str"("++prlist_with_sep(fun()->str", ")pr_scopeargs++str")")letscope_failsargs=letopenPpinletargs=str"("++prlist_with_sep(fun()->str", ")pr_scopeargs++str")"inCErrors.user_err(str"Invalid arguments "++args++str" in scope "++strs)let()=add_scope"lconstr"(funarg->letdelimiters=List.map(function|Ltac2_plugin.Tac2expr.SexprRec(_,{v=Somes;_},[])->s|_->scope_fail"lconstr"arg)arginletacte=Ltac2_plugin.Tac2quote.of_constr~delimiterseinLtac2_plugin.Tac2entries.ScopeRule(Pcoq.Symbol.ntermPcoq.Constr.lconstr,act))let()=add_scope"open_lconstr"(funarg->letdelimiters=List.map(function|Ltac2_plugin.Tac2expr.SexprRec(_,{v=Somes;_},[])->s|_->scope_fail"open_.constr"arg)arginletacte=Ltac2_plugin.Tac2quote.of_open_constr~delimiterseinLtac2_plugin.Tac2entries.ScopeRule(Pcoq.Symbol.ntermPcoq.Constr.lconstr,act))(* End of hack *)let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationShieldEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Automation",Vernacextend.TyTerminal("Shield",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 73 "src/g_waterproof.mlg"automation_shield:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationShieldDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Automation",Vernacextend.TyTerminal("Shield",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 80 "src/g_waterproof.mlg"automation_shield:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"FilterErrorsEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Filter",Vernacextend.TyTerminal("Errors",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 87 "src/g_waterproof.mlg"filter_errors:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"FilterErrorsDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Filter",Vernacextend.TyTerminal("Errors",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 94 "src/g_waterproof.mlg"filter_errors:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationDebugEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Debug",Vernacextend.TyTerminal("Automation",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 101 "src/g_waterproof.mlg"automation_debug:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationDebugDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Debug",Vernacextend.TyTerminal("Automation",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 108 "src/g_waterproof.mlg"automation_debug:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationPrintRewriteHintsEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Printing",Vernacextend.TyTerminal("Rewrite",Vernacextend.TyTerminal("Hints",Vernacextend.TyNil))))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 115 "src/g_waterproof.mlg"print_rewrite_hints:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AutomationPrintRewriteHintsDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Printing",Vernacextend.TyTerminal("Rewrite",Vernacextend.TyTerminal("Hints",Vernacextend.TyNil))))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 122 "src/g_waterproof.mlg"print_rewrite_hints:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"PrintHypothesisHelpEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Hypothesis",Vernacextend.TyTerminal("Help",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 129 "src/g_waterproof.mlg"print_hypothesis_help:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"PrintHypothesisHelpDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Hypothesis",Vernacextend.TyTerminal("Help",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 136 "src/g_waterproof.mlg"print_hypothesis_help:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"PrintVersionSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Print",Vernacextend.TyTerminal("Version",Vernacextend.TyNil))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 143 "src/g_waterproof.mlg"Feedback.msg_notice(Pp.strwaterproof_version))infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"RedirectWarningsEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Redirect",Vernacextend.TyTerminal("Feedback",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 150 "src/g_waterproof.mlg"redirect_feedback:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"RedirectWarningsDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Redirect",Vernacextend.TyTerminal("Feedback",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 157 "src/g_waterproof.mlg"redirect_feedback:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"RedirectErrorsEnableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Redirect",Vernacextend.TyTerminal("Errors",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 165 "src/g_waterproof.mlg"redirect_errors:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"RedirectErrorsDisableSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Disable",Vernacextend.TyTerminal("Redirect",Vernacextend.TyTerminal("Errors",Vernacextend.TyNil)))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 172 "src/g_waterproof.mlg"redirect_errors:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-waterproof.plugin"~command:"AddWpLoggerSideEff"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Waterproof",Vernacextend.TyTerminal("Enable",Vernacextend.TyTerminal("Logging",Vernacextend.TyNil))),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 179 "src/g_waterproof.mlg"add_wp_feedback_logger())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]