+ [], function _ -> Meta (newmeta+2,irl)
+ }
+ | SET { [], function _ -> Sort Set }
+ | PROP { [], function _ -> Sort Prop }
+ | TYPE { [], function _ -> Sort Type }
+ | LPAREN expr CAST expr RPAREN
+ { let dom1,mk_expr1 = $2 in
+ let dom2,mk_expr2 = $4 in
+ let dom = union dom1 dom2 in
+ dom, function interp -> Cast ((mk_expr1 interp),(mk_expr2 interp))
+ }
+ | META LBRACKET substitutionlist RBRACKET
+ { let dom,mk_substitutionlist = $3 in
+ dom, function interp -> Meta ($1, mk_substitutionlist interp)
+ }
+ | LPAREN expr expr exprlist RPAREN
+ { let dom1,mk_expr1 = $2 in
+ let dom2,mk_expr2 = $3 in
+ let dom3,mk_exprlist = $4 in
+ let dom = union dom1 (union dom2 dom3) in
+ dom,
+ function interp ->
+ Appl ([mk_expr1 interp ; mk_expr2 interp]@(mk_exprlist interp))