let eq_record_definition tcomp eq_name =
let pool = F.pool() in
let xa = F.p_fresh pool "a" (Model (Record tcomp)) in
let xb = F.p_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 = F.acc_field ra field in
let vb = F.acc_field rb field in
let ef = !equal_rec tf va vb in
F.p_and p ef
) F.p_true tcomp.cfields
in
F.p_forall [xa;xb]
(F.p_iff (F.p_app2 eq_name ra rb) p_comp)