GrafiteAst.Cut (loc, ident, t)
| IDENT "decide"; IDENT "equality" ->
GrafiteAst.DecideEquality loc
- | IDENT "decompose"; where = tactic_term ->
- GrafiteAst.Decompose (loc, where)
+ | IDENT "decompose"; types = OPT ident_list0; what = IDENT;
+ OPT "names"; num = OPT [num = int -> num];
+ idents = OPT ident_list0 ->
+ let idents = match idents with None -> [] | Some idents -> idents in
+ let types = match types with None -> [] | Some types -> types in
+ let to_spec id = GrafiteAst.Ident id in
+ GrafiteAst.Decompose (loc, List.rev_map to_spec types, what, idents)
| IDENT "discriminate"; t = tactic_term ->
GrafiteAst.Discriminate (loc, t)
| IDENT "elim"; what = tactic_term;