anchor.diff:          let hd, args = head_and_args' t in
           match (un_uinst hd).n with
           | Tm_fvar fv -> begin
  -          match List.length args with
  -          | 2 when fv_eq_lid fv PC.c_and_lid ->
  -            mk_base_conn PC.and_lid args
  -          | 2 when fv_eq_lid fv PC.c_or_lid ->
  -            mk_base_conn PC.or_lid args
  -
  -          // eq2 can have 2 args or 3
  -          | 2 when fv_eq_lid fv PC.c_eq2_lid ->
  -            mk_base_conn PC.c_eq2_lid args
  -          | 3 when fv_eq_lid fv PC.c_eq2_lid ->
  -            mk_base_conn PC.c_eq2_lid args
  -
  -          // eq3 can have 2 args or 4
  -          | 2 when fv_eq_lid fv PC.c_eq3_lid ->
  -            mk_base_conn PC.c_eq3_lid args
  -          | 4 when fv_eq_lid fv PC.c_eq3_lid ->
  -            mk_base_conn PC.c_eq3_lid args
  -
  -          | 0 when fv_eq_lid fv PC.c_true_lid ->
  -            mk_base_conn PC.true_lid args
  -          | 0 when fv_eq_lid fv PC.c_false_lid ->
  -            mk_base_conn PC.false_lid args
  -          | _ -> None
  +            let arg_len = List.length args in
  +            let aux (arity, lids) =
  +                if arg_len = arity
  +                then U.find_map lids
  +                    (fun (lid, out_lid) ->
  +                      if fv_eq_lid fv lid
  +                      then mk_base_conn out_lid args
  +                      else None)
  +                else None
  +            in
  +            U.find_map destruct_sq_base_table aux
             end
           | _ -> None
           )
  
positive.code:     | QEx of binders * qpats * typ
      | BaseConn of lident * args
  
  let destruct_typ_as_formula f : option<connective> =
      let rec unmeta_monadic f =
        let f = Subst.compress f in
  
negative.code:       | Tm_meta(t, Meta_monadic_lift _) -> unmeta_monadic t
        | _ -> f in
      let mk_base_conn lid args = Some (BaseConn (lid, args)) in
  
      let destruct_base_conn f =
          let t, args = head_and_args (unmeta_monadic f) in
          let t = un_uinst t in
          match (pre_typ t).n with
          | Tm_fvar tc ->
              let arg_len = List.length args in
              let aux (arity, lids) =
                  if arg_len = arity
                  then U.find_map lids
                      (fun lid ->
                        if lid_equals tc.fv_name.v lid
                        then mk_base_conn lid args
                        else None)
                  else None
              in
              U.find_map destruct_base_table aux
          | _ -> None
      in
  
  