src/HOL/Tools/Metis/metis_reconstruct.ML
changeset 43106 6ec2a3c7b69e
parent 43104 81d1b15aa0ae
child 43128 a19826080596
equal deleted inserted replaced
43105:bb0ceef7d39f 43106:6ec2a3c7b69e
   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)