| [ IDENT "whd" ] -> `Whd
| [ IDENT "normalize" ] -> `Normalize ]
];
+ sequent_pattern_spec : [
+ [ hyp_paths =
+ LIST0
+ [ id = IDENT ;
+ path = OPT [SYMBOL ":" ; path = term -> path ] ->
+ (id,match path with Some p -> p | None -> CicAst.UserInput) ]
+ SEP SYMBOL ";";
+ goal_path = OPT [ SYMBOL <:unicode<vdash>>; term = term -> term ] ->
+ let goal_path =
+ match goal_path with
+ None -> CicAst.UserInput
+ | Some goal_path -> goal_path
+ in
+ hyp_paths,goal_path
+ ]
+ ];
pattern_spec: [
- [ wanted = OPT term;
- hyp_paths_and_goal_path =
- OPT [
- "in";
- hyp_paths =
- LIST0
- [ id = IDENT ;
- path = OPT [SYMBOL ":" ; path = term -> path ] ->
- (id,match path with Some p -> p | None -> CicAst.UserInput) ]
- SEP SYMBOL ";";
- goal_path = OPT [ SYMBOL <:unicode<vdash>>; term = term -> term ] ->
- let goal_path =
- match goal_path with
- None -> CicAst.UserInput
- | Some goal_path -> goal_path
- in
- hyp_paths,goal_path
- ] ->
- let hyp_paths,goal_path =
- match hyp_paths_and_goal_path with
- None -> [], CicAst.UserInput
- | Some (hyp_paths,goal_path) -> hyp_paths,goal_path
+ [ res = OPT [
+ "in";
+ wanted_and_sps =
+ [ "match" ; wanted = term ;
+ sps = OPT [ "in"; sps = sequent_pattern_spec -> sps ] ->
+ Some wanted,sps
+ | sps = sequent_pattern_spec ->
+ None,Some sps
+ ] ->
+ let wanted,hyp_paths,goal_path =
+ match wanted_and_sps with
+ wanted,None -> wanted, [], CicAst.UserInput
+ | wanted,Some (hyp_paths,goal_path) -> wanted,hyp_paths,goal_path
in
- wanted, hyp_paths, goal_path ]
+ wanted, hyp_paths, goal_path ] ->
+ match res with
+ None -> None,[],CicAst.UserInput
+ | Some ps -> ps]
];
direction: [
[ SYMBOL ">" -> `LeftToRight