let rec set_var (x: var) (r: rslt) (ar: act_ref) (b: b)
  : b =
    assert (act_valid ar b);
    let act = act_assoc_valid ar b in
    if List.mem_assoc x act.act_vars then
      let data' = upd_assoc x r act.act_vars in
      let act' = { act with act_vars = data' } in
      act_update ar act' b
    else
      begin match act.act_parent with
      | None -> create_var x r ar b
      | Some(ar1) -> set_var x r ar1 b
      end