let rec lval_substitution (lv:exp_node) (removel:string list) (addl:Cil_types.exp_node list) =
  match lv with
    | Lval(lh,off) -> 
        begin
          match lh with  
            | Mem _ as t-> Lval(t,off)
            | Var vi -> 
                match removel, addl with
                  | [], [] -> lv
                  | r::rl,a::al -> 
                      if(String.compare  vi.vname r)=0 
                      then a 
                      else lval_substitution lv rl al
                  | _,_ -> Aorai_option.fatal "removel and addl parameters must have the same size."

        end
    | _ -> Aorai_option.fatal "lval_substitution have to be called with a Lval parameter"