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)