(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2019 *) (* empty *) | ] lpar_id_coloneq: [ | "(" IDENT; ":=" ] name_colon: [ | IDENT; ":" | "_" ":" (* todo: should "_" be a keyword or an identifier? *) ] int: [ (* todo: probably should be NUMERAL *) | integer ] command_entry: [ | noedit_mode ] binders: [ | DELETE Pcoq.Constr.binders (* todo: not sure why there are 2 "binders:" *) ] (* edits to simplify *) ltac_expr1: [ | EDIT match_key ADD_OPT "reverse" "goal" "with" match_context_list "end" ] match_context_list: [ | EDIT ADD_OPT "|" LIST1 match_context_rule SEP "|" ] match_hyps: [ | REPLACE name ":=" "[" match_pattern "]" ":" match_pattern | WITH name ":=" OPT ("[" match_pattern "]" ":") match_pattern | DELETE name ":=" match_pattern ] match_list: [ | EDIT ADD_OPT "|" LIST1 match_rule SEP "|" ] selector_body: [ | REPLACE range_selector_or_nth (* depends on whether range_selector_or_nth is deleted first *) | WITH LIST1 range_selector SEP "," ] range_selector_or_nth: [ | DELETENT ] simple_tactic: [ | DELETE "intros" | REPLACE "intros" ne_intropatterns | WITH "intros" intropattern_list_opt | DELETE "eintros" | REPLACE "eintros" ne_intropatterns | WITH "eintros" intropattern_list_opt ] intropattern_list_opt: [ | DELETE LIST0 intropattern | intropattern_list_opt intropattern | empty ] ne_intropatterns: [ | DELETENT (* todo: don't use DELETENT for this *) ] or_and_intropattern: [ | DELETE "()" | DELETE "(" simple_intropattern ")" | REPLACE "(" simple_intropattern "," LIST1 simple_intropattern SEP "," ")" | WITH "(" LIST0 simple_intropattern SEP "," ")" | EDIT "[" USE_NT intropattern_or LIST1 intropattern_list_opt SEP "|" "]" ]