Mutuality constraint

In reply to gotlibhaim:
You would get better help from people if you showed your code as a complete self-contained example.

module top;
typedef enum {A,B,C,D} p_e;
class c;
   rand p_e pA[2], pB[2];
   constraint c1 { foreach(pA[i]) if(pA[i] == C)  pB[i] dist{C:= 1, D:= 1}; }
   constraint c2 { foreach(pB[i]) if(pB[i] == C)  pA[i] dist{C:= 1, D:= 1}; }
endclass: c
c h=new;
  initial repeat(50) begin
     assert(h.randomize());
     $display("%p %p", h.pA[0], h.pB[0]);
  end
endmodule

Your constraint certainly does allow the result B,C. there is no dist constraint when portA_Type[i] = B