let update_rhs_atoms subst =
  let rec ura_rec = function
      Iknows(t)::l ->
        Iknows(apply_subst subst t)::(ura_rec l)
    | Unknown(t,lt)::l ->
        Unknown(t, List.map (apply_subst subst) lt)::(ura_rec l)
    | Ifcontains(t1,t2)::l ->
        let l2 = ref [] in
        let rec apply_on_all_set_actions = function
            Delete(t2,t3) ->
              let t = apply_on_all_set_actions t3 in
              l2 := Ifdelete(apply_subst subst t2, t)::!l2;
              t
          | Cons(t2,t3) ->
              let t = apply_on_all_set_actions t3 in
              l2 := Ifcontains(apply_subst subst t2, t)::!l2;
              t
          | t -> apply_subst subst t
        in
        let t = apply_on_all_set_actions t2 in
        (Ifcontains(apply_subst subst t1, t):: !l2)@(ura_rec l)
    | Ifdelete(t1,t2)::l ->
        let l2 = ref [] in
        let rec apply_on_all_set_actions = function
            Delete(t2,t3) ->
              let t = apply_on_all_set_actions t3 in
              l2 := Ifdelete(apply_subst subst t2, t)::!l2;
              t
          | Cons(t2,t3) ->
              let t = apply_on_all_set_actions t3 in
              l2 := Ifcontains(apply_subst subst t2, t)::!l2;
              t
          | t -> apply_subst subst t
        in
        let t = apply_on_all_set_actions t2 in
        (Ifdelete(apply_subst subst t1, t):: !l2)@(ura_rec l)
    | x::l -> x::(ura_rec l)
    | [] -> []
  in
  ura_rec