Due by Tue, 20 Aug 2019

Write a function/program in any programming language to list all the *closed formulas* in the *language of sets*. Recall that this is the *first-order language* with a single constant $\phi$ and a relation $\in$ of degree $2$ (plus the equality relation). A *closed formula* means a formula with no free variables.

The solution can be either a function that we can import and interact with in a REPL/console/notebook or a program to which we give appropriate input (as below) and get output as desired. Concretely:

- Fix representations in some data structures for
*terms*and*formulas*in the language of sets. - Have a function/method giving an output string for each formula (any unambiguous and readable representation is fine. One way is to use unicode for mathematical symbols).
- Define a function (or write a program) to list
`n`

closed formulas given an integer`n`

(as an argument to a function or input to a program). Listing the first`n`

functions in any order is fine, but any given formula should appear for large enough`n`

. For example if`n`

is large enough the formula $\forall A \forall B\exists C(\forall x\ (x\in C \iff (x\in A \lor x\in B )))$ should be output (in your chosen string representation).

**Remark:** It may be useful to recursively define a function giving *all* formulas (including those that are not closed) involving a given finite set of variables and with complexity at most `k`

for some appropriate definition of complexity.