123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530# 13 "plugins/ssr/ssrvernac.mlg"openNamesmoduleCoqConstr=ConstropenCoqConstropenConstrexpropenConstrexpr_opsopenProcq.PrimopenProcq.ConstropenPvernac.Vernac_openLtac_pluginopenGlob_termopenStdargopenPpopenPpconstropenPrinteropenUtilopenSsrprintersopenSsrcommon# 25 "plugins/ssr/ssrvernac.ml"# 42 "plugins/ssr/ssrvernac.mlg"(* global syntactic changes and vernacular commands *)(** Alternative notations for anonymous arguments. *)(* ************)(* Syntax: *)(* let: <pattern> := <term> in ... *)(* let: <pattern> [in ...] := <term> return ... in ... *)(* The scope of a top-level 'as' in the pattern extends over the *)(* 'return' type (dependent let). *)(* Note that the optional "in ..." appears next to the <pattern> *)(* rather than the <term> in the "let:" syntax. The alternative *)(* would lead to ambiguities in, e.g., *)(* let: p1 := (*v---INNER LET:---v *) *)(* let: p2 := let: p3 := e3 in k return t in k2 in k1 return t' *)(* in b (*^--ALTERNATIVE INNER LET--------^ *) *)(* Caveat : There is no pretty-printing support, since this would *)(* require a modification to the Rocq kernel (adding a new match *)(* display style -- why aren't these strings?); also, the v8.1 *)(* pretty-printer only allows extension hooks for printing *)(* integer or string literals. *)letno_ct=None,Noneandno_rt=Noneletaliasvar=function|[[{CAst.v=CPatAlias(_,na);loc}]]->Somena|_->Noneletmk_cnotypemp=aliasvarmp,Noneletmk_ctypempt=aliasvarmp,Sometletmk_rtypet=Sometletmk_let?locrtctmpc1=CAst.make?loc@@CCases(LetPatternStyle,rt,ct,[CAst.make?loc(mp,c1)])letmk_patc(na,t)=(c,na,t)# 65 "plugins/ssr/ssrvernac.ml"let_=letssr_rtype=Procq.Entry.make"ssr_rtype"andssr_mpat=Procq.Entry.make"ssr_mpat"inlet()=assert(Procq.Entry.is_emptyssr_rtype)inlet()=Egramml.grammar_extend~plugin_uid:("rocq-runtime.plugins.ssreflect","ssrvernac.mlg:0")~ignore_kw:truessr_rtype(Procq.Fresh(Gramlib.Gramext.First,[(None,None,[Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(Tok.PKEYWORD("return")))))((Procq.Symbol.ntermlterm("100"))))(funt_loc-># 81 "plugins/ssr/ssrvernac.mlg"mk_rtypet# 85 "plugins/ssr/ssrvernac.ml")])]))inlet()=assert(Procq.Entry.is_emptyssr_mpat)inlet()=Egramml.grammar_extend~plugin_uid:("rocq-runtime.plugins.ssreflect","ssrvernac.mlg:1")~ignore_kw:truessr_mpat(Procq.Fresh(Gramlib.Gramext.First,[(None,None,[Procq.Production.make(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.ntermpattern)))(funploc-># 82 "plugins/ssr/ssrvernac.mlg"[[p]]# 99 "plugins/ssr/ssrvernac.ml")])]))inlet()=Egramml.grammar_extend~plugin_uid:("rocq-runtime.plugins.ssreflect","ssrvernac.mlg:2")~ignore_kw:trueterm(Procq.Reuse(Some("10"),[Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(Tok.PKEYWORD("let")))))((Procq.Symbol.token(Tok.PKEYWORD(":")))))((Procq.Symbol.ntermssr_mpat)))((Procq.Symbol.token(Tok.PKEYWORD("in")))))((Procq.Symbol.ntermpattern)))((Procq.Symbol.token(Tok.PKEYWORD(":=")))))((Procq.Symbol.ntermlconstr)))((Procq.Symbol.ntermssr_rtype)))((Procq.Symbol.token(Tok.PKEYWORD("in")))))((Procq.Symbol.ntermlconstr)))(func1_rtc_t_mp__loc-># 91 "plugins/ssr/ssrvernac.mlg"mk_let~locrt[mk_patc(mk_ctypempt)]mpc1# 129 "plugins/ssr/ssrvernac.ml");Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(Tok.PKEYWORD("let")))))((Procq.Symbol.token(Tok.PKEYWORD(":")))))((Procq.Symbol.ntermssr_mpat)))((Procq.Symbol.token(Tok.PKEYWORD(":=")))))((Procq.Symbol.ntermlconstr)))((Procq.Symbol.ntermssr_rtype)))((Procq.Symbol.token(Tok.PKEYWORD("in")))))((Procq.Symbol.ntermlconstr)))(func1_rtc_mp__loc-># 88 "plugins/ssr/ssrvernac.mlg"mk_let~locrt[mk_patc(mk_cnotypemp)]mpc1# 151 "plugins/ssr/ssrvernac.ml");Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(Tok.PKEYWORD("let")))))((Procq.Symbol.token(Tok.PKEYWORD(":")))))((Procq.Symbol.ntermssr_mpat)))((Procq.Symbol.token(Tok.PKEYWORD(":=")))))((Procq.Symbol.ntermlconstr)))((Procq.Symbol.token(Tok.PKEYWORD("in")))))((Procq.Symbol.ntermlconstr)))(func1_c_mp__loc-># 85 "plugins/ssr/ssrvernac.mlg"mk_let~locno_rt[mk_patcno_ct]mpc1# 171 "plugins/ssr/ssrvernac.ml")]))in()# 109 "plugins/ssr/ssrvernac.mlg"letdeclare_one_prenex_implicitlocalityf=letfref=trySmartlocate.global_with_aliasfwithewhenCErrors.noncriticale->errorstrm(pr_qualidf++str" is not declared")inletrecloop=function|a::args'whenImpargs.is_status_implicita->MaxImplicit::loopargs'|args'whenList.existsImpargs.is_status_implicitargs'->errorstrm(str"Expected prenex implicits for "++pr_qualidf)|_->[]inletimpls=matchImpargs.implicits_of_globalfrefwith|[cond,impls]->impls|[]->errorstrm(str"Expected some implicits for "++pr_qualidf)|_->errorstrm(str"Multiple implicits not supported")inmatchloopimplswith|[]->errorstrm(str"Expected some implicits for "++pr_qualidf)|impls->Impargs.set_implicitslocalityfref[List.map(funimp->(Anonymous,imp))impls]# 201 "plugins/ssr/ssrvernac.ml"let()=Vernacextend.static_vernac_extend~plugin:(Some"rocq-runtime.plugins.ssreflect")~command:"Ssrpreneximplicits"~classifier:(fun~atts:__->Vernacextend.classify_as_sideeff)~ignore_kw:true?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Prenex",Vernacextend.TyTerminal("Implicits",Vernacextend.TyNonTerminal(Extend.TUlist1(Extend.TUentry(Genarg.get_arg_tagwit_global)),Vernacextend.TyNil))),(letcoqpp_bodyfllocality=Vernactypes.vtdefault(fun()-># 136 "plugins/ssr/ssrvernac.mlg"letlocality=Locality.make_section_localitylocalityinList.iter(declare_one_prenex_implicitlocality)fl;# 218 "plugins/ssr/ssrvernac.ml")infunfl?loc~atts()->coqpp_bodyfl(Attributes.parse# 135 "plugins/ssr/ssrvernac.mlg"Attributes.locality# 223 "plugins/ssr/ssrvernac.ml"atts)),None))]let_=let()=Egramml.grammar_extend~plugin_uid:("rocq-runtime.plugins.ssreflect","ssrvernac.mlg:3")~ignore_kw:truegallina_ext(Procq.Reuse(None,[Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(Tok.PIDENT(Some("Import"))))))((Procq.Symbol.token(Tok.PIDENT(Some("Prenex"))))))((Procq.Symbol.token(Tok.PIDENT(Some("Implicits"))))))(fun___loc-># 148 "plugins/ssr/ssrvernac.mlg"Vernacexpr.VernacSynterp(Vernacexpr.VernacSetOption(false,["Printing";"Implicit";"Defensive"],Vernacexpr.OptionUnset))# 243 "plugins/ssr/ssrvernac.ml")]))in()# 161 "plugins/ssr/ssrvernac.mlg"letpr_raw_ssrhintrefenvsigmaprc__=letopenCAstinfunction|{v=CAppExpl((r,x),args)}whenisCHolesargs->prcenvsigma(CAst.make@@CRef(r,x))++str"|"++int(List.lengthargs)|{v=CApp({v=CRef_},_)}asc->prcenvsigmac|{v=CApp(c,args)}whenisCxHolesargs->prcenvsigmac++str"|"++int(List.lengthargs)|c->prcenvsigmacletpr_rawhintrefenvsigmac=matchDAst.getcwith|GApp(f,args)whenisRHolesargs->pr_glob_constr_envenvsigmaf++str"|"++int(List.lengthargs)|_->pr_glob_constr_envenvsigmacletpr_glob_ssrhintrefenvsigma___(c,_)=pr_rawhintrefenvsigmacletpr_ssrhintrefenvsigmaprc__=prcenvsigmaletmkhintref?loccn=matchc.CAst.vwith|CRef(r,x)->CAst.make?loc@@CAppExpl((r,x),mkCHoles?locn)|_->mkAppC(c,mkCHoles?locn)# 274 "plugins/ssr/ssrvernac.ml"let(wit_ssrhintref,ssrhintref)=Tacentries.argument_extend~plugin:"rocq-runtime.plugins.ssreflect"~name:"ssrhintref"~ignore_kw:true{Tacentries.arg_parsing=Vernacextend.Arg_rules[(Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.ntermconstr)))((Procq.Symbol.token(CLexer.terminal"|"))))((Procq.Symbol.ntermnatural)))(funn_cloc-># 193 "plugins/ssr/ssrvernac.mlg"mkhintref~loccn# 290 "plugins/ssr/ssrvernac.ml"));(Procq.Production.make(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.ntermconstr)))(funcloc-># 192 "plugins/ssr/ssrvernac.mlg"c# 297 "plugins/ssr/ssrvernac.ml"))];Tacentries.arg_tag=Some(Geninterp.val_tag(Genarg.topwitwit_constr));Tacentries.arg_intern=Tacentries.ArgInternWit(wit_constr);Tacentries.arg_subst=Tacentries.ArgSubstWit(wit_constr);Tacentries.arg_interp=Tacentries.ArgInterpWit(wit_constr);Tacentries.arg_printer=((funenvsigma-># 190 "plugins/ssr/ssrvernac.mlg"pr_raw_ssrhintrefenvsigma# 306 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 191 "plugins/ssr/ssrvernac.mlg"pr_glob_ssrhintrefenvsigma# 310 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 189 "plugins/ssr/ssrvernac.mlg"pr_ssrhintrefenvsigma# 315 "plugins/ssr/ssrvernac.ml"));}let_=(wit_ssrhintref,ssrhintref)# 196 "plugins/ssr/ssrvernac.mlg"(* View purpose *)letpr_viewpos=function|SomeSsrview.AdaptorDb.Forward->str" for move/"|SomeSsrview.AdaptorDb.Backward->str" for apply/"|SomeSsrview.AdaptorDb.Equivalence->str" for apply//"|None->mt()letpr_ssrviewpos___=pr_viewpos# 335 "plugins/ssr/ssrvernac.ml"let(wit_ssrviewpos,ssrviewpos)=Tacentries.argument_extend~plugin:"rocq-runtime.plugins.ssreflect"~name:"ssrviewpos"~ignore_kw:true{Tacentries.arg_parsing=Vernacextend.Arg_rules[(Procq.Production.make(Procq.Rule.stop)(funloc-># 215 "plugins/ssr/ssrvernac.mlg"None# 345 "plugins/ssr/ssrvernac.ml"));(Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(CLexer.terminal"for"))))((Procq.Symbol.token(CLexer.terminal"apply"))))((Procq.Symbol.token(CLexer.terminal"//"))))(fun___loc-># 214 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Equivalence# 357 "plugins/ssr/ssrvernac.ml"));(Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(CLexer.terminal"for"))))((Procq.Symbol.token(CLexer.terminal"apply"))))((Procq.Symbol.token(CLexer.terminal"/"))))((Procq.Symbol.token(CLexer.terminal"/"))))(fun____loc-># 213 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Equivalence# 371 "plugins/ssr/ssrvernac.ml"));(Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(CLexer.terminal"for"))))((Procq.Symbol.token(CLexer.terminal"apply"))))((Procq.Symbol.token(CLexer.terminal"/"))))(fun___loc-># 212 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Backward# 383 "plugins/ssr/ssrvernac.ml"));(Procq.Production.make(Procq.Rule.next(Procq.Rule.next(Procq.Rule.next(Procq.Rule.stop)((Procq.Symbol.token(CLexer.terminal"for"))))((Procq.Symbol.token(CLexer.terminal"move"))))((Procq.Symbol.token(CLexer.terminal"/"))))(fun___loc-># 211 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Forward# 395 "plugins/ssr/ssrvernac.ml"))];Tacentries.arg_tag=None;Tacentries.arg_intern=Tacentries.ArgInternFun(funistv->(ist,v));Tacentries.arg_subst=Tacentries.ArgSubstFun(funsv->v);Tacentries.arg_interp=Tacentries.ArgInterpRet;Tacentries.arg_printer=((funenvsigma-># 210 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos# 404 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 210 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos# 408 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 210 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos# 413 "plugins/ssr/ssrvernac.ml"));}let_=(wit_ssrviewpos,ssrviewpos)# 218 "plugins/ssr/ssrvernac.mlg"letpr_ssrviewposspc___i=pr_viewposi++spc()# 425 "plugins/ssr/ssrvernac.ml"let(wit_ssrviewposspc,ssrviewposspc)=Tacentries.argument_extend~plugin:"rocq-runtime.plugins.ssreflect"~name:"ssrviewposspc"~ignore_kw:true{Tacentries.arg_parsing=Vernacextend.Arg_alias(ssrviewpos);Tacentries.arg_tag=Some(Geninterp.val_tag(Genarg.topwitwit_ssrviewpos));Tacentries.arg_intern=Tacentries.ArgInternWit(wit_ssrviewpos);Tacentries.arg_subst=Tacentries.ArgSubstWit(wit_ssrviewpos);Tacentries.arg_interp=Tacentries.ArgInterpWit(wit_ssrviewpos);Tacentries.arg_printer=((funenvsigma-># 224 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc# 440 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 224 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc# 444 "plugins/ssr/ssrvernac.ml"),(funenvsigma-># 224 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc# 449 "plugins/ssr/ssrvernac.ml"));}let_=(wit_ssrviewposspc,ssrviewposspc)# 228 "plugins/ssr/ssrvernac.mlg"letprint_view_hintsenvsigmakindl=letpp_viewname=str"Hint View"++pr_viewpos(Somekind)++str" "inletpp_hints=pr_listspc(pr_rawhintrefenvsigma)linFeedback.msg_notice(pp_viewname++hov0pp_hints++Pp.cut())# 464 "plugins/ssr/ssrvernac.ml"let()=Vernacextend.static_vernac_extend~plugin:(Some"rocq-runtime.plugins.ssreflect")~command:"PrintView"~classifier:(fun~atts:__->Vernacextend.classify_as_query)~ignore_kw:true?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Print",Vernacextend.TyTerminal("Hint",Vernacextend.TyTerminal("View",Vernacextend.TyNonTerminal(Extend.TUentry(Genarg.get_arg_tagwit_ssrviewpos),Vernacextend.TyNil)))),(letcoqpp_bodyi()=Vernactypes.vtdefault(fun()-># 239 "plugins/ssr/ssrvernac.mlg"letenv=Global.env()inletsigma=Evd.from_envenvin(matchiwith|Somek->print_view_hintsenvsigmak(Ssrview.AdaptorDb.getk)|None->List.iter(funk->print_view_hintsenvsigmak(Ssrview.AdaptorDb.getk))[Ssrview.AdaptorDb.Forward;Ssrview.AdaptorDb.Backward;Ssrview.AdaptorDb.Equivalence])# 491 "plugins/ssr/ssrvernac.ml")infuni?loc~atts()->coqpp_bodyi(Attributes.unsupported_attributesatts)),None))]# 253 "plugins/ssr/ssrvernac.mlg"letglob_view_hintslvh=List.map(Constrintern.intern_constr(Global.env())(Evd.from_env(Global.env())))lvh# 505 "plugins/ssr/ssrvernac.ml"let()=Vernacextend.static_vernac_extend~plugin:(Some"rocq-runtime.plugins.ssreflect")~command:"HintView"~classifier:(fun~atts:__->Vernacextend.classify_as_sideeff)~ignore_kw:true?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Hint",Vernacextend.TyTerminal("View",Vernacextend.TyNonTerminal(Extend.TUentry(Genarg.get_arg_tagwit_ssrviewposspc),Vernacextend.TyNonTerminal(Extend.TUlist1(Extend.TUentry(Genarg.get_arg_tagwit_ssrhintref)),Vernacextend.TyNil)))),(letcoqpp_bodynlvh()=Vernactypes.vtdefault(fun()-># 262 "plugins/ssr/ssrvernac.mlg"lethints=glob_view_hintslvhinmatchnwith|None->Ssrview.AdaptorDb.declareSsrview.AdaptorDb.Forwardhints;Ssrview.AdaptorDb.declareSsrview.AdaptorDb.Backwardhints|Somek->Ssrview.AdaptorDb.declarekhints# 526 "plugins/ssr/ssrvernac.ml")infunnlvh?loc~atts()->coqpp_bodynlvh(Attributes.unsupported_attributesatts)),None))]