:extramacros ((in (lambda (?x Int) (?p (Int boolean)) . (?p ?x)))
                (emptyset (lambda (?v Int) . false))
                (omega (lambda (?x Int) . true))
                (singleton (lambda (?x Int) . (lambda (?y Int) . (= ?x ?y))))
                (intersection (lambda (?p (Int boolean)) (?q (Int boolean)) .
                                      (lambda (?x Int) . (and (?p ?x) (?q ?x)))))
                (union (lambda (?p (Int boolean)) (?q (Int boolean)) .
                               (lambda (?x Int) . (or (?p ?x) (?q ?x)))))
                (difference (lambda (?p (Int boolean)) (?q (Int boolean)) .
                                    (lambda (?x Int) .
                                            (and (?p ?x) (not (?q ?x))))))
                (symmetric_difference
                 (lambda (?p (Int boolean)) (?q (Int boolean)) .
                         (lambda (?x Int) .
                                 (or (and (?p ?x) (not (?q ?x)))
                                     (and (?q ?x) (not (?p ?x)))))))
                (subset (lambda (?p (Int boolean)) (?q (Int boolean)) .
                                (forall (?x Int) . (implies (?p ?x) (?q ?x)))))
				(range (lambda (?n Int) (?m Int) . 
                               (lambda (?x Int) . (and  (<= ?x ?m) (<= ?n ?x))))
		)                
		(succ (lambda (?n Int). (+ ?n 1)))
		(pred (lambda (?n Int). (- ?n 1)))
		
		)
