I am PhD student and I do all my work whith Eiffel. I have already met some problems with repeated inheritance and renaming. I know this : in the actual implementation of the Eiffel compiler, an object is like an array of fields. That's mean when you reference a field by its name, the compiler translates by the access to the field-number item in the array. In your problem, the field named `x' in the class R is the i_th item of the array and the routine f of the same class uses this number to update the fie
ld `x'.
The renaming and the repeating inheritance of class R through the class A, B and C introduce the duplication of the field `x' of R as fields `x' (from A) and `xB' (from B) and the duplication of the routine `f' of R as routines fA (from A), fB (from B) and f (from R through C). Now you have two fields (`x' and `xB' - two elements in the array) but the routines f, fA, fB which use the field `x' still acces to the same i_th element in the array.
I think if you reverse the inheritance clauses of class A and B, you will have the expected result but the routines f and fA will update also the field `xB'.
May be, you will have what you want by renaming the field `x' of the class B in the inheritance clause of this class in the class S because the compiler will change the number of the item used by the routine fB.