123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761# 13 "plugins/ssr/ssrvernac.mlg"openNamesmoduleCoqConstr=ConstropenCoqConstropenConstrexpropenConstrexpr_opsopenPcoqopenPcoq.PrimopenPcoq.ConstropenPvernac.Vernac_openLtac_pluginopenGlob_termopenStdargopenPpopenPpconstropenPrinteropenUtilopenSsrprintersopenSsrcommonlet_=Mltop.add_known_module"coq-core.plugins.ssreflect"# 38 "plugins/ssr/ssrvernac.mlg"(* Defining grammar rules with "xx" in it automatically declares keywords too,
* we thus save the lexer to restore it at the end of the file *)letfrozen_lexer=ref(Pcoq.get_keyword_state());;let()=Mltop.add_init_function"coq-core.plugins.ssreflect"(fun()->frozen_lexer:=Pcoq.get_keyword_state())(* global syntactic changes and vernacular commands *)(** Alternative notations for "match" and anonymous arguments. *)(* ************)(* Syntax: *)(* if <term> is <pattern> then ... else ... *)(* if <term> is <pattern> [in ..] return ... then ... else ... *)(* 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 if/let). *)(* Note that the optional "in ..." appears next to the <pattern> *)(* rather than the <term> in then "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 Coq 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. *)(* Also note that in the v8 grammar "is" needs to be a keyword; *)(* as this can't be done from an ML extension file, the new *)(* syntax will only work when ssreflect.v is imported. *)letno_ct=None,Noneandno_rt=Noneletaliasvar=function|[[{CAst.v=CPatAlias(_,na);loc}]]->Somena|_->Noneletmk_cnotypemp=aliasvarmp,Noneletmk_ctypempt=aliasvarmp,Sometletmk_rtypet=Sometletmk_dthen?loc(mp,ct,rt)c=(CAst.make?loc(mp,c)),ct,rtletmk_let?locrtctmpc1=CAst.make?loc@@CCases(LetPatternStyle,rt,ct,[CAst.make?loc(mp,c1)])letmk_patc(na,t)=(c,na,t)let_=letssr_rtype=Pcoq.Entry.make"ssr_rtype"andssr_mpat=Pcoq.Entry.make"ssr_mpat"andssr_dpat=Pcoq.Entry.make"ssr_dpat"andssr_dthen=Pcoq.Entry.make"ssr_dthen"andssr_elsepat=Pcoq.Entry.make"ssr_elsepat"andssr_else=Pcoq.Entry.make"ssr_else"inlet()=assert(Pcoq.Entry.is_emptyssr_rtype)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:0")ssr_rtype(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("return")))))((Pcoq.Symbol.ntermlterm("100"))))(funt_loc-># 89 "plugins/ssr/ssrvernac.mlg"mk_rtypet)])]))inlet()=assert(Pcoq.Entry.is_emptyssr_mpat)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:1")ssr_mpat(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermpattern)))(funploc-># 90 "plugins/ssr/ssrvernac.mlg"[[p]])])]))inlet()=assert(Pcoq.Entry.is_emptyssr_dpat)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:2")ssr_dpat(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermssr_mpat)))(funmploc-># 94 "plugins/ssr/ssrvernac.mlg"mp,no_ct,no_rt);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermssr_mpat)))((Pcoq.Symbol.ntermssr_rtype)))(funrtmploc-># 93 "plugins/ssr/ssrvernac.mlg"mp,mk_cnotypemp,rt);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermssr_mpat)))((Pcoq.Symbol.token(Tok.PKEYWORD("in")))))((Pcoq.Symbol.ntermpattern)))((Pcoq.Symbol.ntermssr_rtype)))(funrtt_mploc-># 92 "plugins/ssr/ssrvernac.mlg"mp,mk_ctypempt,rt)])]))inlet()=assert(Pcoq.Entry.is_emptyssr_dthen)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:3")ssr_dthen(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermssr_dpat)))((Pcoq.Symbol.token(Tok.PKEYWORD("then")))))((Pcoq.Symbol.ntermlconstr)))(func_dploc-># 96 "plugins/ssr/ssrvernac.mlg"mk_dthen~locdpc)])]))inlet()=assert(Pcoq.Entry.is_emptyssr_elsepat)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:4")ssr_elsepat(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("else")))))(fun_loc-># 97 "plugins/ssr/ssrvernac.mlg"[[CAst.make~loc@@CPatAtomNone]])])]))inlet()=assert(Pcoq.Entry.is_emptyssr_else)inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:5")ssr_else(Pcoq.Fresh(Gramlib.Gramext.First,[(None,None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermssr_elsepat)))((Pcoq.Symbol.ntermlconstr)))(funcmploc-># 98 "plugins/ssr/ssrvernac.mlg"CAst.make~loc(mp,c))])]))inlet()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:6")binder_constr(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("let")))))((Pcoq.Symbol.token(Tok.PKEYWORD(":")))))((Pcoq.Symbol.ntermssr_mpat)))((Pcoq.Symbol.token(Tok.PKEYWORD("in")))))((Pcoq.Symbol.ntermpattern)))((Pcoq.Symbol.token(Tok.PKEYWORD(":=")))))((Pcoq.Symbol.ntermlconstr)))((Pcoq.Symbol.ntermssr_rtype)))((Pcoq.Symbol.token(Tok.PKEYWORD("in")))))((Pcoq.Symbol.ntermlconstr)))(func1_rtc_t_mp__loc-># 116 "plugins/ssr/ssrvernac.mlg"mk_let~locrt[mk_patc(mk_ctypempt)]mpc1);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("let")))))((Pcoq.Symbol.token(Tok.PKEYWORD(":")))))((Pcoq.Symbol.ntermssr_mpat)))((Pcoq.Symbol.token(Tok.PKEYWORD(":=")))))((Pcoq.Symbol.ntermlconstr)))((Pcoq.Symbol.ntermssr_rtype)))((Pcoq.Symbol.token(Tok.PKEYWORD("in")))))((Pcoq.Symbol.ntermlconstr)))(func1_rtc_mp__loc-># 113 "plugins/ssr/ssrvernac.mlg"mk_let~locrt[mk_patc(mk_cnotypemp)]mpc1);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("let")))))((Pcoq.Symbol.token(Tok.PKEYWORD(":")))))((Pcoq.Symbol.ntermssr_mpat)))((Pcoq.Symbol.token(Tok.PKEYWORD(":=")))))((Pcoq.Symbol.ntermlconstr)))((Pcoq.Symbol.token(Tok.PKEYWORD("in")))))((Pcoq.Symbol.ntermlconstr)))(func1_c_mp__loc-># 110 "plugins/ssr/ssrvernac.mlg"mk_let~locno_rt[mk_patcno_ct]mpc1);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("if")))))((Pcoq.Symbol.ntermlterm("200"))))((Pcoq.Symbol.token(Tok.PKEYWORD("isn't")))))((Pcoq.Symbol.ntermssr_dthen)))((Pcoq.Symbol.ntermssr_else)))(funb2db1_c_loc-># 103 "plugins/ssr/ssrvernac.mlg"letb1,ct,rt=db1inletb1,b2=letopenCAstinlet{loc=l1;v=(p1,r1)},{loc=l2;v=(p2,r2)}=b1,b2in(make?loc:l1(p1,r2),make?loc:l2(p2,r1))inCAst.make~loc@@CCases(MatchStyle,rt,[mk_patcct],[b1;b2]));Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("if")))))((Pcoq.Symbol.ntermlterm("200"))))((Pcoq.Symbol.token(Tok.PKEYWORD("is")))))((Pcoq.Symbol.ntermssr_dthen)))((Pcoq.Symbol.ntermssr_else)))(funb2db1_c_loc-># 101 "plugins/ssr/ssrvernac.mlg"letb1,ct,rt=db1inCAst.make~loc@@CCases(MatchStyle,rt,[mk_patcct],[b1;b2]))]))in()let_=let()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:7")closed_binder(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.rules[Pcoq.Rules.make(Pcoq.Rule.next_norec(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("&")))))(fun_loc-># 123 "plugins/ssr/ssrvernac.mlg"());Pcoq.Rules.make(Pcoq.Rule.next_norec(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("of")))))(fun_loc-># 123 "plugins/ssr/ssrvernac.mlg"())])))((Pcoq.Symbol.ntermlterm("99"))))(func_loc-># 124 "plugins/ssr/ssrvernac.mlg"[CLocalAssum([CAst.make~locAnonymous],None,DefaultExplicit,c)])]))in()# 142 "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]let()=Vernacextend.static_vernac_extend~plugin:(Some"coq-core.plugins.ssreflect")~command:"Ssrpreneximplicits"~classifier:(fun_->Vernacextend.classify_as_sideeff)?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()-># 169 "plugins/ssr/ssrvernac.mlg"letlocality=Locality.make_section_localitylocalityinList.iter(declare_one_prenex_implicitlocality)fl;)infunfl?loc~atts()->coqpp_bodyfl(Attributes.parse# 168 "plugins/ssr/ssrvernac.mlg"Attributes.localityatts)),None))]let_=let()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:8")gallina_ext(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PIDENT(Some("Import"))))))((Pcoq.Symbol.token(Tok.PIDENT(Some("Prenex"))))))((Pcoq.Symbol.token(Tok.PIDENT(Some("Implicits"))))))(fun___loc-># 181 "plugins/ssr/ssrvernac.mlg"Vernacexpr.VernacSynterp(Vernacexpr.VernacSetOption(false,["Printing";"Implicit";"Defensive"],Vernacexpr.OptionUnset)))]))in()# 194 "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)let(wit_ssrhintref,ssrhintref)=Tacentries.argument_extend~plugin:"coq-core.plugins.ssreflect"~name:"ssrhintref"{Tacentries.arg_parsing=Vernacextend.Arg_rules([(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermconstr)))((Pcoq.Symbol.token(Pcoq.terminal"|"))))((Pcoq.Symbol.ntermnatural)))(funn_cloc-># 226 "plugins/ssr/ssrvernac.mlg"mkhintref~loccn));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.ntermconstr)))(funcloc-># 225 "plugins/ssr/ssrvernac.mlg"c))]);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-># 223 "plugins/ssr/ssrvernac.mlg"pr_raw_ssrhintrefenvsigma),(funenvsigma-># 224 "plugins/ssr/ssrvernac.mlg"pr_glob_ssrhintrefenvsigma),(funenvsigma-># 222 "plugins/ssr/ssrvernac.mlg"pr_ssrhintrefenvsigma));}let_=(wit_ssrhintref,ssrhintref)# 229 "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_viewposlet(wit_ssrviewpos,ssrviewpos)=Tacentries.argument_extend~plugin:"coq-core.plugins.ssreflect"~name:"ssrviewpos"{Tacentries.arg_parsing=Vernacextend.Arg_rules([(Pcoq.Production.make(Pcoq.Rule.stop)(funloc-># 248 "plugins/ssr/ssrvernac.mlg"None));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Pcoq.terminal"for"))))((Pcoq.Symbol.token(Pcoq.terminal"apply"))))((Pcoq.Symbol.token(Pcoq.terminal"//"))))(fun___loc-># 247 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Equivalence));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Pcoq.terminal"for"))))((Pcoq.Symbol.token(Pcoq.terminal"apply"))))((Pcoq.Symbol.token(Pcoq.terminal"/"))))((Pcoq.Symbol.token(Pcoq.terminal"/"))))(fun____loc-># 246 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Equivalence));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Pcoq.terminal"for"))))((Pcoq.Symbol.token(Pcoq.terminal"apply"))))((Pcoq.Symbol.token(Pcoq.terminal"/"))))(fun___loc-># 245 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Backward));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Pcoq.terminal"for"))))((Pcoq.Symbol.token(Pcoq.terminal"move"))))((Pcoq.Symbol.token(Pcoq.terminal"/"))))(fun___loc-># 244 "plugins/ssr/ssrvernac.mlg"SomeSsrview.AdaptorDb.Forward))]);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-># 243 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos),(funenvsigma-># 243 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos),(funenvsigma-># 243 "plugins/ssr/ssrvernac.mlg"pr_ssrviewpos));}let_=(wit_ssrviewpos,ssrviewpos)# 251 "plugins/ssr/ssrvernac.mlg"letpr_ssrviewposspc___i=pr_viewposi++spc()let(wit_ssrviewposspc,ssrviewposspc)=Tacentries.argument_extend~plugin:"coq-core.plugins.ssreflect"~name:"ssrviewposspc"{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-># 257 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc),(funenvsigma-># 257 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc),(funenvsigma-># 257 "plugins/ssr/ssrvernac.mlg"pr_ssrviewposspc));}let_=(wit_ssrviewposspc,ssrviewposspc)# 261 "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())let()=Vernacextend.static_vernac_extend~plugin:(Some"coq-core.plugins.ssreflect")~command:"PrintView"~classifier:(fun_->Vernacextend.classify_as_query)?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()-># 272 "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]))infuni?loc~atts()->coqpp_bodyi(Attributes.unsupported_attributesatts)),None))]# 286 "plugins/ssr/ssrvernac.mlg"letglob_view_hintslvh=List.map(Constrintern.intern_constr(Global.env())(Evd.from_env(Global.env())))lvhlet()=Vernacextend.static_vernac_extend~plugin:(Some"coq-core.plugins.ssreflect")~command:"HintView"~classifier:(fun_->Vernacextend.classify_as_sideeff)?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()-># 295 "plugins/ssr/ssrvernac.mlg"lethints=glob_view_hintslvhinmatchnwith|None->Ssrview.AdaptorDb.declareSsrview.AdaptorDb.Forwardhints;Ssrview.AdaptorDb.declareSsrview.AdaptorDb.Backwardhints|Somek->Ssrview.AdaptorDb.declarekhints)infunnlvh?loc~atts()->coqpp_bodynlvh(Attributes.unsupported_attributesatts)),None))]# 306 "plugins/ssr/ssrvernac.mlg"openG_vernaclet_=let()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:9")query_command(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PIDENT(Some("Search"))))))((Pcoq.Symbol.ntermsearch_query)))((Pcoq.Symbol.ntermsearch_queries)))((Pcoq.Symbol.token(Tok.PKEYWORD(".")))))(fun_ls_loc-># 316 "plugins/ssr/ssrvernac.mlg"let(sl,m)=linfung->Vernacexpr.VernacSearch(Vernacexpr.Search(s::sl),g,m))]))in()# 337 "plugins/ssr/ssrvernac.mlg"openPltaclet_=let()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:10")hypident(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("(")))))((Pcoq.Symbol.token(Tok.PIDENT(Some("value"))))))((Pcoq.Symbol.token(Tok.PKEYWORD("of")))))((Pcoq.Symbol.ntermPrim.identref)))((Pcoq.Symbol.token(Tok.PKEYWORD(")")))))(fun_id___loc-># 347 "plugins/ssr/ssrvernac.mlg"id,Locus.InHypValueOnly);Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PKEYWORD("(")))))((Pcoq.Symbol.token(Tok.PIDENT(Some("type"))))))((Pcoq.Symbol.token(Tok.PKEYWORD("of")))))((Pcoq.Symbol.ntermPrim.identref)))((Pcoq.Symbol.token(Tok.PKEYWORD(")")))))(fun_id___loc-># 346 "plugins/ssr/ssrvernac.mlg"id,Locus.InHypTypeOnly)]))in()let_=let()=Egramml.grammar_extend~plugin_uid:("coq-core.plugins.ssreflect","ssrvernac.mlg:11")constr_eval(Pcoq.Reuse(None,[Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(Tok.PIDENT(Some("type"))))))((Pcoq.Symbol.token(Tok.PKEYWORD("of")))))((Pcoq.Symbol.ntermConstr.constr)))(func__loc-># 354 "plugins/ssr/ssrvernac.mlg"Genredexpr.ConstrTypeOfc)]))in()# 358 "plugins/ssr/ssrvernac.mlg"(* We wipe out all the keywords generated by the grammar rules we defined. *)(* The user is supposed to Require Import ssreflect or Require ssreflect *)(* and Import ssreflect.SsrSyntax to obtain these keywords and as a *)(* consequence the extended ssreflect grammar. *)let()=Mltop.add_init_function"coq-core.plugins.ssreflect"(fun()->Pcoq.set_keyword_state!frozen_lexer);;