177 in |
177 in |
178 flatten' f (names, prems) |
178 flatten' f (names, prems) |
179 |> maps (fn (res, (names, prems)) => |
179 |> maps (fn (res, (names, prems)) => |
180 flatten' (betapply (g, res)) (names, prems)) |
180 flatten' (betapply (g, res)) (names, prems)) |
181 end) |
181 end) |
182 | Const (@{const_name "split"}, _) => |
182 | Const (@{const_name split}, _) => |
183 (let |
183 (let |
184 val (_, g :: res :: args) = strip_comb t |
184 val (_, g :: res :: args) = strip_comb t |
185 val [res1, res2] = Name.variant_list names ["res1", "res2"] |
185 val [res1, res2] = Name.variant_list names ["res1", "res2"] |
186 val (T1, T2) = HOLogic.dest_prodT (fastype_of res) |
186 val (T1, T2) = HOLogic.dest_prodT (fastype_of res) |
187 val (resv1, resv2) = (Free (res1, T1), Free (res2, T2)) |
187 val (resv1, resv2) = (Free (res1, T1), Free (res2, T2)) |