let define_comp comp =
List.iter
(fun f ->
let tr = C_comp comp in
let te = Ctypes.object_of f.ftype in
let pool = F.pool () in
let xm = F.fresh pool "m" (Model M.tau_of_mem) in
let xa,loc = M.forall_loc pool in
let xv = F.fresh pool "e" (Model (D.tau_of_object te)) in
let mem = F.var xm in
let loc' = M.field loc f in
let mem' = M.store_mem mem te loc' (M.value_of_logic te (F.var xv)) in
let r0 = M.logic_of_value (M.load_mem mem tr loc) in
let r1 = M.logic_of_value (M.load_mem mem' tr loc) in
let r2 = F.wrap (D.upd_field (F.unwrap r0) f (F.var xv)) in
let prop = F.p_forall (xm::xv::xa) (D.equal tr r1 r2) in
let name = D.Compinfo.basename comp in
let path = Pretty_utils.sfprintf "%s.%s" name f.fname in
add_axiom name (D.Compinfo.location comp) name path prop
) comp.cfields