equal
deleted
inserted
replaced
1206 fun replace (opt_x :: xs) ((y, T) :: ys) = (if_none opt_x y, T) :: replace xs ys |
1206 fun replace (opt_x :: xs) ((y, T) :: ys) = (if_none opt_x y, T) :: replace xs ys |
1207 | replace [] ys = ys |
1207 | replace [] ys = ys |
1208 | replace (_ :: _) [] = raise CONTEXT ("Too many parameters for case " ^ quote name, ctxt); |
1208 | replace (_ :: _) [] = raise CONTEXT ("Too many parameters for case " ^ quote name, ctxt); |
1209 in |
1209 in |
1210 if null (foldr Term.add_typ_tvars (map snd fixes, [])) andalso |
1210 if null (foldr Term.add_typ_tvars (map snd fixes, [])) andalso |
1211 null (foldr Term.add_term_vars (flat (map #2 assumes), [])) then |
1211 null (foldr Term.add_term_vars (flat (map snd assumes), [])) then |
1212 {fixes = replace xs fixes, assumes = assumes, binds = map drop_schematic binds} |
1212 {fixes = replace xs fixes, assumes = assumes, binds = map drop_schematic binds} |
1213 else raise CONTEXT ("Illegal schematic variable(s) in case " ^ quote name, ctxt) |
1213 else raise CONTEXT ("Illegal schematic variable(s) in case " ^ quote name, ctxt) |
1214 end; |
1214 end; |
1215 |
1215 |
1216 fun get_case (ctxt as Context {cases, ...}) name xs = |
1216 fun get_case (ctxt as Context {cases, ...}) name xs = |