My program is
B := {B1[t, x, y, z], B2[t, x, y, z], B3[t, x, y, z]}; g := {{1+ Φ[t, x, y, z], B[[1]], B[[2]], B[[3]] }, { B[[1]], 1/(1+ Φ[t, x, y, z]), 0, 0 }, { B[[2]], 0, 1/(1+ Φ[t, x, y, z], 0 }, { B[[3]], 0, 0, 1/(1+ Φ[t, x, y, z]}}; xx = {t, x, y, z}; TaylorExpantion[h_] := Block[{res}, res = ReplaceAll[h, Φ[t, x, y,z] :> ε Φ[t, x, y,z]; res = ReplaceAll[res, B[[1]] -> ε^2 B[[1]]]; res = ReplaceAll[res, B[[2]] -> ε^2 B[[2]]]; res = ReplaceAll[res, B[[3]] -> ε^2 B[[3]]]; Simplify[Normal[Series[res, {ε, 0, 2}]] /. ε -> 1] ] InverseMetric[g_] := Block[{res}, res = Inverse[g]; res = TaylorExpantion[res] ] ChristoffelSymbol[g_, xx_] := Block[{d, res}, d = 4; res = Table[(1/2)*(D[g[[m, n]], xx[[l]]] + D[g[[m, l]], xx[[n]]] -D[g[[n, l]], xx[[m]]]), {m, 1, d}, {n, 1, d}, {l, 1, d}]; res = TaylorExpantion[res] ] RicciTensor[g_, xx_] := Block[{d, Chr, res}, d = 4; Chr = ChristoffelSymbol[g, xx]; ig = InverseMetric[g]; res = Table[Sum[D[ig[[l, s]]*Chr[[s, m, n]], xx[[l]]] - D[ig[[l, s]]*Chr[[s, m, l]], xx[[n]]], {s, 1, d}, {l, 1,d}] + Sum[ig[[a, b]]*Chr[[b, m, n]]*ig[[l, s]]*Chr[[s, l, a]] -ig[[a, b]]*Chr[[b, m, l]]*ig[[l, s]]*Chr[[s, n, a]], {s, 1, d}, {l, 1, d}, {a, 1, d}, {b, 1, d}], {m, 1, d}, {n, 1, d}]; res = TaylorExpantion[res] ] Now the problem is when I print one component of Ricci Tensor (i.e Part[RicciTensor[g,xx],1,2]]), the derivatives of the Φ and B does not treated as perturbations, as should be due to the ReplaceAll. How can I make the program to make the replacement f(x)->ε f(x) for the function and all the derivatives. I don't want to use res = ReplaceAll[h, f_[t, x, y,z] :> ε f[t, x, y,z];, because Φ and B are first and second order in perturbation respectively.