_seps: "(){}=<>^&|!->"

14 all = ["all(" .w? type_or_fun:"arg" .w? ")"]
13 type_or_fun = {fun:"pow" type}
12 type_or_pow = {pow_ty typeleft_or_not}
11 fun = [type:"right" .w? "->" .w? type_or_fun:"left"]
10 excm = ["excm(" .w? type:"arg" .w? ")"]
9 not = ["!" typeleft_or_not:"arg"]
8 or = [type_or_pow:"left" .w? "|" .w? type_or_pow:"right"]
7 eq = [typeleft:"left" .w? "==" .w? typeleft:"right"]
6 and = [type_or_pow:"left" .w? "&" .w? type_or_pow:"right"]
5 pow_ty = pow:"pow"
4 pow = [typeleft:"left" .w? "^" .w? typeleft:"right"]
3 imply = [type_or_pow:"left" .w? "=>" .w? type:"right"]
3 typeleft_or_not = {
    not:"not"
    typeleft
}
2 typeleft = {
    ["(" .w? type_or_fun .w? ")"]
    excm:"excm"
    all:"all"
    "true":"true"
    "false":"false"
    .._seps!:"name"
}
1 type = {
    and:"and"
    or:"or"
    imply:"imply"
    pow:"pow"
    eq:"eq"
    typeleft_or_not
}
0 doc = [.w? type_or_fun:"type" .w?]

