123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313let_=Mltop.add_known_module"coq-waterproof.plugin"# 21 "src/g_waterproof.mlg"openExceptionsopenWaterproveletwaterproof_version:string="3.0.0+8.19"(* 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 *)# 74 "src/g_waterproof.mlg"let()=Pcoq.set_keyword_state((CLexer.add_keyword((CLexer.add_keyword((CLexer.add_keyword((CLexer.add_keyword((CLexer.add_keyword((CLexer.add_keyword(CLexer.add_keyword(Pcoq.get_keyword_state())"and")"as"))"hold"))"holds"))"it"))"or"))"we"))let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 93 "src/g_waterproof.mlg"automation_shield:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 100 "src/g_waterproof.mlg"automation_shield:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 107 "src/g_waterproof.mlg"filter_errors:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 114 "src/g_waterproof.mlg"filter_errors:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 121 "src/g_waterproof.mlg"automation_debug:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 128 "src/g_waterproof.mlg"automation_debug:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 135 "src/g_waterproof.mlg"print_rewrite_hints:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 142 "src/g_waterproof.mlg"print_rewrite_hints:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 149 "src/g_waterproof.mlg"print_hypothesis_help:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 156 "src/g_waterproof.mlg"print_hypothesis_help:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 163 "src/g_waterproof.mlg"Feedback.msg_notice(Pp.strwaterproof_version))infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 170 "src/g_waterproof.mlg"redirect_feedback:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 177 "src/g_waterproof.mlg"redirect_feedback:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 185 "src/g_waterproof.mlg"redirect_errors:=true)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 192 "src/g_waterproof.mlg"redirect_errors:=false)infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.static_vernac_extend~plugin:(Some"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()=Vernactypes.vtdefault(fun()-># 199 "src/g_waterproof.mlg"add_wp_feedback_logger())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]