@@ -367,6 +367,25 @@ re-enable-id-phant T T1 :-
367367 (pi f1 f2 t v\ copy {{lib:@hb.ignore_disabled lp:t lp:f1 lp:v lp:f2}} {{lib:@hb.ignore lp:t lp:v}} :- !) =>
368368 copy T T1.
369369
370+ pred failsafe-structure-inference i:term, o:term.
371+ failsafe-structure-inference T T1 :-
372+ (pi OP Args Args1\
373+ copy (app [global (const OP)|Args]) (app [global (const OP)| Args1]) :-
374+ exported-op _ _ OP, !, eta-structure-record OP Args Args1) =>
375+ copy T T1.
376+
377+ pred eta-structure-record i:constant, i:list term, o:list term.
378+ eta-structure-record OP L L1 :-
379+ exported-op M _ OP, mixin-first-class M Class, factory-nparams Class NP,
380+ std.split-at NP L Params [S|Rest],
381+ var S,
382+ class-def (class Class Structure _),
383+ get-constructor Structure K,
384+ std.map Params copy Params1,
385+ std.map Rest copy Rest1,
386+ coq.mk-app {coq.env.global K} {std.append Params1 [_,_]} EtaS,
387+ std.append Params1 [EtaS|Rest1] L1.
388+
370389pred prod-last i:term, o:term.
371390prod-last (prod N S X) Y :- !, @pi-decl N S x\ prod-last (X x) Y.
372391prod-last X X :- !.
0 commit comments