(* Coq grammar generated from .mlg files. Do not edit by hand. Not compiled into Coq *)
DOC_GRAMMAR
vernac_toplevel: [
| "Drop" "."
| "Quit" "."
| "BackTo" natural "."
| test_show_goal "Show" "Goal" natural "at" natural "."
| "Show" "Proof" "Diffs" OPT "removed" "."
| Pvernac.Vernac_.main_entry
]
Constr.ident: [
| Prim.ident
]
Prim.name: [
| "_"
]
global: [
| Prim.reference
]
constr_pattern: [
| constr
]
cpattern: [
| lconstr
]
sort: [
| "Set"
| "Prop"
| "SProp"
| "Type"
| "Type" "@{" "_" "}"
| "Type" "@{" universe "}"
]
sort_family: [
| "Set"
| "Prop"
| "SProp"
| "Type"
]
universe_increment: [
| "+" natural
|
]
universe_name: [
| global
| "Set"
| "Prop"
]
universe_expr: [
| universe_name universe_increment
]
universe: [
| "max" "(" LIST1 universe_expr SEP "," ")"
| universe_expr
]
lconstr: [
| term200
]
constr: [
| term8
| "@" global univ_annot
]
term200: [
| binder_constr
| term100
]
term100: [
| term99 "<:" term200
| term99 "<<:" term200
| term99 ":" term200
| term99
]
term99: [
| term90
]
term90: [
| term10
]
term10: [
| term9 LIST1 arg
| "@" global univ_annot LIST0 term9
| "@" pattern_ident LIST1 identref
| term9
]
term9: [
| ".." term0 ".."
| term8
]
term8: [
| term1
]
term1: [
| term0 ".(" global LIST0 arg ")"
| term0 ".(" "@" global LIST0 ( term9 ) ")"
| term0 "%" IDENT
| term0
]
term0: [
| atomic_constr
| term_match
| "(" term200 ")"
| "{|" record_declaration bar_cbrace
| "{" binder_constr "}"
| "`{" term200 "}"
| test_array_opening "[" "|" array_elems "|" lconstr type_cstr test_array_closing "|" "]" univ_annot
| "`(" term200 ")"
| "ltac" ":" "(" Pltac.ltac_expr ")"
]
array_elems: [
| LIST0 lconstr SEP ";"
]
record_declaration: [
| fields_def
]
fields_def: [
| field_def ";" fields_def
| field_def
|
]
field_def: [
| global binders ":=" lconstr
]
binder_constr: [
| "forall" open_binders "," term200
| "fun" open_binders "=>" term200
| "let" name binders let_type_cstr ":=" term200 "in" term200
| "let" "fix" fix_decl "in" term200
| "let" "cofix" cofix_body "in" term200
| "let" [ "(" LIST0 name SEP "," ")" | "()" ] as_return_type ":=" term200 "in" term200
| "let" "'" pattern200 ":=" term200 "in" term200
| "let" "'" pattern200 ":=" term200 case_type "in" term200
| "let" "'" pattern200 "in" pattern200 ":=" term200 case_type "in" term200
| "if" term200 as_return_type "then" term200 "else" term200
| "fix" fix_decls
| "cofix" cofix_decls
| "if" term200 "is" ssr_dthen ssr_else (* SSR plugin *)
| "if" term200 "isn't" ssr_dthen ssr_else (* SSR plugin *)
| "let" ":" ssr_mpat ":=" lconstr "in" lconstr (* SSR plugin *)
| "let" ":" ssr_mpat ":=" lconstr ssr_rtype "in" lconstr (* SSR plugin *)
| "let" ":" ssr_mpat "in" pattern200 ":=" lconstr ssr_rtype "in" lconstr (* SSR plugin *)
]
arg: [
| test_lpar_id_coloneq "(" identref ":=" lconstr ")"
| term9
]
atomic_constr: [
| global univ_annot
| sort
| NUMBER
| string
| "_"
| "?" "[" identref "]"
| "?" "[" pattern_ident "]"
| pattern_ident evar_instance
]
inst: [
| identref ":=" lconstr
]
evar_instance: [
| "@{" LIST1 inst SEP ";" "}"
|
]
univ_annot: [
| "@{" LIST0 universe_level "}"
|
]
universe_level: [
| "Set"
| "Prop"
| "Type"
| "_"
| global
]
fix_decls: [
| fix_decl
| fix_decl "with" LIST1 fix_decl SEP "with" "for" identref
]
cofix_decls: [
| cofix_body
| cofix_body "with" LIST1 cofix_body SEP "with" "for" identref
]
fix_decl: [
| identref binders_fixannot type_cstr ":=" term200
]
cofix_body: [
| identref binders type_cstr ":=" term200
]
term_match: [
| "match" LIST1 case_item SEP "," OPT case_type "with" branches "end"
]
case_item: [
| term100 OPT [ "as" name ] OPT [ "in" pattern200 ]
]
case_type: [
| "return" term100
]
as_return_type: [
| OPT [ OPT [ "as" name ] case_type ]
]
branches: [
| OPT "|" LIST0 eqn SEP "|"
]
mult_pattern: [
| LIST1 pattern200 SEP ","
]
eqn: [
| LIST1 mult_pattern SEP "|" "=>" lconstr
]
record_pattern: [
| global ":=" pattern200
]
record_patterns: [
| record_pattern ";" record_patterns
| record_pattern
|
]
pattern200: [
| pattern100
]
pattern100: [
| pattern99 ":" term200
| pattern99
]
pattern99: [
| pattern90
]
pattern90: [
| pattern10
]
pattern10: [
| pattern1 "as" name
| pattern1 LIST1 pattern1
| "@" Prim.reference LIST0 pattern1
| pattern1
]
pattern1: [
| pattern0 "%" IDENT
| pattern0
]
pattern0: [
| Prim.reference
| "{|" record_patterns bar_cbrace
| "_"
| "(" pattern200 ")"
| "(" pattern200 "|" LIST1 pattern200 SEP "|" ")"
| NUMBER
| string
]
fixannot: [
| "{" "struct" identref "}"
| "{" "wf" constr identref "}"
| "{" "measure" constr OPT identref OPT constr "}"
]
binders_fixannot: [
| ensure_fixannot fixannot
| binder binders_fixannot
|
]
open_binders: [
| name LIST0 name ":" lconstr
| name LIST0 name binders
| name ".." name
| closed_binder binders
]
binders: [
| LIST0 binder
| Pcoq.Constr.binders
]
binder: [
| name
| closed_binder
]
closed_binder: [
| "(" name LIST1 name ":" lconstr ")"
| "(" name ":" lconstr ")"
| "(" name ":=" lconstr ")"
| "(" name ":" lconstr ":=" lconstr ")"
| "{" name "}"
| "{" name LIST1 name ":" lconstr "}"
| "{" name ":" lconstr "}"
| "{" name LIST1 name "}"
| "[" name "]"
| "[" name LIST1 name ":" lconstr "]"
| "[" name ":" lconstr "]"
| "[" name LIST1 name "]"
| "`(" LIST1 typeclass_constraint SEP "," ")"
| "`{" LIST1 typeclass_constraint SEP "," "}"
| "`[" LIST1 typeclass_constraint SEP "," "]"
| "'" pattern0
| [ "of" | "&" ] term99 (* SSR plugin *)
]
one_open_binder: [
| name
| name ":" lconstr
| one_closed_binder
]
one_closed_binder: [
| "(" name ":" lconstr ")"
| "{" name "}"
| "{" name ":" lconstr "}"
| "[" name "]"
| "[" name ":" lconstr "]"
| "'" pattern0
]
typeclass_constraint: [
| "!" term200
| "{" name "}" ":" [ "!" | ] term200
| test_name_colon name ":" [ "!" | ] term200
| term200
]
type_cstr: [
| ":" lconstr
|
]
let_type_cstr: [
| OPT [ ":" lconstr ]
]
preident: [
| IDENT
]
ident: [
| IDENT
]
pattern_ident: [
| LEFTQMARK ident
]
identref: [
| ident
]
hyp: [
| identref
]
field: [
| FIELD
]
fields: [
| field fields
| field
]
fullyqualid: [
| ident fields
| ident
]
name: [
| "_"
| ident
]
reference: [
| ident fields
| ident
]
qualid: [
| reference
]
by_notation: [
| ne_string OPT [ "%" IDENT ]
]
smart_global: [
| reference
| by_notation
]
ne_string: [
| STRING
]
ne_lstring: [
| ne_string
]
dirpath: [
| ident LIST0 field
]
string: [
| STRING
]
lstring: [
| string
]
integer: [
| bigint
]
natural: [
| bignat
]
bigint: [
| bignat
| test_minus_nat "-" bignat
]
bignat: [
| NUMBER
]
bar_cbrace: [
| test_pipe_closedcurly "|" "}"
]
strategy_level: [
| "expand"
| "opaque"
| integer
| "transparent"
]
opt_hintbases: [
|
| ":" LIST1 IDENT
]
command: [
| "Goal" lconstr
| "Proof"
| "Proof" "using" G_vernac.section_subset_expr
| "Proof" "Mode" string
| "Proof" lconstr
| "Abort"
| "Abort" "All"
| "Abort" identref
| "Existential" natural constr_body
| "Admitted"
| "Qed"
| "Save" identref
| "Defined"
| "Defined" identref
| "Restart"
| "Undo"
| "Undo" natural
| "Undo" "To" natural
| "Focus"
| "Focus" natural
| "Unfocus"
| "Unfocused"
| "Show"
| "Show" natural
| "Show" ident
| "Show" "Existentials"
| "Show" "Universes"
| "Show" "Conjectures"
| "Show" "Proof"
| "Show" "Intro"
| "Show" "Intros"
| "Show" "Match" reference
| "Guarded"
| "Create" "HintDb" IDENT; [ "discriminated" | ]
| "Remove" "Hints" LIST1 global opt_hintbases
| "Hint" hint opt_hintbases
| "Comments" LIST0 comment
| "Declare" "Instance" ident_decl binders ":" term200 hint_info
| "Declare" "Scope" IDENT
| "Pwd"
| "Cd"
| "Cd" ne_string
| "Load" [ "Verbose" | ] [ ne_string | IDENT ]
| "Declare" "ML" "Module" LIST1 ne_string
| "Locate" locatable
| "Add" "LoadPath" ne_string "as" dirpath
| "Add" "Rec" "LoadPath" ne_string "as" dirpath
| "Remove" "LoadPath" ne_string
| "Type" lconstr
| "Print" printable
| "Print" smart_global OPT univ_name_list
| "Print" "Module" "Type" global
| "Print" "Module" global
| "Print" "Namespace" dirpath
| "Inspect" natural
| "Add" "ML" "Path" ne_string
| "Set" setting_name option_setting
| "Unset" setting_name
| "Print" "Table" setting_name
| "Add" IDENT IDENT LIST1 table_value
| "Add" IDENT LIST1 table_value
| "Test" setting_name "for" LIST1 table_value
| "Test" setting_name
| "Remove" IDENT IDENT LIST1 table_value
| "Remove" IDENT LIST1 table_value
| "Write" "State" IDENT
| "Write" "State" ne_string
| "Restore" "State" IDENT
| "Restore" "State" ne_string
| "Reset" "Initial"
| "Reset" identref
| "Back"
| "Back" natural
| "Debug" "On"
| "Debug" "Off"
| "Declare" "Reduction" IDENT; ":=" red_expr
| "Declare" "Custom" "Entry" IDENT
| "Derive" ident "SuchThat" constr "As" ident (* derive plugin *)
| "Extraction" global (* extraction plugin *)
| "Recursive" "Extraction" LIST1 global (* extraction plugin *)
| "Extraction" string LIST1 global (* extraction plugin *)
| "Extraction" "TestCompile" LIST1 global (* extraction plugin *)
| "Separate" "Extraction" LIST1 global (* extraction plugin *)
| "Extraction" "Library" ident (* extraction plugin *)
| "Recursive" "Extraction" "Library" ident (* extraction plugin *)
| "Extraction" "Language" language (* extraction plugin *)
| "Extraction" "Inline" LIST1 global (* extraction plugin *)
| "Extraction" "NoInline" LIST1 global (* extraction plugin *)
| "Print" "Extraction" "Inline" (* extraction plugin *)
| "Reset" "Extraction" "Inline" (* extraction plugin *)
| "Extraction" "Implicit" global "[" LIST0 int_or_id "]" (* extraction plugin *)
| "Extraction" "Blacklist" LIST1 ident (* extraction plugin *)
| "Print" "Extraction" "Blacklist" (* extraction plugin *)
| "Reset" "Extraction" "Blacklist" (* extraction plugin *)
| "Extract" "Constant" global LIST0 string "=>" mlname (* extraction plugin *)
| "Extract" "Inlined" "Constant" global "=>" mlname (* extraction plugin *)
| "Extract" "Inductive" global "=>" mlname "[" LIST0 mlname "]" OPT string (* extraction plugin *)
| "Show" "Extraction" (* extraction plugin *)
| "Set" "Firstorder" "Solver" tactic
| "Print" "Firstorder" "Solver"
| "Function" LIST1 function_fix_definition SEP "with" (* funind plugin *)
| "Functional" "Scheme" LIST1 fun_scheme_arg SEP "with" (* funind plugin *)
| "Functional" "Case" fun_scheme_arg (* funind plugin *)
| "Generate" "graph" "for" reference (* funind plugin *)
| "Hint" "Rewrite" orient LIST1 constr ":" LIST0 preident
| "Hint" "Rewrite" orient LIST1 constr "using" tactic ":" LIST0 preident
| "Hint" "Rewrite" orient LIST1 constr
| "Hint" "Rewrite" orient LIST1 constr "using" tactic
| "Derive" "Inversion_clear" ident "with" constr "Sort" sort_family
| "Derive" "Inversion_clear" ident "with" constr
| "Derive" "Inversion" ident "with" constr "Sort" sort_family
| "Derive" "Inversion" ident "with" constr
| "Derive" "Dependent" "Inversion" ident "with" constr "Sort" sort_family
| "Derive" "Dependent" "Inversion_clear" ident "with" constr "Sort" sort_family
| "Declare" "Left" "Step" constr
| "Declare" "Right" "Step" constr
| "Grab" "Existential" "Variables"
| "Unshelve"
| "Declare" "Equivalent" "Keys" constr constr
| "Print" "Equivalent" "Keys"
| "Optimize" "Proof"
| "Optimize" "Heap"
| "Hint" "Cut" "[" hints_path "]" opthints
| "Typeclasses" "Transparent" LIST1 reference
| "Typeclasses" "Opaque" LIST1 reference
| "Typeclasses" "eauto" ":=" debug eauto_search_strategy OPT natural
| "Proof" "with" Pltac.tactic OPT [ "using" G_vernac.section_subset_expr ]
| "Proof" "using" G_vernac.section_subset_expr "with" Pltac.tactic
| "Tactic" "Notation" OPT ltac_tactic_level LIST1 ltac_production_item ":=" tactic
| "Print" "Ltac" reference
| "Locate" "Ltac" reference
| "Ltac" LIST1 ltac_tacdef_body SEP "with"
| "Print" "Ltac" "Signatures"
| "Obligation" natural "of" ident ":" lglob withtac
| "Obligation" natural "of" ident withtac
| "Obligation" natural ":" lglob withtac
| "Obligation" natural withtac
| "Next" "Obligation" "of" ident withtac
| "Next" "Obligation" withtac
| "Solve" "Obligation" natural "of" ident "with" tactic
| "Solve" "Obligation" natural "with" tactic
| "Solve" "Obligations" "of" ident "with" tactic
| "Solve" "Obligations" "of" ident
| "Solve" "Obligations" "with" tactic
| "Solve" "Obligations"
| "Solve" "All" "Obligations" "with" tactic
| "Solve" "All" "Obligations"
| "Admit" "Obligations" "of" ident
| "Admit" "Obligations"
| "Obligation" "Tactic" ":=" tactic
| "Show" "Obligation" "Tactic"
| "Obligations" "of" ident
| "Obligations"
| "Preterm" "of" ident
| "Preterm"
| "Add" "Relation" constr constr "reflexivity" "proved" "by" constr "symmetry" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "reflexivity" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "as" ident
| "Add" "Relation" constr constr "symmetry" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "symmetry" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "reflexivity" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "reflexivity" "proved" "by" constr "symmetry" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Relation" constr constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "reflexivity" "proved" "by" constr "symmetry" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "reflexivity" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "symmetry" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "symmetry" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "reflexivity" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "reflexivity" "proved" "by" constr "symmetry" "proved" "by" constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Parametric" "Relation" binders ":" constr constr "transitivity" "proved" "by" constr "as" ident
| "Add" "Setoid" constr constr constr "as" ident
| "Add" "Parametric" "Setoid" binders ":" constr constr constr "as" ident
| "Add" "Morphism" constr ":" ident
| "Declare" "Morphism" constr ":" ident
| "Add" "Morphism" constr "with" "signature" lconstr "as" ident
| "Add" "Parametric" "Morphism" binders ":" constr "with" "signature" lconstr "as" ident
| "Print" "Rewrite" "HintDb" preident
| "Reset" "Ltac" "Profile"
| "Show" "Ltac" "Profile"
| "Show" "Ltac" "Profile" "CutOff" integer
| "Show" "Ltac" "Profile" string
| "Show" "Lia" "Profile" (* micromega plugin *)
| "Add" "Zify" "InjTyp" constr (* micromega plugin *)
| "Add" "Zify" "BinOp" constr (* micromega plugin *)
| "Add" "Zify" "UnOp" constr (* micromega plugin *)
| "Add" "Zify" "CstOp" constr (* micromega plugin *)
| "Add" "Zify" "BinRel" constr (* micromega plugin *)
| "Add" "Zify" "PropOp" constr (* micromega plugin *)
| "Add" "Zify" "PropBinOp" constr (* micromega plugin *)
| "Add" "Zify" "PropUOp" constr (* micromega plugin *)
| "Add" "Zify" "BinOpSpec" constr (* micromega plugin *)
| "Add" "Zify" "UnOpSpec" constr (* micromega plugin *)
| "Add" "Zify" "Saturate" constr (* micromega plugin *)
| "Show" "Zify" "InjTyp" (* micromega plugin *)
| "Show" "Zify" "BinOp" (* micromega plugin *)
| "Show" "Zify" "UnOp" (* micromega plugin *)
| "Show" "Zify" "CstOp" (* micromega plugin *)
| "Show" "Zify" "BinRel" (* micromega plugin *)
| "Show" "Zify" "UnOpSpec" (* micromega plugin *)
| "Show" "Zify" "BinOpSpec" (* micromega plugin *)
| "Add" "Ring" ident ":" constr OPT ring_mods (* ring plugin *)
| "Print" "Rings" (* ring plugin *)
| "Add" "Field" ident ":" constr OPT field_mods (* ring plugin *)
| "Print" "Fields" (* ring plugin *)
| "Prenex" "Implicits" LIST1 global (* SSR plugin *)
| "Print" "Hint" "View" ssrviewpos (* SSR plugin *)
| "Hint" "View" ssrviewposspc LIST1 ssrhintref (* SSR plugin *)
| "Search" ssr_search_arg ssr_modlocs (* SSR plugin *)
| "Number" "Notation" reference reference reference OPT number_options ":" ident
| "Numeral" "Notation" reference reference reference ":" ident deprecated_number_modifier
| "String" "Notation" reference reference reference OPT string_option ":" ident
| "Ltac2" ltac2_entry (* Ltac2 plugin *)
| "Ltac2" "Eval" ltac2_expr6 (* Ltac2 plugin *)
| "Print" "Ltac2" reference (* Ltac2 plugin *)
]
reference_or_constr: [
| global
| constr
]
hint: [
| "Resolve" LIST1 reference_or_constr hint_info
| "Resolve" "->" LIST1 global OPT natural
| "Resolve" "<-" LIST1 global OPT natural
| "Immediate" LIST1 reference_or_constr
| "Variables" "Transparent"
| "Variables" "Opaque"
| "Constants" "Transparent"
| "Constants" "Opaque"
| "Transparent" LIST1 global
| "Opaque" LIST1 global
| "Mode" global mode
| "Unfold" LIST1 global
| "Constructors" LIST1 global
| "Extern" natural OPT Constr.constr_pattern "=>" Pltac.tactic
]
constr_body: [
| ":=" lconstr
| ":" lconstr ":=" lconstr
]
mode: [
| LIST1 [ "+" | "!" | "-" ]
]
vernac_control: [
| "Time" vernac_control
| "Redirect" ne_string vernac_control
| "Timeout" natural vernac_control
| "Fail" vernac_control
| decorated_vernac
]
decorated_vernac: [
| LIST0 quoted_attributes vernac
]
quoted_attributes: [
| "#[" attribute_list "]"
]
attribute_list: [
| LIST0 attribute SEP ","
]
attribute: [
| ident attr_value
| "using" attr_value
]
attr_value: [
| "=" string
| "=" IDENT
| "(" attribute_list ")"
|
]
legacy_attr: [
| "Local"
| "Global"
| "Polymorphic"
| "Monomorphic"
| "Cumulative"
| "NonCumulative"
| "Private"
| "Program"
]
vernac: [
| LIST0 legacy_attr vernac_aux
]
vernac_aux: [
| gallina "."
| gallina_ext "."
| command "."
| syntax "."
| subprf
| command_entry
]
noedit_mode: [
| query_command
]
subprf: [
| BULLET
| "{"
| "}"
]
gallina: [
| thm_token ident_decl binders ":" lconstr LIST0 [ "with" ident_decl binders ":" lconstr ]
| assumption_token inline assum_list
| assumptions_token inline assum_list
| def_token ident_decl def_body
| "Let" ident_decl def_body
| finite_token LIST1 inductive_definition SEP "with"
| "Fixpoint" LIST1 fix_definition SEP "with"
| "Let" "Fixpoint" LIST1 fix_definition SEP "with"
| "CoFixpoint" LIST1 cofix_definition SEP "with"
| "Let" "CoFixpoint" LIST1 cofix_definition SEP "with"
| "Scheme" LIST1 scheme SEP "with"
| "Combined" "Scheme" identref "from" LIST1 identref SEP ","
| "Register" global "as" qualid
| "Register" "Inline" global
| "Primitive" ident_decl OPT [ ":" lconstr ] ":=" register_token
| "Universe" LIST1 identref
| "Universes" LIST1 identref
| "Constraint" LIST1 univ_constraint SEP ","
]
register_token: [
| test_hash_ident "#" IDENT
]
thm_token: [
| "Theorem"
| "Lemma"
| "Fact"
| "Remark"
| "Corollary"
| "Proposition"
| "Property"
]
def_token: [
| "Definition"
| "Example"
| "SubClass"
]
assumption_token: [
| "Hypothesis"
| "Variable"
| "Axiom"
| "Parameter"
| "Conjecture"
]
assumptions_token: [
| "Hypotheses"
| "Variables"
| "Axioms"
| "Parameters"
| "Conjectures"
]
inline: [
| "Inline" "(" natural ")"
| "Inline"
|
]
univ_constraint: [
| universe_name [ "<" | "=" | "<=" ] universe_name
]
univ_decl: [
| "@{" LIST0 identref [ "+" | ] [ "|" LIST0 univ_constraint SEP "," [ "+" | ] "}" | [ "}" | bar_cbrace ] ]
]
variance: [
| "+"
| "="
| "*"
]
variance_identref: [
| identref
| test_variance_ident variance identref
]
cumul_univ_decl: [
| "@{" LIST0 variance_identref [ "+" | ] [ "|" LIST0 univ_constraint SEP "," [ "+" | ] "}" | [ "}" | bar_cbrace ] ]
]
ident_decl: [
| identref OPT univ_decl
]
cumul_ident_decl: [
| identref OPT cumul_univ_decl
]
finite_token: [
| "Inductive"
| "CoInductive"
| "Variant"
| "Record"
| "Structure"
| "Class"
]
def_body: [
| binders ":=" reduce lconstr
| binders ":" lconstr ":=" reduce lconstr
| binders ":" lconstr
]
reduce: [
| "Eval" red_expr "in"
|
]
decl_notation: [
| ne_lstring ":=" constr syntax_modifiers OPT [ ":" IDENT ]
]
decl_sep: [
| "and"
]
decl_notations: [
| "where" LIST1 decl_notation SEP decl_sep
|
]
opt_constructors_or_fields: [
| ":=" constructors_or_record
|
]
inductive_definition: [
| opt_coercion cumul_ident_decl binders OPT [ "|" binders ] OPT [ ":" lconstr ] opt_constructors_or_fields decl_notations
]
constructors_or_record: [
| "|" LIST1 constructor SEP "|"
| identref constructor_type "|" LIST1 constructor SEP "|"
| identref constructor_type
| identref "{" record_fields "}"
| "{" record_fields "}"
|
]
opt_coercion: [
| ">"
|
]
fix_definition: [
| ident_decl binders_fixannot type_cstr OPT [ ":=" lconstr ] decl_notations
]
cofix_definition: [
| ident_decl binders type_cstr OPT [ ":=" lconstr ] decl_notations
]
scheme: [
| scheme_kind
| identref ":=" scheme_kind
]
scheme_kind: [
| "Induction" "for" smart_global "Sort" sort_family
| "Minimality" "for" smart_global "Sort" sort_family
| "Elimination" "for" smart_global "Sort" sort_family
| "Case" "for" smart_global "Sort" sort_family
| "Equality" "for" smart_global
]
record_field: [
| LIST0 quoted_attributes record_binder OPT [ "|" natural ] decl_notations
]
record_fields: [
| record_field ";" record_fields
| record_field
|
]
field_body: [
| binders of_type lconstr
| binders of_type lconstr ":=" lconstr
| binders ":=" lconstr
]
record_binder: [
| name
| name field_body
]
assum_list: [
| LIST1 assum_coe
| assumpt
]
assum_coe: [
| "(" assumpt ")"
]
assumpt: [
| LIST1 ident_decl of_type lconstr
]
constructor_type: [
| binders [ of_type lconstr | ]
]
constructor: [
| identref constructor_type
]
of_type: [
| ":>"
| ":" ">"
| ":"
]
gallina_ext: [
| "Module" export_token identref LIST0 module_binder of_module_type is_module_expr
| "Module" "Type" identref LIST0 module_binder check_module_types is_module_type
| "Declare" "Module" export_token identref LIST0 module_binder ":" module_type_inl
| "Section" identref
| "End" identref
| "Collection" identref ":=" section_subset_expr
| "Require" export_token LIST1 global
| "From" global "Require" export_token LIST1 global
| "Import" LIST1 filtered_import
| "Export" LIST1 filtered_import
| "Include" module_type_inl LIST0 ext_module_expr
| "Include" "Type" module_type_inl LIST0 ext_module_type
| "Transparent" LIST1 smart_global
| "Opaque" LIST1 smart_global
| "Strategy" LIST1 [ strategy_level "[" LIST1 smart_global "]" ]
| "Canonical" OPT "Structure" global OPT [ OPT univ_decl def_body ]
| "Canonical" OPT "Structure" by_notation
| "Coercion" global OPT univ_decl def_body
| "Identity" "Coercion" identref ":" class_rawexpr ">->" class_rawexpr
| "Coercion" global ":" class_rawexpr ">->" class_rawexpr
| "Coercion" by_notation ":" class_rawexpr ">->" class_rawexpr
| "Context" LIST1 binder
| "Instance" instance_name ":" term200 hint_info [ ":=" "{" record_declaration "}" | ":=" lconstr | ]
| "Existing" "Instance" global hint_info
| "Existing" "Instances" LIST1 global OPT [ "|" natural ]
| "Existing" "Class" global
| "Arguments" smart_global LIST0 arg_specs OPT [ "," LIST1 [ LIST0 implicits_alt ] SEP "," ] OPT [ ":" LIST1 args_modifier SEP "," ]
| "Implicit" "Type" reserv_list
| "Implicit" "Types" reserv_list
| "Generalizable" [ "All" "Variables" | "No" "Variables" | [ "Variable" | "Variables" ] LIST1 identref ]
| "Export" "Set" setting_name option_setting
| "Export" "Unset" setting_name
| "Import" "Prenex" "Implicits" (* SSR plugin *)
]
filtered_import: [
| global
| global "(" LIST1 one_import_filter_name SEP "," ")"
]
one_import_filter_name: [
| global OPT [ "(" ".." ")" ]
]
export_token: [
| "Import"
| "Export"
|
]
ext_module_type: [
| "<+" module_type_inl
]
ext_module_expr: [
| "<+" module_expr_inl
]
check_module_type: [
| "<:" module_type_inl
]
check_module_types: [
| LIST0 check_module_type
]
of_module_type: [
| ":" module_type_inl
| check_module_types
]
is_module_type: [
| ":=" module_type_inl LIST0 ext_module_type
|
]
is_module_expr: [
| ":=" module_expr_inl LIST0 ext_module_expr
|
]
functor_app_annot: [
| "[" "inline" "at" "level" natural "]"
| "[" "no" "inline" "]"
|
]
module_expr_inl: [
| "!" module_expr
| module_expr functor_app_annot
]
module_type_inl: [
| "!" module_type
| module_type functor_app_annot
]
module_binder: [
| "(" export_token LIST1 identref ":" module_type_inl ")"
]
module_expr: [
| module_expr_atom
| module_expr module_expr_atom
]
module_expr_atom: [
| qualid
| "(" module_expr ")"
]
with_declaration: [
| "Definition" fullyqualid OPT univ_decl ":=" Constr.lconstr
| "Module" fullyqualid ":=" qualid
]
module_type: [
| qualid
| "(" module_type ")"
| module_type module_expr_atom
| module_type "with" with_declaration
]
section_subset_expr: [
| test_only_starredidentrefs LIST0 starredidentref
| ssexpr35
]
starredidentref: [
| identref
| identref "*"
| "Type"
| "Type" "*"
]
ssexpr35: [
| "-" ssexpr50
| ssexpr50
]
ssexpr50: [
| ssexpr0 "-" ssexpr0
| ssexpr0 "+" ssexpr0
| ssexpr0
]
ssexpr0: [
| starredidentref
| "(" test_only_starredidentrefs LIST0 starredidentref ")"
| "(" test_only_starredidentrefs LIST0 starredidentref ")" "*"
| "(" ssexpr35 ")"
| "(" ssexpr35 ")" "*"
]
args_modifier: [
| "simpl" "nomatch"
| "simpl" "never"
| "default" "implicits"
| "clear" "implicits"
| "clear" "scopes"
| "clear" "bidirectionality" "hint"
| "rename"
| "assert"
| "extra" "scopes"
| "clear" "scopes" "and" "implicits"
| "clear" "implicits" "and" "scopes"
]
scope_delimiter: [
| "%" IDENT
]
argument_spec: [
| OPT "!" name OPT scope_delimiter
]
arg_specs: [
| argument_spec
| "/"
| "&"
| "(" LIST1 argument_spec ")" OPT scope_delimiter
| "[" LIST1 argument_spec "]" OPT scope_delimiter
| "{" LIST1 argument_spec "}" OPT scope_delimiter
]
implicits_alt: [
| name
| "[" LIST1 name "]"
| "{" LIST1 name "}"
]
instance_name: [
| ident_decl binders
|
]
hint_info: [
| "|" OPT natural OPT constr_pattern
|
]
reserv_list: [
| LIST1 reserv_tuple
| simple_reserv
]
reserv_tuple: [
| "(" simple_reserv ")"
]
simple_reserv: [
| LIST1 identref ":" lconstr
]
query_command: [
| "Eval" red_expr "in" lconstr "."
| "Compute" lconstr "."
| "Check" lconstr "."
| "About" smart_global OPT univ_name_list "."
| "SearchPattern" constr_pattern in_or_out_modules "."
| "SearchRewrite" constr_pattern in_or_out_modules "."
| "Search" search_query search_queries "."
]
printable: [
| "Term" smart_global OPT univ_name_list
| "All"
| "Section" global
| "Grammar" IDENT
| "Custom" "Grammar" IDENT
| "LoadPath" OPT dirpath
| "Modules"
| "Libraries"
| "ML" "Path"
| "ML" "Modules"
| "Debug" "GC"
| "Graph"
| "Classes"
| "TypeClasses"
| "Instances" smart_global
| "Coercions"
| "Coercion" "Paths" class_rawexpr class_rawexpr
| "Canonical" "Projections" LIST0 smart_global
| "Typing" "Flags"
| "Tables"
| "Options"
| "Hint"
| "Hint" smart_global
| "Hint" "*"
| "HintDb" IDENT
| "Scopes"
| "Scope" IDENT
| "Visibility" OPT IDENT
| "Implicit" smart_global
| [ "Sorted" | ] "Universes" OPT printunivs_subgraph OPT ne_string
| "Assumptions" smart_global
| "Opaque" "Dependencies" smart_global
| "Transparent" "Dependencies" smart_global
| "All" "Dependencies" smart_global
| "Strategy" smart_global
| "Strategies"
| "Registered"
]
printunivs_subgraph: [
| "Subgraph" "(" LIST0 reference ")"
]
class_rawexpr: [
| "Funclass"
| "Sortclass"
| smart_global
]
locatable: [
| smart_global
| "Term" smart_global
| "File" ne_string
| "Library" global
| "Module" global
]
option_setting: [
|
| integer
| STRING
]
table_value: [
| global
| STRING
]
setting_name: [
| LIST1 IDENT
]
ne_in_or_out_modules: [
| "inside" LIST1 global
| "outside" LIST1 global
]
in_or_out_modules: [
| ne_in_or_out_modules
|
]
comment: [
| constr
| STRING
| natural
]
positive_search_mark: [
| "-"
|
]
search_query: [
| positive_search_mark search_item
| positive_search_mark "[" LIST1 ( LIST1 search_query ) SEP "|" "]"
]
search_item: [
| test_id_colon search_where ":" ne_string OPT scope_delimiter
| "is" ":" logical_kind
| ne_string OPT scope_delimiter
| test_id_colon search_where ":" constr_pattern
| constr_pattern
]
logical_kind: [
| thm_token
| assumption_token
| "Context"
| extended_def_token
| "Primitive"
]
extended_def_token: [
| def_token
| "Coercion"
| "Instance"
| "Scheme"
| "Canonical"
| "Field"
| "Method"
]
search_where: [
| "head"
| "hyp"
| "concl"
| "headhyp"
| "headconcl"
]
search_queries: [
| ne_in_or_out_modules
| search_query search_queries
|
]
univ_name_list: [
| "@{" LIST0 name "}"
]
syntax: [
| "Open" "Scope" IDENT
| "Close" "Scope" IDENT
| "Delimit" "Scope" IDENT; "with" IDENT
| "Undelimit" "Scope" IDENT
| "Bind" "Scope" IDENT; "with" LIST1 class_rawexpr
| "Infix" ne_lstring ":=" constr syntax_modifiers OPT [ ":" IDENT ]
| "Notation" identref LIST0 ident ":=" constr syntax_modifiers
| "Notation" lstring ":=" constr syntax_modifiers OPT [ ":" IDENT ]
| "Format" "Notation" STRING STRING STRING
| "Reserved" "Infix" ne_lstring syntax_modifiers
| "Reserved" "Notation" ne_lstring syntax_modifiers
]
level: [
| "level" natural
| "next" "level"
]
syntax_modifier: [
| "at" "level" natural
| "in" "custom" IDENT
| "in" "custom" IDENT; "at" "level" natural
| "left" "associativity"
| "right" "associativity"
| "no" "associativity"
| "only" "printing"
| "only" "parsing"
| "format" STRING OPT STRING
| IDENT; "," LIST1 IDENT SEP "," [ "at" level | "in" "scope" IDENT ]
| IDENT; "at" level OPT binder_interp
| IDENT; "in" "scope" IDENT
| IDENT binder_interp
| IDENT explicit_subentry
]
syntax_modifiers: [
| "(" LIST1 syntax_modifier SEP "," ")"
|
]
explicit_subentry: [
| "ident"
| "name"
| "global"
| "bigint"
| "binder"
| "constr"
| "constr" at_level_opt OPT binder_interp
| "pattern"
| "pattern" "at" "level" natural
| "strict" "pattern"
| "strict" "pattern" "at" "level" natural
| "closed" "binder"
| "custom" IDENT at_level_opt OPT binder_interp
]
at_level_opt: [
| "at" level
|
]
binder_interp: [
| "as" "ident"
| "as" "name"
| "as" "pattern"
| "as" "strict" "pattern"
]
simple_tactic: [
| "btauto"
| "congruence"
| "congruence" natural
| "congruence" "with" LIST1 constr
| "congruence" natural "with" LIST1 constr
| "f_equal"
| "firstorder" OPT tactic firstorder_using
| "firstorder" OPT tactic "with" LIST1 preident
| "firstorder" OPT tactic firstorder_using "with" LIST1 preident
| "gintuition" OPT tactic
| "functional" "inversion" quantified_hypothesis OPT reference (* funind plugin *)
| "functional" "induction" lconstr fun_ind_using with_names (* funind plugin *)
| "soft" "functional" "induction" LIST1 constr fun_ind_using with_names (* funind plugin *)
| "reflexivity"
| "exact" casted_constr
| "assumption"
| "etransitivity"
| "cut" constr
| "exact_no_check" constr
| "vm_cast_no_check" constr
| "native_cast_no_check" constr
| "casetype" constr
| "elimtype" constr
| "lapply" constr
| "transitivity" constr
| "left"
| "eleft"
| "left" "with" bindings
| "eleft" "with" bindings
| "right"
| "eright"
| "right" "with" bindings
| "eright" "with" bindings
| "constructor"
| "constructor" nat_or_var
| "constructor" nat_or_var "with" bindings
| "econstructor"
| "econstructor" nat_or_var
| "econstructor" nat_or_var "with" bindings
| "specialize" constr_with_bindings
| "specialize" constr_with_bindings "as" simple_intropattern
| "symmetry"
| "symmetry" "in" in_clause
| "split"
| "esplit"
| "split" "with" bindings
| "esplit" "with" bindings
| "exists"
| "exists" LIST1 bindings SEP ","
| "eexists"
| "eexists" LIST1 bindings SEP ","
| "intros" "until" quantified_hypothesis
| "intro"
| "intro" ident
| "intro" ident "at" "top"
| "intro" ident "at" "bottom"
| "intro" ident "after" hyp
| "intro" ident "before" hyp
| "intro" "at" "top"
| "intro" "at" "bottom"
| "intro" "after" hyp
| "intro" "before" hyp
| "move" hyp "at" "top"
| "move" hyp "at" "bottom"
| "move" hyp "after" hyp
| "move" hyp "before" hyp
| "rename" LIST1 rename SEP ","
| "revert" LIST1 hyp
| "simple" "induction" quantified_hypothesis
| "simple" "destruct" quantified_hypothesis
| "admit"
| "fix" ident natural
| "cofix" ident
| "clear" LIST0 hyp
| "clear" "-" LIST1 hyp
| "clearbody" LIST1 hyp
| "generalize" "dependent" constr
| "replace" uconstr "with" constr clause by_arg_tac
| "replace" "->" uconstr clause
| "replace" "<-" uconstr clause
| "replace" uconstr clause
| "simplify_eq"
| "simplify_eq" destruction_arg
| "esimplify_eq"
| "esimplify_eq" destruction_arg
| "discriminate"
| "discriminate" destruction_arg
| "ediscriminate"
| "ediscriminate" destruction_arg
| "injection"
| "injection" destruction_arg
| "einjection"
| "einjection" destruction_arg
| "injection" "as" LIST0 simple_intropattern
| "injection" destruction_arg "as" LIST0 simple_intropattern
| "einjection" "as" LIST0 simple_intropattern
| "einjection" destruction_arg "as" LIST0 simple_intropattern
| "simple" "injection"
| "simple" "injection" destruction_arg
| "dependent" "rewrite" orient constr
| "dependent" "rewrite" orient constr "in" hyp
| "cutrewrite" orient constr
| "cutrewrite" orient constr "in" hyp
| "decompose" "sum" constr
| "decompose" "record" constr
| "absurd" constr
| "contradiction" OPT constr_with_bindings
| "autorewrite" "with" LIST1 preident clause
| "autorewrite" "with" LIST1 preident clause "using" tactic
| "autorewrite" "*" "with" LIST1 preident clause
| "autorewrite" "*" "with" LIST1 preident clause "using" tactic
| "rewrite" "*" orient uconstr "in" hyp "at" occurrences by_arg_tac
| "rewrite" "*" orient uconstr "at" occurrences "in" hyp by_arg_tac
| "rewrite" "*" orient uconstr "in" hyp by_arg_tac
| "rewrite" "*" orient uconstr "at" occurrences by_arg_tac
| "rewrite" "*" orient uconstr by_arg_tac
| "refine" uconstr
| "simple" "refine" uconstr
| "notypeclasses" "refine" uconstr
| "simple" "notypeclasses" "refine" uconstr
| "solve_constraints"
| "subst" LIST1 hyp
| "subst"
| "simple" "subst"
| "evar" test_lpar_id_colon "(" ident ":" lconstr ")"
| "evar" constr
| "instantiate" "(" ident ":=" lglob ")"
| "instantiate" "(" integer ":=" lglob ")" hloc
| "instantiate"
| "stepl" constr "by" tactic
| "stepl" constr
| "stepr" constr "by" tactic
| "stepr" constr
| "generalize_eqs" hyp
| "dependent" "generalize_eqs" hyp
| "generalize_eqs_vars" hyp
| "dependent" "generalize_eqs_vars" hyp
| "specialize_eqs" hyp
| "hresolve_core" "(" ident ":=" constr ")" "at" nat_or_var "in" constr
| "hresolve_core" "(" ident ":=" constr ")" "in" constr
| "hget_evar" nat_or_var
| "destauto"
| "destauto" "in" hyp
| "transparent_abstract" tactic3
| "transparent_abstract" tactic3 "using" ident
| "constr_eq" constr constr
| "constr_eq_strict" constr constr
| "constr_eq_nounivs" constr constr
| "is_evar" constr
| "has_evar" constr
| "is_var" constr
| "is_fix" constr
| "is_cofix" constr
| "is_ind" constr
| "is_constructor" constr
| "is_proj" constr
| "is_const" constr
| "shelve"
| "shelve_unifiable"
| "unshelve" tactic1
| "give_up"
| "cycle" int_or_var
| "swap" int_or_var int_or_var
| "revgoals"
| "guard" test
| "decompose" "[" LIST1 constr "]" constr
| "optimize_heap"
| "with_strategy" strategy_level_or_var "[" LIST1 smart_global "]" tactic3
| "eassumption"
| "eexact" constr
| "trivial" auto_using hintbases
| "info_trivial" auto_using hintbases
| "debug" "trivial" auto_using hintbases
| "auto" OPT nat_or_var auto_using hintbases
| "info_auto" OPT nat_or_var auto_using hintbases
| "debug" "auto" OPT nat_or_var auto_using hintbases
| "eauto" OPT nat_or_var OPT nat_or_var auto_using hintbases
| "new" "auto" OPT nat_or_var auto_using hintbases
| "debug" "eauto" OPT nat_or_var OPT nat_or_var auto_using hintbases
| "info_eauto" OPT nat_or_var OPT nat_or_var auto_using hintbases
| "dfs" "eauto" OPT nat_or_var auto_using hintbases
| "bfs" "eauto" OPT nat_or_var auto_using hintbases
| "autounfold" hintbases clause_dft_concl
| "autounfold_one" hintbases "in" hyp
| "autounfold_one" hintbases
| "unify" constr constr
| "unify" constr constr "with" preident
| "typeclasses" "eauto" "bfs" OPT nat_or_var "with" LIST1 preident
| "typeclasses" "eauto" OPT nat_or_var "with" LIST1 preident
| "typeclasses" "eauto" "bfs" OPT nat_or_var
| "typeclasses" "eauto" OPT nat_or_var
| "head_of_constr" ident constr
| "not_evar" constr
| "is_ground" constr
| "autoapply" constr "using" preident
| "autoapply" constr "with" preident
| "progress_evars" tactic
| "decide" "equality"
| "compare" constr constr
| "rewrite_strat" rewstrategy "in" hyp
| "rewrite_strat" rewstrategy
| "rewrite_db" preident "in" hyp
| "rewrite_db" preident
| "substitute" orient glob_constr_with_bindings
| "setoid_rewrite" orient glob_constr_with_bindings
| "setoid_rewrite" orient glob_constr_with_bindings "in" hyp
| "setoid_rewrite" orient glob_constr_with_bindings "at" occurrences
| "setoid_rewrite" orient glob_constr_with_bindings "at" occurrences "in" hyp
| "setoid_rewrite" orient glob_constr_with_bindings "in" hyp "at" occurrences
| "setoid_symmetry"
| "setoid_symmetry" "in" hyp
| "setoid_reflexivity"
| "setoid_transitivity" constr
| "setoid_etransitivity"
| "intros" ne_intropatterns
| "intros"
| "eintros" ne_intropatterns
| "eintros"
| "apply" LIST1 constr_with_bindings_arg SEP "," in_hyp_as
| "eapply" LIST1 constr_with_bindings_arg SEP "," in_hyp_as
| "simple" "apply" LIST1 constr_with_bindings_arg SEP "," in_hyp_as
| "simple" "eapply" LIST1 constr_with_bindings_arg SEP "," in_hyp_as
| "elim" constr_with_bindings_arg OPT eliminator
| "eelim" constr_with_bindings_arg OPT eliminator
| "case" induction_clause_list
| "ecase" induction_clause_list
| "fix" ident natural "with" LIST1 fixdecl
| "cofix" ident "with" LIST1 cofixdecl
| "pose" bindings_with_parameters
| "pose" constr as_name
| "epose" bindings_with_parameters
| "epose" constr as_name
| "set" bindings_with_parameters clause_dft_concl
| "set" constr as_name clause_dft_concl
| "eset" bindings_with_parameters clause_dft_concl
| "eset" constr as_name clause_dft_concl
| "remember" constr as_name eqn_ipat clause_dft_all
| "eremember" constr as_name eqn_ipat clause_dft_all
| "assert" test_lpar_id_coloneq "(" identref ":=" lconstr ")"
| "eassert" test_lpar_id_coloneq "(" identref ":=" lconstr ")"
| "assert" test_lpar_id_colon "(" identref ":" lconstr ")" by_tactic
| "eassert" test_lpar_id_colon "(" identref ":" lconstr ")" by_tactic
| "enough" test_lpar_id_colon "(" identref ":" lconstr ")" by_tactic
| "eenough" test_lpar_id_colon "(" identref ":" lconstr ")" by_tactic
| "assert" constr as_ipat by_tactic
| "eassert" constr as_ipat by_tactic
| "pose" "proof" test_lpar_id_coloneq "(" identref ":=" lconstr ")"
| "epose" "proof" test_lpar_id_coloneq "(" identref ":=" lconstr ")"
| "pose" "proof" lconstr as_ipat
| "epose" "proof" lconstr as_ipat
| "enough" constr as_ipat by_tactic
| "eenough" constr as_ipat by_tactic
| "generalize" constr
| "generalize" constr LIST1 constr
| "generalize" constr lookup_at_as_comma occs as_name LIST0 [ "," pattern_occ as_name ]
| "induction" induction_clause_list
| "einduction" induction_clause_list
| "destruct" induction_clause_list
| "edestruct" induction_clause_list
| "rewrite" LIST1 oriented_rewriter SEP "," clause_dft_concl by_tactic
| "erewrite" LIST1 oriented_rewriter SEP "," clause_dft_concl by_tactic
| "dependent" [ "simple" "inversion" | "inversion" | "inversion_clear" ] quantified_hypothesis as_or_and_ipat OPT [ "with" constr ]
| "simple" "inversion" quantified_hypothesis as_or_and_ipat in_hyp_list
| "inversion" quantified_hypothesis as_or_and_ipat in_hyp_list
| "inversion_clear" quantified_hypothesis as_or_and_ipat in_hyp_list
| "inversion" quantified_hypothesis "using" constr in_hyp_list
| "red" clause_dft_concl
| "hnf" clause_dft_concl
| "simpl" delta_flag OPT ref_or_pattern_occ clause_dft_concl
| "cbv" strategy_flag clause_dft_concl
| "cbn" strategy_flag clause_dft_concl
| "lazy" strategy_flag clause_dft_concl
| "compute" delta_flag clause_dft_concl
| "vm_compute" OPT ref_or_pattern_occ clause_dft_concl
| "native_compute" OPT ref_or_pattern_occ clause_dft_concl
| "unfold" LIST1 unfold_occ SEP "," clause_dft_concl
| "fold" LIST1 constr clause_dft_concl
| "pattern" LIST1 pattern_occ SEP "," clause_dft_concl
| "change" conversion clause_dft_concl
| "change_no_check" conversion clause_dft_concl
| "start" "ltac" "profiling"
| "stop" "ltac" "profiling"
| "reset" "ltac" "profile"
| "show" "ltac" "profile"
| "show" "ltac" "profile" "cutoff" integer
| "show" "ltac" "profile" string
| "restart_timer" OPT string
| "finish_timing" OPT string
| "finish_timing" "(" string ")" OPT string
| "psatz_Z" nat_or_var tactic (* micromega plugin *)
| "psatz_Z" tactic (* micromega plugin *)
| "xlia" tactic (* micromega plugin *)
| "xnlia" tactic (* micromega plugin *)
| "xnra" tactic (* micromega plugin *)
| "xnqa" tactic (* micromega plugin *)
| "sos_Z" tactic (* micromega plugin *)
| "sos_Q" tactic (* micromega plugin *)
| "sos_R" tactic (* micromega plugin *)
| "lra_Q" tactic (* micromega plugin *)
| "lra_R" tactic (* micromega plugin *)
| "psatz_R" nat_or_var tactic (* micromega plugin *)
| "psatz_R" tactic (* micromega plugin *)
| "psatz_Q" nat_or_var tactic (* micromega plugin *)
| "psatz_Q" tactic (* micromega plugin *)
| "zify_iter_specs" (* micromega plugin *)
| "zify_op" (* micromega plugin *)
| "zify_saturate" (* micromega plugin *)
| "zify_iter_let" tactic (* micromega plugin *)
| "zify_elim_let" (* micromega plugin *)
| "nsatz_compute" constr (* nsatz plugin *)
| "protect_fv" string "in" ident (* ring plugin *)
| "protect_fv" string (* ring plugin *)
| "ring_lookup" tactic0 "[" LIST0 constr "]" LIST1 constr (* ring plugin *)
| "field_lookup" tactic "[" LIST0 constr "]" LIST1 constr (* ring plugin *)
| "rtauto"
| "by" ssrhintarg (* SSR plugin *)
| "clear" natural (* SSR plugin *)
| "move" ssrmovearg ssrrpat (* SSR plugin *)
| "move" ssrmovearg ssrclauses (* SSR plugin *)
| "move" ssrrpat (* SSR plugin *)
| "move" (* SSR plugin *)
| "case" ssrcasearg ssrclauses (* SSR plugin *)
| "case" (* SSR plugin *)
| "elim" ssrarg ssrclauses (* SSR plugin *)
| "elim" (* SSR plugin *)
| "apply" ssrapplyarg (* SSR plugin *)
| "apply" (* SSR plugin *)
| "exact" ssrexactarg (* SSR plugin *)
| "exact" (* SSR plugin *)
| "exact" "<:" lconstr (* SSR plugin *)
| "congr" ssrcongrarg (* SSR plugin *)
| "ssrinstancesofruleL2R" ssrterm (* SSR plugin *)
| "ssrinstancesofruleR2L" ssrterm (* SSR plugin *)
| "rewrite" ssrrwargs ssrclauses (* SSR plugin *)
| "unlock" ssrunlockargs ssrclauses (* SSR plugin *)
| "pose" ssrfixfwd (* SSR plugin *)
| "pose" ssrcofixfwd (* SSR plugin *)
| "pose" ssrfwdid ssrposefwd (* SSR plugin *)
| "set" ssrfwdid ssrsetfwd ssrclauses (* SSR plugin *)
| "abstract" ssrdgens (* SSR plugin *)
| "have" ssrhavefwdwbinders (* SSR plugin *)
| "have" "suff" ssrhpats_nobs ssrhavefwd (* SSR plugin *)
| "have" "suffices" ssrhpats_nobs ssrhavefwd (* SSR plugin *)
| "suff" "have" ssrhpats_nobs ssrhavefwd (* SSR plugin *)
| "suffices" "have" ssrhpats_nobs ssrhavefwd (* SSR plugin *)
| "suff" ssrsufffwd (* SSR plugin *)
| "suffices" ssrsufffwd (* SSR plugin *)
| "wlog" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "wlog" "suff" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "wlog" "suffices" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "without" "loss" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "without" "loss" "suff" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "without" "loss" "suffices" ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "gen" "have" ssrclear ssr_idcomma ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "generally" "have" ssrclear ssr_idcomma ssrhpats_nobs ssrwlogfwd ssrhint (* SSR plugin *)
| "under" ssrrwarg (* SSR plugin *)
| "under" ssrrwarg ssrintros_ne (* SSR plugin *)
| "under" ssrrwarg ssrintros_ne "do" ssrhint3arg (* SSR plugin *)
| "under" ssrrwarg "do" ssrhint3arg (* SSR plugin *)
| "ssrinstancesoftpat" G_SSRMATCHING_cpattern (* SSR plugin *)
]
mlname: [
| preident (* extraction plugin *)
| string (* extraction plugin *)
]
int_or_id: [
| preident (* extraction plugin *)
| integer (* extraction plugin *)
]
language: [
| "OCaml" (* extraction plugin *)
| "Haskell" (* extraction plugin *)
| "Scheme" (* extraction plugin *)
| "JSON" (* extraction plugin *)
]
firstorder_using: [
| "using" LIST1 reference SEP ","
|
]
fun_ind_using: [
| "using" constr_with_bindings (* funind plugin *)
| (* funind plugin *)
]
with_names: [
| "as" simple_intropattern (* funind plugin *)
| (* funind plugin *)
]
constr_comma_sequence': [
| constr "," constr_comma_sequence' (* funind plugin *)
| constr (* funind plugin *)
]
auto_using': [
| "using" constr_comma_sequence' (* funind plugin *)
| (* funind plugin *)
]
function_fix_definition: [
| Vernac.fix_definition (* funind plugin *)
]
fun_scheme_arg: [
| ident ":=" "Induction" "for" reference "Sort" sort_family (* funind plugin *)
]
orient: [
| "->"
| "<-"
|
]
EXTRAARGS_natural: [
| _natural
]
occurrences: [
| LIST1 integer
| hyp
]
glob: [
| constr
]
EXTRAARGS_lconstr: [
| l_constr
]
lglob: [
| EXTRAARGS_lconstr
]
casted_constr: [
| constr
]
hloc: [
|
| "in" "|-" "*"
| "in" ident
| "in" "(" "Type" "of" ident ")"
| "in" "(" "Value" "of" ident ")"
| "in" "(" "type" "of" ident ")"
| "in" "(" "value" "of" ident ")"
]
rename: [
| ident "into" ident
]
by_arg_tac: [
| "by" tactic3
|
]
in_clause: [
| in_clause'
| "*" occs
| "*" "|-" concl_occ
| "|-" concl_occ
| LIST1 hypident_occ SEP "," "|-" concl_occ
| LIST1 hypident_occ SEP ","
]
test_lpar_id_colon: [
| local_test_lpar_id_colon
]
EXTRAARGS_strategy_level: [
| strategy_level0
]
strategy_level_or_var: [
| EXTRAARGS_strategy_level
| identref
]
comparison: [
| "="
| "<"
| "<="
| ">"
| ">="
]
test: [
| int_or_var comparison int_or_var
]
hintbases: [
| "with" "*"
| "with" LIST1 preident
|
]
auto_using: [
| "using" LIST1 uconstr SEP ","
|
]
hints_path_atom: [
| LIST1 global
| "_"
]
hints_path: [
| "(" hints_path ")"
| hints_path "*"
| "emp"
| "eps"
| hints_path "|" hints_path
| hints_path_atom
| hints_path hints_path
]
opthints: [
| ":" LIST1 preident
|
]
debug: [
| "debug"
|
]
eauto_search_strategy_name: [
| "bfs"
| "dfs"
]
eauto_search_strategy: [
| "(" eauto_search_strategy_name ")"
|
]
tactic_then_last: [
| "|" LIST0 ( OPT ltac_expr5 ) SEP "|"
|
]
for_each_goal: [
| ltac_expr5 "|" for_each_goal
| ltac_expr5 ".." tactic_then_last
| ".." tactic_then_last
| ltac_expr5
| "|" for_each_goal
|
]
tactic_then_locality: [
| "[" OPT ">"
]
ltac_expr5: [
| binder_tactic
| ltac_expr4
]
ltac_expr4: [
| ltac_expr3 ";" binder_tactic
| ltac_expr3 ";" ltac_expr3
| ltac_expr3 ";" tactic_then_locality for_each_goal "]"
| ltac_expr3
| ltac_expr5 ";" "first" ssr_first_else (* SSR plugin *)
| ltac_expr5 ";" "first" ssrseqarg (* SSR plugin *)
| ltac_expr5 ";" "last" ssrseqarg (* SSR plugin *)
]
ltac_expr3: [
| "try" ltac_expr3
| "do" nat_or_var ltac_expr3
| "timeout" nat_or_var ltac_expr3
| "time" OPT string ltac_expr3
| "repeat" ltac_expr3
| "progress" ltac_expr3
| "once" ltac_expr3
| "exactly_once" ltac_expr3
| "infoH" ltac_expr3
| "abstract" ltac_expr2
| "abstract" ltac_expr2 "using" ident
| "only" selector ":" ltac_expr3
| ltac_expr2
| "do" ssrmmod ssrdotac ssrclauses (* SSR plugin *)
| "do" ssrortacarg ssrclauses (* SSR plugin *)
| "do" nat_or_var ssrmmod ssrdotac ssrclauses (* SSR plugin *)
| "abstract" ssrdgens (* SSR plugin *)
]
ltac_expr2: [
| ltac_expr1 "+" binder_tactic
| ltac_expr1 "+" ltac_expr2
| "tryif" ltac_expr5 "then" ltac_expr5 "else" ltac_expr2
| ltac_expr1 "||" binder_tactic
| ltac_expr1 "||" ltac_expr2
| ltac_expr1
]
ltac_expr1: [
| match_key "goal" "with" match_context_list "end"
| match_key "reverse" "goal" "with" match_context_list "end"
| match_key ltac_expr5 "with" match_list "end"
| "first" "[" LIST0 ltac_expr5 SEP "|" "]"
| "solve" "[" LIST0 ltac_expr5 SEP "|" "]"
| "idtac" LIST0 message_token
| failkw [ nat_or_var | ] LIST0 message_token
| simple_tactic
| tactic_value
| reference LIST0 tactic_arg
| ltac_expr0
| ltac_expr5 ssrintros_ne (* SSR plugin *)
]
ltac_expr0: [
| "(" ltac_expr5 ")"
| "[" ">" for_each_goal "]"
| tactic_atom
| ssrparentacarg (* SSR plugin *)
]
failkw: [
| "fail"
| "gfail"
]
binder_tactic: [
| "fun" LIST1 input_fun "=>" ltac_expr5
| "let" [ "rec" | ] LIST1 let_clause SEP "with" "in" ltac_expr5
]
tactic_arg: [
| tactic_value
| Constr.constr
| "()"
]
tactic_value: [
| constr_eval
| "fresh" LIST0 fresh_id
| "type_term" uconstr
| "numgoals"
]
fresh_id: [
| STRING
| qualid
]
constr_eval: [
| "eval" red_expr "in" Constr.constr
| "context" identref "[" Constr.lconstr "]"
| "type" "of" Constr.constr
]
constr_may_eval: [
| constr_eval
| Constr.constr
]
tactic_atom: [
| integer
| reference
| "()"
]
match_key: [
| "match"
| "lazymatch"
| "multimatch"
]
input_fun: [
| "_"
| ident
]
let_clause: [
| identref ":=" ltac_expr5
| "_" ":=" ltac_expr5
| identref LIST1 input_fun ":=" ltac_expr5
]
match_pattern: [
| "context" OPT Constr.ident "[" Constr.cpattern "]"
| Constr.cpattern
]
match_hyp: [
| name ":" match_pattern
| name ":=" "[" match_pattern "]" ":" match_pattern
| name ":=" match_pattern
]
match_context_rule: [
| LIST0 match_hyp SEP "," "|-" match_pattern "=>" ltac_expr5
| "[" LIST0 match_hyp SEP "," "|-" match_pattern "]" "=>" ltac_expr5
| "_" "=>" ltac_expr5
]
match_context_list: [
| LIST1 match_context_rule SEP "|"
| "|" LIST1 match_context_rule SEP "|"
]
match_rule: [
| match_pattern "=>" ltac_expr5
| "_" "=>" ltac_expr5
]
match_list: [
| LIST1 match_rule SEP "|"
| "|" LIST1 match_rule SEP "|"
]
message_token: [
| identref
| STRING
| natural
]
ltac_def_kind: [
| ":="
| "::="
]
tacdef_body: [
| Constr.global LIST1 input_fun ltac_def_kind ltac_expr5
| Constr.global ltac_def_kind ltac_expr5
]
tactic: [
| ltac_expr5
]
range_selector: [
| natural "-" natural
| natural
]
range_selector_or_nth: [
| natural "-" natural OPT [ "," LIST1 range_selector SEP "," ]
| natural OPT [ "," LIST1 range_selector SEP "," ]
]
selector: [
| range_selector_or_nth
| test_bracket_ident "[" ident "]"
]
toplevel_selector: [
| selector ":"
| "!" ":"
| "all" ":"
]
tactic_mode: [
| OPT toplevel_selector G_vernac.query_command
| OPT toplevel_selector "{"
| OPT ltac_selector OPT ltac_info tactic ltac_use_default
| "par" ":" OPT ltac_info tactic ltac_use_default
]
ltac_selector: [
| toplevel_selector
]
ltac_info: [
| "Info" natural
]
ltac_use_default: [
| "."
| "..."
]
ltac_tactic_level: [
| "(" "at" "level" natural ")"
]
ltac_production_sep: [
| "," string
]
ltac_production_item: [
| string
| ident "(" ident OPT ltac_production_sep ")"
| ident
]
ltac_tacdef_body: [
| tacdef_body
]
withtac: [
| "with" Tactic.tactic
|
]
Constr.closed_binder: [
| "(" Prim.name ":" Constr.lconstr "|" Constr.lconstr ")"
]
glob_constr_with_bindings: [
| constr_with_bindings
]
rewstrategy: [
| glob
| "<-" constr
| "subterms" rewstrategy
| "subterm" rewstrategy
| "innermost" rewstrategy
| "outermost" rewstrategy
| "bottomup" rewstrategy
| "topdown" rewstrategy
| "id"
| "fail"
| "refl"
| "progress" rewstrategy
| "try" rewstrategy
| "any" rewstrategy
| "repeat" rewstrategy
| rewstrategy ";" rewstrategy
| "(" rewstrategy ")"
| "choice" rewstrategy rewstrategy
| "old_hints" preident
| "hints" preident
| "terms" LIST0 constr
| "eval" red_expr
| "fold" constr
]
int_or_var: [
| integer
| identref
]
nat_or_var: [
| natural
| identref
]
id_or_meta: [
| identref
]
open_constr: [
| constr
]
uconstr: [
| constr
]
destruction_arg: [
| natural
| test_lpar_id_rpar constr_with_bindings
| constr_with_bindings_arg
]
constr_with_bindings_arg: [
| ">" constr_with_bindings
| constr_with_bindings
]
quantified_hypothesis: [
| ident
| natural
]
conversion: [
| constr
| constr "with" constr
| constr "at" occs_nums "with" constr
]
occs_nums: [
| LIST1 nat_or_var
| "-" LIST1 nat_or_var
]
occs: [
| "at" occs_nums
|
]
pattern_occ: [
| constr occs
]
ref_or_pattern_occ: [
| smart_global occs
| constr occs
]
unfold_occ: [
| smart_global occs
]
intropatterns: [
| LIST0 intropattern
]
ne_intropatterns: [
| LIST1 intropattern
]
or_and_intropattern: [
| "[" LIST1 intropatterns SEP "|" "]"
| "()"
| "(" simple_intropattern ")"
| "(" simple_intropattern "," LIST1 simple_intropattern SEP "," ")"
| "(" simple_intropattern "&" LIST1 simple_intropattern SEP "&" ")"
]
equality_intropattern: [
| "->"
| "<-"
| "[=" intropatterns "]"
]
naming_intropattern: [
| pattern_ident
| "?"
| ident
]
intropattern: [
| simple_intropattern
| "*"
| "**"
]
simple_intropattern: [
| simple_intropattern_closed LIST0 [ "%" term0 ]
]
simple_intropattern_closed: [
| or_and_intropattern
| equality_intropattern
| "_"
| naming_intropattern
]
simple_binding: [
| "(" ident ":=" lconstr ")"
| "(" natural ":=" lconstr ")"
]
bindings: [
| test_lpar_idnum_coloneq LIST1 simple_binding
| LIST1 constr
]
constr_with_bindings: [
| constr with_bindings
]
with_bindings: [
| "with" bindings
|
]
red_flag: [
| "beta"
| "iota"
| "match"
| "fix"
| "cofix"
| "zeta"
| "delta" delta_flag
]
delta_flag: [
| "-" "[" LIST1 smart_global "]"
| "[" LIST1 smart_global "]"
|
]
strategy_flag: [
| LIST1 red_flag
| delta_flag
]
red_expr: [
| "red"
| "hnf"
| "simpl" delta_flag OPT ref_or_pattern_occ
| "cbv" strategy_flag
| "cbn" strategy_flag
| "lazy" strategy_flag
| "compute" delta_flag
| "vm_compute" OPT ref_or_pattern_occ
| "native_compute" OPT ref_or_pattern_occ
| "unfold" LIST1 unfold_occ SEP ","
| "fold" LIST1 constr
| "pattern" LIST1 pattern_occ SEP ","
| IDENT
]
hypident: [
| id_or_meta
| "(" "type" "of" id_or_meta ")"
| "(" "value" "of" id_or_meta ")"
| "(" "type" "of" Prim.identref ")" (* SSR plugin *)
| "(" "value" "of" Prim.identref ")" (* SSR plugin *)
]
hypident_occ: [
| hypident occs
]
clause_dft_concl: [
| "in" in_clause
| occs
|
]
clause_dft_all: [
| "in" in_clause
|
]
opt_clause: [
| "in" in_clause
| "at" occs_nums
|
]
concl_occ: [
| "*" occs
|
]
in_hyp_list: [
| "in" LIST1 id_or_meta
|
]
in_hyp_as: [
| "in" LIST1 [ id_or_meta as_ipat ] SEP ","
|
]
orient_rw: [
| "->"
| "<-"
|
]
simple_binder: [
| name
| "(" LIST1 name ":" lconstr ")"
]
fixdecl: [
| "(" ident LIST0 simple_binder struct_annot ":" lconstr ")"
]
struct_annot: [
| "{" "struct" name "}"
|
]
cofixdecl: [
| "(" ident LIST0 simple_binder ":" lconstr ")"
]
bindings_with_parameters: [
| check_for_coloneq "(" ident LIST0 simple_binder ":=" lconstr ")"
]
eliminator: [
| "using" constr_with_bindings
]
as_ipat: [
| "as" simple_intropattern
|
]
or_and_intropattern_loc: [
| or_and_intropattern
| identref
]
as_or_and_ipat: [
| "as" or_and_intropattern_loc
| "as" equality_intropattern
|
]
eqn_ipat: [
| "eqn" ":" naming_intropattern
|
]
as_name: [
| "as" ident
|
]
by_tactic: [
| "by" ltac_expr3
|
]
rewriter: [
| "!" constr_with_bindings_arg
| [ "?" | LEFTQMARK ] constr_with_bindings_arg
| natural "!" constr_with_bindings_arg
| natural [ "?" | LEFTQMARK ] constr_with_bindings_arg
| natural constr_with_bindings_arg
| constr_with_bindings_arg
]
oriented_rewriter: [
| orient_rw rewriter
]
induction_clause: [
| destruction_arg as_or_and_ipat eqn_ipat opt_clause
]
induction_clause_list: [
| LIST1 induction_clause SEP "," OPT eliminator opt_clause
]
ring_mod: [
| "decidable" constr (* ring plugin *)
| "abstract" (* ring plugin *)
| "morphism" constr (* ring plugin *)
| "constants" "[" tactic "]" (* ring plugin *)
| "closed" "[" LIST1 global "]" (* ring plugin *)
| "preprocess" "[" tactic "]" (* ring plugin *)
| "postprocess" "[" tactic "]" (* ring plugin *)
| "setoid" constr constr (* ring plugin *)
| "sign" constr (* ring plugin *)
| "power" constr "[" LIST1 global "]" (* ring plugin *)
| "power_tac" constr "[" tactic "]" (* ring plugin *)
| "div" constr (* ring plugin *)
]
ring_mods: [
| "(" LIST1 ring_mod SEP "," ")" (* ring plugin *)
]
field_mod: [
| ring_mod (* ring plugin *)
| "completeness" constr (* ring plugin *)
]
field_mods: [
| "(" LIST1 field_mod SEP "," ")" (* ring plugin *)
]
ssrtacarg: [
| ltac_expr5 (* SSR plugin *)
]
ssrtac3arg: [
| ltac_expr3 (* SSR plugin *)
]
ssrtclarg: [
| ssrtacarg (* SSR plugin *)
]
ssrhyp: [
| ident (* SSR plugin *)
]
ssrhoi_hyp: [
| ident (* SSR plugin *)
]
ssrhoi_id: [
| ident (* SSR plugin *)
]
ssrsimpl_ne: [
| "//=" (* SSR plugin *)
| "/=" (* SSR plugin *)
| test_ssrslashnum11 "/" natural "/" natural "=" (* SSR plugin *)
| test_ssrslashnum10 "/" natural "/" (* SSR plugin *)
| test_ssrslashnum10 "/" natural "=" (* SSR plugin *)
| test_ssrslashnum10 "/" natural "/=" (* SSR plugin *)
| test_ssrslashnum10 "/" natural "/" "=" (* SSR plugin *)
| test_ssrslashnum01 "//" natural "=" (* SSR plugin *)
| test_ssrslashnum00 "//" (* SSR plugin *)
]
ssrclear_ne: [
| "{" LIST1 ssrhyp "}" (* SSR plugin *)
]
ssrclear: [
| ssrclear_ne (* SSR plugin *)
| (* SSR plugin *)
]
ssrindex: [
]
ssrocc: [
| natural LIST0 natural (* SSR plugin *)
| "-" LIST0 natural (* SSR plugin *)
| "+" LIST0 natural (* SSR plugin *)
]
ssrmmod: [
| "!" (* SSR plugin *)
| LEFTQMARK (* SSR plugin *)
| "?" (* SSR plugin *)
]
ssrmult_ne: [
| natural ssrmmod (* SSR plugin *)
| ssrmmod (* SSR plugin *)
]
ssrmult: [
| ssrmult_ne (* SSR plugin *)
| (* SSR plugin *)
]
ssrdocc: [
| "{" ssrocc "}" (* SSR plugin *)
| "{" LIST0 ssrhyp "}" (* SSR plugin *)
]
ssrterm: [
| ssrtermkind Pcoq.Constr.constr (* SSR plugin *)
]
ast_closure_term: [
| term_annotation constr (* SSR plugin *)
]
ast_closure_lterm: [
| term_annotation lconstr (* SSR plugin *)
]
ssrbwdview: [
| test_not_ssrslashnum "/" Pcoq.Constr.constr (* SSR plugin *)
| test_not_ssrslashnum "/" Pcoq.Constr.constr ssrbwdview (* SSR plugin *)
]
ssrfwdview: [
| test_not_ssrslashnum "/" ast_closure_term (* SSR plugin *)
| test_not_ssrslashnum "/" ast_closure_term ssrfwdview (* SSR plugin *)
]
ident_no_do: [
| test_ident_no_do IDENT (* SSR plugin *)
]
ssripat: [
| "_" (* SSR plugin *)
| "*" (* SSR plugin *)
| ">" (* SSR plugin *)
| ident_no_do (* SSR plugin *)
| "?" (* SSR plugin *)
| "+" (* SSR plugin *)
| "++" (* SSR plugin *)
| ssrsimpl_ne (* SSR plugin *)
| ssrdocc "->" (* SSR plugin *)
| ssrdocc "<-" (* SSR plugin *)
| ssrdocc (* SSR plugin *)
| "->" (* SSR plugin *)
| "<-" (* SSR plugin *)
| "-" (* SSR plugin *)
| "-/" "=" (* SSR plugin *)
| "-/=" (* SSR plugin *)
| "-/" "/" (* SSR plugin *)
| "-//" (* SSR plugin *)
| "-/" integer "/" (* SSR plugin *)
| "-/" "/=" (* SSR plugin *)
| "-//" "=" (* SSR plugin *)
| "-//=" (* SSR plugin *)
| "-/" integer "/=" (* SSR plugin *)
| "-/" integer "/" integer "=" (* SSR plugin *)
| ssrfwdview (* SSR plugin *)
| "[" ":" LIST0 ident "]" (* SSR plugin *)
| "[:" LIST0 ident "]" (* SSR plugin *)
| ssrcpat (* SSR plugin *)
]
ssripats: [
| ssripat ssripats (* SSR plugin *)
| (* SSR plugin *)
]
ssriorpat: [
| ssripats "|" ssriorpat (* SSR plugin *)
| ssripats "|-" ">" ssriorpat (* SSR plugin *)
| ssripats "|-" ssriorpat (* SSR plugin *)
| ssripats "|->" ssriorpat (* SSR plugin *)
| ssripats "||" ssriorpat (* SSR plugin *)
| ssripats "|||" ssriorpat (* SSR plugin *)
| ssripats "||||" ssriorpat (* SSR plugin *)
| ssripats (* SSR plugin *)
]
ssrcpat: [
| test_nohidden "[" hat "]" (* SSR plugin *)
| test_nohidden "[" ssriorpat "]" (* SSR plugin *)
| test_nohidden "[=" ssriorpat "]" (* SSR plugin *)
]
hat: [
| "^" ident (* SSR plugin *)
| "^" "~" ident (* SSR plugin *)
| "^" "~" natural (* SSR plugin *)
| "^~" ident (* SSR plugin *)
| "^~" natural (* SSR plugin *)
]
ssripats_ne: [
| ssripat ssripats (* SSR plugin *)
]
ssrhpats: [
| ssripats (* SSR plugin *)
]
ssrhpats_wtransp: [
| ssripats (* SSR plugin *)
| ssripats "@" ssripats (* SSR plugin *)
]
ssrhpats_nobs: [
| ssripats (* SSR plugin *)
]
ssrrpat: [
| "->" (* SSR plugin *)
| "<-" (* SSR plugin *)
]
ssrintros_ne: [
| "=>" ssripats_ne (* SSR plugin *)
]
ssrintros: [
| ssrintros_ne (* SSR plugin *)
| (* SSR plugin *)
]
ssrintrosarg: [
]
ssrfwdid: [
| test_ssrfwdid Prim.ident (* SSR plugin *)
]
ssrortacs: [
| ssrtacarg "|" ssrortacs (* SSR plugin *)
| ssrtacarg "|" (* SSR plugin *)
| ssrtacarg (* SSR plugin *)
| "|" ssrortacs (* SSR plugin *)
| "|" (* SSR plugin *)
]
ssrhintarg: [
| "[" "]" (* SSR plugin *)
| "[" ssrortacs "]" (* SSR plugin *)
| ssrtacarg (* SSR plugin *)
]
ssrhint3arg: [
| "[" "]" (* SSR plugin *)
| "[" ssrortacs "]" (* SSR plugin *)
| ssrtac3arg (* SSR plugin *)
]
ssrortacarg: [
| "[" ssrortacs "]" (* SSR plugin *)
]
ssrhint: [
| (* SSR plugin *)
| "by" ssrhintarg (* SSR plugin *)
]
ssrwgen: [
| ssrclear_ne (* SSR plugin *)
| ssrhoi_hyp (* SSR plugin *)
| "@" ssrhoi_hyp (* SSR plugin *)
| "(" ssrhoi_id ":=" lcpattern ")" (* SSR plugin *)
| "(" ssrhoi_id ")" (* SSR plugin *)
| "(@" ssrhoi_id ":=" lcpattern ")" (* SSR plugin *)
| "(" "@" ssrhoi_id ":=" lcpattern ")" (* SSR plugin *)
]
ssrclausehyps: [
| ssrwgen "," ssrclausehyps (* SSR plugin *)
| ssrwgen ssrclausehyps (* SSR plugin *)
| ssrwgen (* SSR plugin *)
]
ssrclauses: [
| "in" ssrclausehyps "|-" "*" (* SSR plugin *)
| "in" ssrclausehyps "|-" (* SSR plugin *)
| "in" ssrclausehyps "*" (* SSR plugin *)
| "in" ssrclausehyps (* SSR plugin *)
| "in" "|-" "*" (* SSR plugin *)
| "in" "*" (* SSR plugin *)
| "in" "*" "|-" (* SSR plugin *)
| (* SSR plugin *)
]
ssrfwd: [
| ":=" ast_closure_lterm (* SSR plugin *)
| ":" ast_closure_lterm ":=" ast_closure_lterm (* SSR plugin *)
]
ssrbvar: [
| ident (* SSR plugin *)
| "_" (* SSR plugin *)
]
ssrbinder: [
| ssrbvar (* SSR plugin *)
| "(" ssrbvar ")" (* SSR plugin *)
| "(" ssrbvar ":" lconstr ")" (* SSR plugin *)
| "(" ssrbvar LIST1 ssrbvar ":" lconstr ")" (* SSR plugin *)
| "(" ssrbvar ":" lconstr ":=" lconstr ")" (* SSR plugin *)
| "(" ssrbvar ":=" lconstr ")" (* SSR plugin *)
| [ "of" | "&" ] term99 (* SSR plugin *)
]
ssrstruct: [
| "{" "struct" ident "}" (* SSR plugin *)
| (* SSR plugin *)
]
ssrposefwd: [
| LIST0 ssrbinder ssrfwd (* SSR plugin *)
]
ssrfixfwd: [
| "fix" ssrbvar LIST0 ssrbinder ssrstruct ssrfwd (* SSR plugin *)
]
ssrcofixfwd: [
| "cofix" ssrbvar LIST0 ssrbinder ssrfwd (* SSR plugin *)
]
ssrsetfwd: [
| ":" ast_closure_lterm ":=" "{" ssrocc "}" cpattern (* SSR plugin *)
| ":" ast_closure_lterm ":=" lcpattern (* SSR plugin *)
| ":=" "{" ssrocc "}" cpattern (* SSR plugin *)
| ":=" lcpattern (* SSR plugin *)
]
ssrhavefwd: [
| ":" ast_closure_lterm ssrhint (* SSR plugin *)
| ":" ast_closure_lterm ":=" ast_closure_lterm (* SSR plugin *)
| ":" ast_closure_lterm ":=" (* SSR plugin *)
| ":=" ast_closure_lterm (* SSR plugin *)
]
ssrhavefwdwbinders: [
| ssrhpats_wtransp LIST0 ssrbinder ssrhavefwd (* SSR plugin *)
]
ssrdoarg: [
]
ssrseqarg: [
| ssrswap (* SSR plugin *)
| ssrseqidx ssrortacarg OPT ssrorelse (* SSR plugin *)
| ssrseqidx ssrswap (* SSR plugin *)
| ltac_expr3 (* SSR plugin *)
]
ssrseqidx: [
| test_ssrseqvar Prim.ident (* SSR plugin *)
| Prim.natural (* SSR plugin *)
]
ssrswap: [
| "first" (* SSR plugin *)
| "last" (* SSR plugin *)
]
ssrorelse: [
| "||" ltac_expr2 (* SSR plugin *)
]
Prim.ident: [
| IDENT ssr_null_entry (* SSR plugin *)
]
ssrparentacarg: [
| "(" ltac_expr5 ")" (* SSR plugin *)
]
ssrdotac: [
| ltac_expr3 (* SSR plugin *)
| ssrortacarg (* SSR plugin *)
]
ssrseqdir: [
]
ssr_first: [
| ssr_first ssrintros_ne (* SSR plugin *)
| "[" LIST0 ltac_expr5 SEP "|" "]" (* SSR plugin *)
]
ssr_first_else: [
| ssr_first ssrorelse (* SSR plugin *)
| ssr_first (* SSR plugin *)
]
ssrgen: [
| ssrdocc cpattern (* SSR plugin *)
| cpattern (* SSR plugin *)
]
ssrdgens_tl: [
| "{" LIST1 ssrhyp "}" cpattern ssrdgens_tl (* SSR plugin *)
| "{" LIST1 ssrhyp "}" (* SSR plugin *)
| "{" ssrocc "}" cpattern ssrdgens_tl (* SSR plugin *)
| "/" ssrdgens_tl (* SSR plugin *)
| cpattern ssrdgens_tl (* SSR plugin *)
| (* SSR plugin *)
]
ssrdgens: [
| ":" ssrgen ssrdgens_tl (* SSR plugin *)
]
ssreqid: [
| test_ssreqid ssreqpat (* SSR plugin *)
| test_ssreqid (* SSR plugin *)
]
ssreqpat: [
| Prim.ident (* SSR plugin *)
| "_" (* SSR plugin *)
| "?" (* SSR plugin *)
| "+" (* SSR plugin *)
| ssrdocc "->" (* SSR plugin *)
| ssrdocc "<-" (* SSR plugin *)
| "->" (* SSR plugin *)
| "<-" (* SSR plugin *)
]
ssrarg: [
| ssrfwdview ssreqid ssrdgens ssrintros (* SSR plugin *)
| ssrfwdview ssrclear ssrintros (* SSR plugin *)
| ssreqid ssrdgens ssrintros (* SSR plugin *)
| ssrclear_ne ssrintros (* SSR plugin *)
| ssrintros_ne (* SSR plugin *)
]
ssrmovearg: [
| ssrarg (* SSR plugin *)
]
ssrcasearg: [
| ssrarg (* SSR plugin *)
]
ssragen: [
| "{" LIST1 ssrhyp "}" ssrterm (* SSR plugin *)
| ssrterm (* SSR plugin *)
]
ssragens: [
| "{" LIST1 ssrhyp "}" ssrterm ssragens (* SSR plugin *)
| "{" LIST1 ssrhyp "}" (* SSR plugin *)
| ssrterm ssragens (* SSR plugin *)
| (* SSR plugin *)
]
ssrapplyarg: [
| ":" ssragen ssragens ssrintros (* SSR plugin *)
| ssrclear_ne ssrintros (* SSR plugin *)
| ssrintros_ne (* SSR plugin *)
| ssrbwdview ":" ssragen ssragens ssrintros (* SSR plugin *)
| ssrbwdview ssrclear ssrintros (* SSR plugin *)
]
ssrexactarg: [
| ":" ssragen ssragens (* SSR plugin *)
| ssrbwdview ssrclear (* SSR plugin *)
| ssrclear_ne (* SSR plugin *)
]
ssrcongrarg: [
| natural constr ssrdgens (* SSR plugin *)
| natural constr (* SSR plugin *)
| constr ssrdgens (* SSR plugin *)
| constr (* SSR plugin *)
]
ssrrwocc: [
| "{" LIST0 ssrhyp "}" (* SSR plugin *)
| "{" ssrocc "}" (* SSR plugin *)
| (* SSR plugin *)
]
ssrrule_ne: [
| test_not_ssrslashnum [ "/" ssrterm | ssrterm | ssrsimpl_ne ] (* SSR plugin *)
| ssrsimpl_ne (* SSR plugin *)
]
ssrrule: [
| ssrrule_ne (* SSR plugin *)
| (* SSR plugin *)
]
ssrpattern_squarep: [
| "[" rpattern "]" (* SSR plugin *)
| (* SSR plugin *)
]
ssrpattern_ne_squarep: [
| "[" rpattern "]" (* SSR plugin *)
]
ssrrwarg: [
| "-" ssrmult ssrrwocc ssrpattern_squarep ssrrule_ne (* SSR plugin *)
| "-/" ssrterm (* SSR plugin *)
| ssrmult_ne ssrrwocc ssrpattern_squarep ssrrule_ne (* SSR plugin *)
| "{" LIST1 ssrhyp "}" ssrpattern_ne_squarep ssrrule_ne (* SSR plugin *)
| "{" LIST1 ssrhyp "}" ssrrule (* SSR plugin *)
| "{" ssrocc "}" ssrpattern_squarep ssrrule_ne (* SSR plugin *)
| "{" "}" ssrpattern_squarep ssrrule_ne (* SSR plugin *)
| ssrpattern_ne_squarep ssrrule_ne (* SSR plugin *)
| ssrrule_ne (* SSR plugin *)
]
ssrrwargs: [
| test_ssr_rw_syntax LIST1 ssrrwarg (* SSR plugin *)
]
ssrunlockarg: [
| "{" ssrocc "}" ssrterm (* SSR plugin *)
| ssrterm (* SSR plugin *)
]
ssrunlockargs: [
| LIST0 ssrunlockarg (* SSR plugin *)
]
ssrsufffwd: [
| ssrhpats LIST0 ssrbinder ":" ast_closure_lterm ssrhint (* SSR plugin *)
]
ssrwlogfwd: [
| ":" LIST0 ssrwgen "/" ast_closure_lterm (* SSR plugin *)
]
ssr_idcomma: [
| (* SSR plugin *)
| test_idcomma [ IDENT | "_" ] "," (* SSR plugin *)
]
ssr_rtype: [
| "return" term100 (* SSR plugin *)
]
ssr_mpat: [
| pattern200 (* SSR plugin *)
]
ssr_dpat: [
| ssr_mpat "in" pattern200 ssr_rtype (* SSR plugin *)
| ssr_mpat ssr_rtype (* SSR plugin *)
| ssr_mpat (* SSR plugin *)
]
ssr_dthen: [
| ssr_dpat "then" lconstr (* SSR plugin *)
]
ssr_elsepat: [
| "else" (* SSR plugin *)
]
ssr_else: [
| ssr_elsepat lconstr (* SSR plugin *)
]
ssrhintref: [
| constr (* SSR plugin *)
| constr "|" natural (* SSR plugin *)
]
ssrviewpos: [
| "for" "move" "/" (* SSR plugin *)
| "for" "apply" "/" (* SSR plugin *)
| "for" "apply" "/" "/" (* SSR plugin *)
| "for" "apply" "//" (* SSR plugin *)
| (* SSR plugin *)
]
ssrviewposspc: [
| ssrviewpos (* SSR plugin *)
]
rpattern: [
| lconstr (* SSR plugin *)
| "in" lconstr (* SSR plugin *)
| lconstr "in" lconstr (* SSR plugin *)
| "in" lconstr "in" lconstr (* SSR plugin *)
| lconstr "in" lconstr "in" lconstr (* SSR plugin *)
| lconstr "as" lconstr "in" lconstr (* SSR plugin *)
]
G_SSRMATCHING_cpattern: [
| "Qed" constr (* SSR plugin *)
| ssrtermkind constr (* SSR plugin *)
]
lcpattern: [
| "Qed" lconstr (* SSR plugin *)
| ssrtermkind lconstr (* SSR plugin *)
]
ssrpatternarg: [
| rpattern (* SSR plugin *)
]
ssr_search_item: [
| string (* SSR plugin *)
| string "%" preident (* SSR plugin *)
| constr_pattern (* SSR plugin *)
]
ssr_search_arg: [
| "-" ssr_search_item ssr_search_arg (* SSR plugin *)
| ssr_search_item ssr_search_arg (* SSR plugin *)
| (* SSR plugin *)
]
ssr_modlocs: [
| (* SSR plugin *)
| "in" LIST1 modloc (* SSR plugin *)
]
modloc: [
| "-" global (* SSR plugin *)
| global (* SSR plugin *)
]
deprecated_number_modifier: [
|
| "(" "warning" "after" bignat ")"
| "(" "abstract" "after" bignat ")"
]
number_string_mapping: [
| reference "=>" reference
| "[" reference "]" "=>" reference
]
number_string_via: [
| "via" reference "mapping" "[" LIST1 number_string_mapping SEP "," "]"
]
number_modifier: [
| "warning" "after" bignat
| "abstract" "after" bignat
| number_string_via
]
number_options: [
| "(" LIST1 number_modifier SEP "," ")"
]
string_option: [
| "(" number_string_via ")"
]
tac2pat1: [
| Prim.qualid LIST1 tac2pat0 (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
| "[" "]" (* Ltac2 plugin *)
| tac2pat0 "::" tac2pat0 (* Ltac2 plugin *)
| tac2pat0 (* Ltac2 plugin *)
]
tac2pat0: [
| "_" (* Ltac2 plugin *)
| "()" (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
| "(" atomic_tac2pat ")" (* Ltac2 plugin *)
]
atomic_tac2pat: [
| (* Ltac2 plugin *)
| tac2pat1 ":" ltac2_type5 (* Ltac2 plugin *)
| tac2pat1 "," LIST0 tac2pat1 SEP "," (* Ltac2 plugin *)
| tac2pat1 (* Ltac2 plugin *)
]
ltac2_expr6: [
| ltac2_expr5 ";" ltac2_expr6 (* Ltac2 plugin *)
| ltac2_expr5 (* Ltac2 plugin *)
]
ltac2_expr5: [
| "fun" LIST1 G_LTAC2_input_fun type_cast "=>" ltac2_expr6 (* Ltac2 plugin *)
| "let" rec_flag LIST1 G_LTAC2_let_clause SEP "with" "in" ltac2_expr6 (* Ltac2 plugin *)
| "match" ltac2_expr5 "with" G_LTAC2_branches "end" (* Ltac2 plugin *)
| "if" ltac2_expr5 "then" ltac2_expr5 "else" ltac2_expr5 (* Ltac2 plugin *)
| ltac2_expr4 (* Ltac2 plugin *)
]
ltac2_expr4: [
| ltac2_expr3 (* Ltac2 plugin *)
]
ltac2_expr3: [
| ltac2_expr2 "," LIST1 ltac2_expr2 SEP "," (* Ltac2 plugin *)
| ltac2_expr2 (* Ltac2 plugin *)
]
ltac2_expr2: [
| ltac2_expr1 "::" ltac2_expr2 (* Ltac2 plugin *)
| ltac2_expr1 (* Ltac2 plugin *)
]
ltac2_expr1: [
| ltac2_expr0 LIST1 ltac2_expr0 (* Ltac2 plugin *)
| ltac2_expr0 ".(" Prim.qualid ")" (* Ltac2 plugin *)
| ltac2_expr0 ".(" Prim.qualid ")" ":=" ltac2_expr5 (* Ltac2 plugin *)
| ltac2_expr0 (* Ltac2 plugin *)
]
ltac2_expr0: [
| "(" ltac2_expr6 ")" (* Ltac2 plugin *)
| "(" ltac2_expr6 ":" ltac2_type5 ")" (* Ltac2 plugin *)
| "()" (* Ltac2 plugin *)
| "(" ")" (* Ltac2 plugin *)
| "[" LIST0 ltac2_expr5 SEP ";" "]" (* Ltac2 plugin *)
| "{" tac2rec_fieldexprs "}" (* Ltac2 plugin *)
| G_LTAC2_tactic_atom (* Ltac2 plugin *)
]
G_LTAC2_branches: [
| (* Ltac2 plugin *)
| "|" LIST1 branch SEP "|" (* Ltac2 plugin *)
| LIST1 branch SEP "|" (* Ltac2 plugin *)
]
branch: [
| tac2pat1 "=>" ltac2_expr6 (* Ltac2 plugin *)
]
rec_flag: [
| "rec" (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
mut_flag: [
| "mutable" (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
ltac2_typevar: [
| "'" Prim.ident (* Ltac2 plugin *)
]
G_LTAC2_tactic_atom: [
| Prim.integer (* Ltac2 plugin *)
| Prim.string (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
| "@" Prim.ident (* Ltac2 plugin *)
| "&" lident (* Ltac2 plugin *)
| "'" Constr.constr (* Ltac2 plugin *)
| "constr" ":" "(" Constr.lconstr ")" (* Ltac2 plugin *)
| "open_constr" ":" "(" Constr.lconstr ")" (* Ltac2 plugin *)
| "ident" ":" "(" lident ")" (* Ltac2 plugin *)
| "pat" ":" "(" Constr.cpattern ")" (* Ltac2 plugin *)
| "reference" ":" "(" globref ")" (* Ltac2 plugin *)
| "ltac1" ":" "(" ltac1_expr_in_env ")" (* Ltac2 plugin *)
| "ltac1val" ":" "(" ltac1_expr_in_env ")" (* Ltac2 plugin *)
]
ltac1_expr_in_env: [
| test_ltac1_env LIST0 locident "|-" ltac_expr5 (* Ltac2 plugin *)
| ltac_expr5 (* Ltac2 plugin *)
]
tac2expr_in_env: [
| test_ltac1_env LIST0 locident "|-" ltac2_expr6 (* Ltac2 plugin *)
| ltac2_expr6 (* Ltac2 plugin *)
]
type_cast: [
| (* Ltac2 plugin *)
| ":" ltac2_type5 (* Ltac2 plugin *)
]
G_LTAC2_let_clause: [
| let_binder type_cast ":=" ltac2_expr6 (* Ltac2 plugin *)
]
let_binder: [
| LIST1 G_LTAC2_input_fun (* Ltac2 plugin *)
]
ltac2_type5: [
| ltac2_type2 "->" ltac2_type5 (* Ltac2 plugin *)
| ltac2_type2 (* Ltac2 plugin *)
]
ltac2_type2: [
| ltac2_type1 "*" LIST1 ltac2_type1 SEP "*" (* Ltac2 plugin *)
| ltac2_type1 (* Ltac2 plugin *)
]
ltac2_type1: [
| ltac2_type0 Prim.qualid (* Ltac2 plugin *)
| ltac2_type0 (* Ltac2 plugin *)
]
ltac2_type0: [
| "(" LIST1 ltac2_type5 SEP "," ")" OPT Prim.qualid (* Ltac2 plugin *)
| ltac2_typevar (* Ltac2 plugin *)
| "_" (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
]
locident: [
| Prim.ident (* Ltac2 plugin *)
]
G_LTAC2_binder: [
| "_" (* Ltac2 plugin *)
| Prim.ident (* Ltac2 plugin *)
]
G_LTAC2_input_fun: [
| tac2pat0 (* Ltac2 plugin *)
]
tac2def_body: [
| G_LTAC2_binder LIST0 G_LTAC2_input_fun type_cast ":=" ltac2_expr6 (* Ltac2 plugin *)
]
tac2def_val: [
| mut_flag rec_flag LIST1 tac2def_body SEP "with" (* Ltac2 plugin *)
]
tac2def_mut: [
| "Set" Prim.qualid OPT [ "as" locident ] ":=" ltac2_expr6 (* Ltac2 plugin *)
]
tac2typ_knd: [
| ltac2_type5 (* Ltac2 plugin *)
| "[" ".." "]" (* Ltac2 plugin *)
| "[" tac2alg_constructors "]" (* Ltac2 plugin *)
| "{" tac2rec_fields "}" (* Ltac2 plugin *)
]
tac2alg_constructors: [
| "|" LIST1 tac2alg_constructor SEP "|" (* Ltac2 plugin *)
| LIST0 tac2alg_constructor SEP "|" (* Ltac2 plugin *)
]
tac2alg_constructor: [
| Prim.ident (* Ltac2 plugin *)
| Prim.ident "(" LIST0 ltac2_type5 SEP "," ")" (* Ltac2 plugin *)
]
tac2rec_fields: [
| tac2rec_field ";" tac2rec_fields (* Ltac2 plugin *)
| tac2rec_field ";" (* Ltac2 plugin *)
| tac2rec_field (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
tac2rec_field: [
| mut_flag Prim.ident ":" ltac2_type5 (* Ltac2 plugin *)
]
tac2rec_fieldexprs: [
| tac2rec_fieldexpr ";" tac2rec_fieldexprs (* Ltac2 plugin *)
| tac2rec_fieldexpr ";" (* Ltac2 plugin *)
| tac2rec_fieldexpr (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
tac2rec_fieldexpr: [
| Prim.qualid ":=" ltac2_expr1 (* Ltac2 plugin *)
]
tac2typ_prm: [
| (* Ltac2 plugin *)
| ltac2_typevar (* Ltac2 plugin *)
| "(" LIST1 ltac2_typevar SEP "," ")" (* Ltac2 plugin *)
]
tac2typ_def: [
| tac2typ_prm Prim.qualid tac2type_body (* Ltac2 plugin *)
]
tac2type_body: [
| (* Ltac2 plugin *)
| ":=" tac2typ_knd (* Ltac2 plugin *)
| "::=" tac2typ_knd (* Ltac2 plugin *)
]
tac2def_typ: [
| "Type" rec_flag LIST1 tac2typ_def SEP "with" (* Ltac2 plugin *)
]
tac2def_ext: [
| "@" "external" locident ":" ltac2_type5 ":=" Prim.string Prim.string (* Ltac2 plugin *)
]
syn_node: [
| "_" (* Ltac2 plugin *)
| Prim.ident (* Ltac2 plugin *)
]
ltac2_scope: [
| Prim.string (* Ltac2 plugin *)
| Prim.integer (* Ltac2 plugin *)
| syn_node (* Ltac2 plugin *)
| syn_node "(" LIST1 ltac2_scope SEP "," ")" (* Ltac2 plugin *)
]
syn_level: [
| (* Ltac2 plugin *)
| ":" Prim.natural (* Ltac2 plugin *)
]
tac2def_syn: [
| "Notation" LIST1 ltac2_scope syn_level ":=" ltac2_expr6 (* Ltac2 plugin *)
]
lident: [
| Prim.ident (* Ltac2 plugin *)
]
globref: [
| "&" Prim.ident (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
]
anti: [
| "$" Prim.ident (* Ltac2 plugin *)
]
ident_or_anti: [
| lident (* Ltac2 plugin *)
| "$" Prim.ident (* Ltac2 plugin *)
]
lnatural: [
| Prim.natural (* Ltac2 plugin *)
]
q_ident: [
| ident_or_anti (* Ltac2 plugin *)
]
qhyp: [
| anti (* Ltac2 plugin *)
| lnatural (* Ltac2 plugin *)
| lident (* Ltac2 plugin *)
]
G_LTAC2_simple_binding: [
| "(" qhyp ":=" Constr.lconstr ")" (* Ltac2 plugin *)
]
G_LTAC2_bindings: [
| test_lpar_idnum_coloneq LIST1 G_LTAC2_simple_binding (* Ltac2 plugin *)
| LIST1 Constr.constr (* Ltac2 plugin *)
]
q_bindings: [
| G_LTAC2_bindings (* Ltac2 plugin *)
]
q_with_bindings: [
| G_LTAC2_with_bindings (* Ltac2 plugin *)
]
G_LTAC2_intropatterns: [
| LIST0 nonsimple_intropattern (* Ltac2 plugin *)
]
G_LTAC2_or_and_intropattern: [
| "[" LIST1 G_LTAC2_intropatterns SEP "|" "]" (* Ltac2 plugin *)
| "()" (* Ltac2 plugin *)
| "(" G_LTAC2_simple_intropattern ")" (* Ltac2 plugin *)
| "(" G_LTAC2_simple_intropattern "," LIST1 G_LTAC2_simple_intropattern SEP "," ")" (* Ltac2 plugin *)
| "(" G_LTAC2_simple_intropattern "&" LIST1 G_LTAC2_simple_intropattern SEP "&" ")" (* Ltac2 plugin *)
]
G_LTAC2_equality_intropattern: [
| "->" (* Ltac2 plugin *)
| "<-" (* Ltac2 plugin *)
| "[=" G_LTAC2_intropatterns "]" (* Ltac2 plugin *)
]
G_LTAC2_naming_intropattern: [
| LEFTQMARK lident (* Ltac2 plugin *)
| "?$" lident (* Ltac2 plugin *)
| "?" (* Ltac2 plugin *)
| ident_or_anti (* Ltac2 plugin *)
]
nonsimple_intropattern: [
| G_LTAC2_simple_intropattern (* Ltac2 plugin *)
| "*" (* Ltac2 plugin *)
| "**" (* Ltac2 plugin *)
]
G_LTAC2_simple_intropattern: [
| G_LTAC2_simple_intropattern_closed (* Ltac2 plugin *)
]
G_LTAC2_simple_intropattern_closed: [
| G_LTAC2_or_and_intropattern (* Ltac2 plugin *)
| G_LTAC2_equality_intropattern (* Ltac2 plugin *)
| "_" (* Ltac2 plugin *)
| G_LTAC2_naming_intropattern (* Ltac2 plugin *)
]
q_intropatterns: [
| G_LTAC2_intropatterns (* Ltac2 plugin *)
]
q_intropattern: [
| G_LTAC2_simple_intropattern (* Ltac2 plugin *)
]
nat_or_anti: [
| lnatural (* Ltac2 plugin *)
| "$" Prim.ident (* Ltac2 plugin *)
]
G_LTAC2_eqn_ipat: [
| "eqn" ":" G_LTAC2_naming_intropattern (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_with_bindings: [
| "with" G_LTAC2_bindings (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_constr_with_bindings: [
| Constr.constr G_LTAC2_with_bindings (* Ltac2 plugin *)
]
G_LTAC2_destruction_arg: [
| lnatural (* Ltac2 plugin *)
| lident (* Ltac2 plugin *)
| G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
]
q_destruction_arg: [
| G_LTAC2_destruction_arg (* Ltac2 plugin *)
]
G_LTAC2_as_or_and_ipat: [
| "as" G_LTAC2_or_and_intropattern (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_occs_nums: [
| LIST1 nat_or_anti (* Ltac2 plugin *)
| "-" nat_or_anti LIST0 nat_or_anti (* Ltac2 plugin *)
]
G_LTAC2_occs: [
| "at" G_LTAC2_occs_nums (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_hypident: [
| ident_or_anti (* Ltac2 plugin *)
| "(" "type" "of" ident_or_anti ")" (* Ltac2 plugin *)
| "(" "value" "of" ident_or_anti ")" (* Ltac2 plugin *)
]
G_LTAC2_hypident_occ: [
| G_LTAC2_hypident G_LTAC2_occs (* Ltac2 plugin *)
]
G_LTAC2_in_clause: [
| "*" G_LTAC2_occs (* Ltac2 plugin *)
| "*" "|-" G_LTAC2_concl_occ (* Ltac2 plugin *)
| LIST0 G_LTAC2_hypident_occ SEP "," "|-" G_LTAC2_concl_occ (* Ltac2 plugin *)
| LIST0 G_LTAC2_hypident_occ SEP "," (* Ltac2 plugin *)
]
clause: [
| "in" G_LTAC2_in_clause (* Ltac2 plugin *)
| "at" G_LTAC2_occs_nums (* Ltac2 plugin *)
]
q_clause: [
| clause (* Ltac2 plugin *)
]
G_LTAC2_concl_occ: [
| "*" G_LTAC2_occs (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_induction_clause: [
| G_LTAC2_destruction_arg G_LTAC2_as_or_and_ipat G_LTAC2_eqn_ipat OPT clause (* Ltac2 plugin *)
]
q_induction_clause: [
| G_LTAC2_induction_clause (* Ltac2 plugin *)
]
G_LTAC2_conversion: [
| Constr.constr (* Ltac2 plugin *)
| Constr.constr "with" Constr.constr (* Ltac2 plugin *)
]
q_conversion: [
| G_LTAC2_conversion (* Ltac2 plugin *)
]
ltac2_orient: [
| "->" (* Ltac2 plugin *)
| "<-" (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_rewriter: [
| "!" G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
| [ "?" | LEFTQMARK ] G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
| lnatural "!" G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
| lnatural [ "?" | LEFTQMARK ] G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
| lnatural G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
| G_LTAC2_constr_with_bindings (* Ltac2 plugin *)
]
G_LTAC2_oriented_rewriter: [
| ltac2_orient G_LTAC2_rewriter (* Ltac2 plugin *)
]
q_rewriting: [
| G_LTAC2_oriented_rewriter (* Ltac2 plugin *)
]
G_LTAC2_tactic_then_last: [
| "|" LIST0 ( OPT ltac2_expr6 ) SEP "|" (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_for_each_goal: [
| ltac2_expr6 "|" G_LTAC2_for_each_goal (* Ltac2 plugin *)
| ltac2_expr6 ".." G_LTAC2_tactic_then_last (* Ltac2 plugin *)
| ".." G_LTAC2_tactic_then_last (* Ltac2 plugin *)
| ltac2_expr6 (* Ltac2 plugin *)
| "|" G_LTAC2_for_each_goal (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
q_dispatch: [
| G_LTAC2_for_each_goal (* Ltac2 plugin *)
]
q_occurrences: [
| G_LTAC2_occs (* Ltac2 plugin *)
]
ltac2_red_flag: [
| "beta" (* Ltac2 plugin *)
| "iota" (* Ltac2 plugin *)
| "match" (* Ltac2 plugin *)
| "fix" (* Ltac2 plugin *)
| "cofix" (* Ltac2 plugin *)
| "zeta" (* Ltac2 plugin *)
| "delta" G_LTAC2_delta_flag (* Ltac2 plugin *)
]
refglobal: [
| "&" Prim.ident (* Ltac2 plugin *)
| Prim.qualid (* Ltac2 plugin *)
| "$" Prim.ident (* Ltac2 plugin *)
]
q_reference: [
| refglobal (* Ltac2 plugin *)
]
refglobals: [
| LIST1 refglobal (* Ltac2 plugin *)
]
G_LTAC2_delta_flag: [
| "-" "[" refglobals "]" (* Ltac2 plugin *)
| "[" refglobals "]" (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_strategy_flag: [
| LIST1 ltac2_red_flag (* Ltac2 plugin *)
| G_LTAC2_delta_flag (* Ltac2 plugin *)
]
q_strategy_flag: [
| G_LTAC2_strategy_flag (* Ltac2 plugin *)
]
hintdb: [
| "*" (* Ltac2 plugin *)
| LIST1 ident_or_anti (* Ltac2 plugin *)
]
q_hintdb: [
| hintdb (* Ltac2 plugin *)
]
G_LTAC2_match_pattern: [
| "context" OPT Prim.ident "[" Constr.cpattern "]" (* Ltac2 plugin *)
| Constr.cpattern (* Ltac2 plugin *)
]
G_LTAC2_match_rule: [
| G_LTAC2_match_pattern "=>" ltac2_expr6 (* Ltac2 plugin *)
]
G_LTAC2_match_list: [
| LIST1 G_LTAC2_match_rule SEP "|" (* Ltac2 plugin *)
| "|" LIST1 G_LTAC2_match_rule SEP "|" (* Ltac2 plugin *)
]
q_constr_matching: [
| G_LTAC2_match_list (* Ltac2 plugin *)
]
gmatch_hyp_pattern: [
| Prim.name ":" G_LTAC2_match_pattern (* Ltac2 plugin *)
]
gmatch_pattern: [
| "[" LIST0 gmatch_hyp_pattern SEP "," "|-" G_LTAC2_match_pattern "]" (* Ltac2 plugin *)
]
gmatch_rule: [
| gmatch_pattern "=>" ltac2_expr6 (* Ltac2 plugin *)
]
goal_match_list: [
| LIST1 gmatch_rule SEP "|" (* Ltac2 plugin *)
| "|" LIST1 gmatch_rule SEP "|" (* Ltac2 plugin *)
]
q_goal_matching: [
| goal_match_list (* Ltac2 plugin *)
]
move_location: [
| "at" "top" (* Ltac2 plugin *)
| "at" "bottom" (* Ltac2 plugin *)
| "after" ident_or_anti (* Ltac2 plugin *)
| "before" ident_or_anti (* Ltac2 plugin *)
]
q_move_location: [
| move_location (* Ltac2 plugin *)
]
G_LTAC2_as_name: [
| (* Ltac2 plugin *)
| "as" ident_or_anti (* Ltac2 plugin *)
]
pose: [
| test_lpar_id_coloneq "(" ident_or_anti ":=" Constr.lconstr ")" (* Ltac2 plugin *)
| Constr.constr G_LTAC2_as_name (* Ltac2 plugin *)
]
q_pose: [
| pose (* Ltac2 plugin *)
]
G_LTAC2_as_ipat: [
| "as" G_LTAC2_simple_intropattern (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
G_LTAC2_by_tactic: [
| "by" ltac2_expr6 (* Ltac2 plugin *)
| (* Ltac2 plugin *)
]
assertion: [
| test_lpar_id_coloneq "(" ident_or_anti ":=" Constr.lconstr ")" (* Ltac2 plugin *)
| test_lpar_id_colon "(" ident_or_anti ":" Constr.lconstr ")" G_LTAC2_by_tactic (* Ltac2 plugin *)
| Constr.constr G_LTAC2_as_ipat G_LTAC2_by_tactic (* Ltac2 plugin *)
]
q_assert: [
| assertion (* Ltac2 plugin *)
]
ltac2_entry: [
| tac2def_val (* Ltac2 plugin *)
| tac2def_typ (* Ltac2 plugin *)
| tac2def_ext (* Ltac2 plugin *)
| tac2def_syn (* Ltac2 plugin *)
| tac2def_mut (* Ltac2 plugin *)
]
ltac2_expr: [
| _ltac2_expr (* Ltac2 plugin *)
]
tac2mode: [
| ltac2_expr6 ltac_use_default (* Ltac2 plugin *)
| G_vernac.query_command (* Ltac2 plugin *)
]