let rec string_of_condition = function
    | PCall s          -> "Call("^s^")"
    | PReturn s        -> "Return("^s^")"
    | PCallOrReturn s  -> "CallOrReturn("^s^")"
    | POr  (c1,c2)     -> "("^(string_of_condition c1)^" or "^(string_of_condition c2)^")"
    | PAnd (c1,c2    ) -> "("^(string_of_condition c1)^" and "^(string_of_condition c2)^")"
    | PNot c           -> "not "^(string_of_condition c)
    | PTrue            -> "True"
    | PFalse           -> "False"
(*    | PGt (c1,c2)      -> (string_of_condition_arith c1)^">" ^(string_of_condition_arith c2)
    | PGe (c1,c2)      -> (string_of_condition_arith c1)^">="^(string_of_condition_arith c2)
    | PLt (c1,c2)      -> (string_of_condition_arith c1)^"<" ^(string_of_condition_arith c2)
    | PLe (c1,c2)      -> (string_of_condition_arith c1)^"<="^(string_of_condition_arith c2)
    | PEq (c1,c2)      -> (string_of_condition_arith c1)^"=" ^(string_of_condition_arith c2)
    | PNeq (c1,c2)     -> (string_of_condition_arith c1)^"<>"^(string_of_condition_arith c2)
    | PBoolVar (s)     -> "BoolVar("^s^")"*)

    | PIndexedExp (s) 
    | PFuncReturn (s, _) 
    | PFuncParam (s, _, _) -> Data_for_aorai.get_str_exp_from_tmpident s