@@ -342,8 +342,6 @@ namespace tc {
342342 get-uva-pair-arity Y L Z.
343343
344344 pred decompile-problematic-term i:term, i:list prop, o:term, o:list prop.
345- decompile-problematic-term (primitive _ as C) A C A :- !.
346-
347345 % there is no need to decompile T since no precompilation is done inside coercions
348346 decompile-problematic-term (tc.coercion T S) L1 Y [tc.link.cs Y T|L1] :- !,
349347 prune Y S.
@@ -352,43 +350,52 @@ namespace tc {
352350 prune Y S.
353351
354352 decompile-problematic-term (tc.maybe-eta-tm T S) L V [tc.link.eta V T' | L2] :- !,
355- prune V S, fold-map T L T' L2.
353+ prune V S, decompile-problematic-term T L T' L2.
356354
357355 decompile-problematic-term (tc.prod-range T _) A T' A' :- !,
358- fold-map T A T' A'.
356+ decompile-problematic-term T A T' A'.
359357
360358 decompile-problematic-term (tc.maybe-llam-tm (app [app[H|S] | NPF]) Sc) L Z [NL|L'] :- !,
361359 prune Z Sc,
362360 get-uva-pair-arity H S Y,
363- std.fold-map NPF L fold-map Tl L',
361+ std.fold-map NPF L decompile-problematic-term Tl L',
364362 NL = tc.link.llam Z (app[Y | Tl]).
365363
366- % TODO: complete this fold
367364 decompile-problematic-term (app[X|S]) L Z L :-
368365 var X _ Scope,
369366 std.append Scope S Scope',
370367 distinct_names Scope', !,
371368 get-uva-pair-arity X S Y,
372369 prune Z Scope', var Z Y Scope'.
373370
374- decompile-problematic-term A L A L :- var A, !.
375-
376- decompile-problematic-term (fun N Ty Bo) L (fun N Ty' Bo') L3 :-
377- (pi x\ fold-map (Bo x) [] (Bo' x) (Lx x)),
371+ decompile-problematic-term (fun N Ty Bo) L (fun N Ty' Bo') L3 :- !,
372+ (pi x\ decompile-problematic-term (Bo x) [] (Bo' x) (Lx x)),
378373 close-term-no-prune-ty Lx {tc.compile.instance.clean-term Ty} L1,
379- fold-map Ty L Ty' L2,
374+ decompile-problematic-term Ty L Ty' L2,
380375 std.append L2 L1 L3.
381376
382- decompile-problematic-term (prod N Ty Bo) L (prod N Ty' Bo') L3 :-
383- (pi x\ fold-map (Bo x) [] (Bo' x) (Lx x)),
377+ decompile-problematic-term (prod N Ty Bo) L (prod N Ty' Bo') L3 :- !,
378+ (pi x\ decompile-problematic-term (Bo x) [] (Bo' x) (Lx x)),
384379 close-term-no-prune-ty Lx {tc.compile.instance.clean-term Ty} L1,
385- fold-map Ty L Ty' L2,
380+ decompile-problematic-term Ty L Ty' L2,
386381 std.append L2 L1 L3.
387382
383+ decompile-problematic-term (global _ as C) A C A :- !.
384+ decompile-problematic-term (pglobal _ _ as C) A C A :- !.
385+ decompile-problematic-term (sort _ as C) A C A :- !.
386+ decompile-problematic-term (let N T B F) A (let N T1 B1 F1) A3 :- !,
387+ decompile-problematic-term T A T1 A1, decompile-problematic-term B A1 B1 A2, pi x\ decompile-problematic-term (F x) A2 (F1 x) A3.
388+ decompile-problematic-term (app L) A (app L1) A1 :- !, std.fold-map L A decompile-problematic-term L1 A1.
389+ decompile-problematic-term (fix N Rno Ty F) A (fix N Rno Ty1 F1) A2 :- !,
390+ decompile-problematic-term Ty A Ty1 A1, pi x\ decompile-problematic-term (F x) A1 (F1 x) A2.
391+ decompile-problematic-term (match T Rty B) A (match T1 Rty1 B1) A3 :- !,
392+ decompile-problematic-term T A T1 A1, decompile-problematic-term Rty A1 Rty1 A2, std.fold-map B A2 decompile-problematic-term B1 A3.
393+ decompile-problematic-term (primitive _ as C) A C A :- !.
394+ decompile-problematic-term (uvar _ _ as V) A V A :- !.
395+ decompile-problematic-term X A Y A :- name X, !, X = Y, !.
396+
388397 pred compile i:term, i:list prop, o:term, o:list prop.
389- compile T L T' L' :-
390- (pi t l t' l'\ fold-map t l t' l' :- decompile-problematic-term t l t' l', !) =>
391- fold-map T L T' L'.
398+ compile T L T' L' :- decompile-problematic-term T L T' L'.
392399
393400 % Uva Binders LinkEta
394401 pred build-eta-links-of-vars-aux i:term, i:list term, o:list prop.
0 commit comments