============
And vs Or 1
============

from Foo f
where f = f and f = f or f = f
select f

---

(ql (moduleMember
  (select
    (varDecl (typeExpr (className)) (varName (simpleId)))
    (disjunction
      (conjunction
        (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
        (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
    (asExprs (asExpr (variable (varName (simpleId))))))))

============
And vs Or 2
============

from Foo f
where f = f or f = f and f = f
select f

---

(ql (moduleMember
  (select (varDecl (typeExpr (className)) (varName (simpleId)))
    (disjunction
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
      (conjunction
        (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
        (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))))
    (asExprs (asExpr (variable (varName (simpleId))))))))

============
Or vs implies
============

from Foo f
where (f = f or f = f implies f = f)
  and (f = f implies f = f or f = f)
select f

---

(ql (moduleMember
  (select
    (varDecl (typeExpr (className)) (varName (simpleId)))
    (conjunction
      (par_expr
        (implication
          (disjunction
            (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
            (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
        (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))))
      (par_expr
        (implication
          (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
          (disjunction
            (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
            (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))))))
    (asExprs (asExpr (variable (varName (simpleId))))))))

============
if then else
============

from Foo f
where if f = f then f = f else f = f
select f

---

(ql (moduleMember
  (select
    (varDecl (typeExpr (className)) (varName (simpleId)))
    (if_term
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
  (asExprs (asExpr (variable (varName (simpleId))))))))

==========
and vs not
==========

from Foo f
where not f = f and f = f
select f

---

(ql (moduleMember
  (select
    (varDecl (typeExpr (className)) (varName (simpleId)))
    (conjunction
      (negation (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))
    (asExprs (asExpr (variable (varName (simpleId))))))))

==========
call vs plus
==========

select a+(b)

---

(ql (moduleMember (select (asExprs (asExpr (call_or_unqual_agg_expr (aritylessPredicateExpr (literalId)) (closure) (call_body (variable (varName (simpleId))))))))))

==========
cast vs subtract
==========

select (A)-(b)

---
(ql (moduleMember (select (asExprs (asExpr (prefix_cast (typeExpr (className)) (unary_expr (unop) (par_expr (variable (varName (simpleId)))))))))))
