let (^) c1 c2 = match c1, c2 with | CTrue _, c | c, CTrue _ -> c | c, CConjunction cl -> CConjunction (c :: cl) | _, _ -> CConjunction [c1; c2]