let simplifyCond condition =
(* Step 1 : Condition is translate into Disjunctive Normal Form *)
let res = condToDNF condition in
(* Step 2 : Positive Call/Ret are used to simplify negative ones *)
let res = List.fold_left (fun lclauses clause ->
let c=(positiveCallOrRet clause) in
if c=[] then lclauses
else c::lclauses
) [] res in
(* Step 3 : simplification between exprs inside a clause *)
let res = List.fold_left (fun lclauses clause ->
let c=(simplify clause) in
if c=[] then lclauses
else c::lclauses
) [] res in
(* Step 4 : simplification between clauses *)
let res = simplifyClauses res in
(* Last step : list of list translate back into condition type. *)
if res=[] then PFalse
else (dnfToCond res)