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