let simplifyCond condition = 
  (* Step 1 : Condition is translate into Disjunctive Normal Form *)
  let res1 = 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 
                           ) [] res1 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),(*dnfToParametrized*) res)