let rec shift_pointer loc i =
match loc with
| D1depl (loc, Pidx j) ->
(* SMPrule : (p+(i))#(j) ----> p+(i+j) *)
shift_index loc (e_iop Formula.Iadd j i)
| D1shift (loc, j) ->
(* SMPrule : (p#(i))#(j) ----> p#(i+j) *)
shift_pointer loc (e_iop Formula.Iadd j i)
| D1muI (p, None, x) ->
(* SMPrule : (mu(p, * -> x))#(i) --> mu(p#(i), [#(-i),*] -> x) *)
D1muI (shift_pointer p i, Some (e_ineg i), x)
| D1muI (p, Some j, x) ->
(* SMPrule : (mu(p, [#(j),*] -> x))#(i) --> mu(p#(i), #(j-i),* -> x) *)
D1muI (shift_pointer p i, Some (e_iop Formula.Isub j i), x)
| _ -> D1shift (loc, i)