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)