equal
deleted
inserted
replaced
528 | path_finder_FT tm ps t = path_finder_fail FT tm ps (SOME t) |
528 | path_finder_FT tm ps t = path_finder_fail FT tm ps (SOME t) |
529 fun path_finder_MX tm [] _ = (tm, Bound 0) |
529 fun path_finder_MX tm [] _ = (tm, Bound 0) |
530 | path_finder_MX tm (p :: ps) (t as Metis_Term.Fn (s, ts)) = |
530 | path_finder_MX tm (p :: ps) (t as Metis_Term.Fn (s, ts)) = |
531 (* FIXME ### what if these are mangled? *) |
531 (* FIXME ### what if these are mangled? *) |
532 if s = metis_type_tag then |
532 if s = metis_type_tag then |
533 if p = 1 then path_finder_MX tm ps (nth ts 1) |
533 if p = 0 then path_finder_MX tm ps (hd ts) |
534 else path_finder_fail MX tm (p :: ps) (SOME t) |
534 else path_finder_fail MX tm (p :: ps) (SOME t) |
535 else if s = metis_app_op then |
535 else if s = metis_app_op then |
536 let |
536 let |
537 val (tm1, tm2) = dest_comb tm in |
537 val (tm1, tm2) = dest_comb tm in |
538 if p = 0 then path_finder_MX tm1 ps (hd ts) ||> (fn y => y $ tm2) |
538 if p = 0 then path_finder_MX tm1 ps (hd ts) ||> (fn y => y $ tm2) |