MODULE ::= EXPR* EXPR ::= | IN | ASSERT ASSERT ::= (assert_eq|assert_ne) tuple IN ::= OR (in OR)? OR ::= AND (or AND)* AND ::= TERM (and TERM)* TERM ::= FACTOR ((add|sub) FACTOR)* FACTOR ::= USUB ((mul|div|mod) USUB)* USUB ::= sub* NOT NOT ::= not* POW POW ::= LITERAL (pow LITERAL)? LITERAL ::= | BUILTIN | TUPLE | INDEX | opar EXPR cpar INDEX ::= | TUPLE osquare (EXPR (comma EXPR)*)? csquare TUPLE ::= | opar EXPR+ cpar BUILTIN ::= num | bool