6in
vexpr ::=vexpr ; vexpr |vexpr ; [ (vexpr |)* vexpr ] |vatom vatom ::=Fun input_fun+ -> expr |Rec rec_clause |Rec (rec_clause And)* rec_clause In expr |Match Context With (context_rule |)* context_rule |( vexpr ) |vatom Orelse vatom |Do (int | ident) vatom |Repeat vatom |Try vatom |First [ (vexpr |)* vexpr ] |Solve [ (vexpr |)* vexpr ] |Idtac |Fail |primitive_tactic |arg
Table 10.3: Values of Ltac
| Let ident1 = expr1 |
| And ident2 = expr2 |
| ... |
| And identn = exprn In |
| expr |
| Match term With |
| term1 -> expr1 |
| | term2 -> expr2 |
| ... |
| | termn -> exprn |
| | _ -> exprn+1 |
| Match Context With |
| [context_hyps1,1;...;context_hyps1,m1 |-term1] -> expr1 |
| |[context_hyps2,1;...;context_hyps2,m2 |-term2] -> expr2 |
| ... |
| |[context_hypsn,1;...;context_hypsn,mn |-termn] -> exprn |
| |_ -> exprn+1 |
| Recursive Tactic Definition |
| ident1 input_fun1,1 ... input_fun1,m1 := expr1 |
| And ident2 input_fun2,1 ... input_fun2,m2 := expr2 |
| ... |
| And identn input_funn,1 ... input_funn,mn := exprn |