190 |
190 |
191 fun mk_split_pack (thm, T: typ, T', n, ts, apsns, pos, TB, t) = |
191 fun mk_split_pack (thm, T: typ, T', n, ts, apsns, pos, TB, t) = |
192 if n > length ts then [] |
192 if n > length ts then [] |
193 else let val lev = length apsns |
193 else let val lev = length apsns |
194 val lbnos = fold add_lbnos (Library.take (n, ts)) [] |
194 val lbnos = fold add_lbnos (Library.take (n, ts)) [] |
195 val flbnos = List.filter (fn i => i < lev) lbnos |
195 val flbnos = filter (fn i => i < lev) lbnos |
196 val tt = incr_boundvars (~lev) t |
196 val tt = incr_boundvars (~lev) t |
197 in if null flbnos then |
197 in if null flbnos then |
198 if T = T' then [(thm,[],pos,TB,tt)] else [] |
198 if T = T' then [(thm,[],pos,TB,tt)] else [] |
199 else if type_test(T,flbnos,apsns) then [(thm, rev apsns,pos,TB,tt)] |
199 else if type_test(T,flbnos,apsns) then [(thm, rev apsns,pos,TB,tt)] |
200 else [] |
200 else [] |