let eq_record_definition tcomp eq_name =
let pool = F.pool() in
let xa = F.fresh pool "a" (Model (Record tcomp)) in
let xb = F.fresh pool "b" (Model (Record tcomp)) in
let ra = F.var xa in
let rb = F.var xb in
let p_comp =
List.fold_left
(fun p field ->
let tf = Ctypes.object_of field.ftype in
let va = acc_field ra field in
let vb = acc_field rb field in
let ef = !equal_rec tf va vb in
if tcomp.cstruct
then F.p_and p ef
else F.p_or p ef
) (if tcomp.cstruct
then F.p_true
else F.p_false) tcomp.cfields
in
F.p_forall [xa;xb]
(F.p_iff (p_app2 eq_name ra rb) p_comp)