class_docstr: Class to represent CNF of a Boolean expression.
  Consists of set of clauses, which themselves are stored as
  frozenset of Literal objects.
  
  Examples
  ========
  
  >>> from sympy import Q
  >>> from sympy.assumptions.cnf import CNF
  >>> from sympy.abc import x
  >>> cnf = CNF.from_prop(Q.real(x) & ~Q.zero(x))
  >>> cnf.clauses
  {frozenset({Literal(Q.zero(x), True)}),
  frozenset({Literal(Q.negative(x), False),
  Literal(Q.positive(x), False), Literal(Q.zero(x), False)})}
code: def _or(self, cnf):
      clauses = set()
      for a, b in product(self.clauses, cnf.clauses):
          tmp = set(a)
          for t in b:
              tmp.add(t)
          clauses.add(frozenset(tmp))
      return CNF(clauses)
  
imports: from itertools import combinations, product, zip_longest
  from sympy.assumptions.assume import AppliedPredicate, Predicate
  from sympy.core.relational import Eq, Ne, Gt, Lt, Ge, Le
  from sympy.core.singleton import S
  from sympy.logic.boolalg import Or, And, Not, Xnor
  from sympy.logic.boolalg import Equivalent, ITE, Implies, Nand, Nor, Xor
label_desc: Use image node_id 10 for calling the CNF obj's underlying member method code with example usage: obj._or(cnf) and returns: CNF