79 | NONE => raise THM ("named_cterm_instantiate: " ^ name, 0, [thm])); |
79 | NONE => raise THM ("named_cterm_instantiate: " ^ name, 0, [thm])); |
80 in |
80 in |
81 cterm_instantiate (map (apfst getvar) values) thm |
81 cterm_instantiate (map (apfst getvar) values) thm |
82 end; |
82 end; |
83 |
83 |
84 structure IsTupleThms = TheoryDataFun |
84 structure IsTupleThms = Theory_Data |
85 ( |
85 ( |
86 type T = thm Symtab.table; |
86 type T = thm Symtab.table; |
87 val empty = Symtab.make [tuple_istuple]; |
87 val empty = Symtab.make [tuple_istuple]; |
88 val copy = I; |
|
89 val extend = I; |
88 val extend = I; |
90 fun merge _ = Symtab.merge Thm.eq_thm_prop; |
89 fun merge data = Symtab.merge Thm.eq_thm_prop data; (* FIXME handle Symtab.DUP ?? *) |
91 ); |
90 ); |
92 |
91 |
93 fun do_typedef name repT alphas thy = |
92 fun do_typedef name repT alphas thy = |
94 let |
93 let |
95 fun get_thms thy name = |
94 fun get_thms thy name = |
379 records sel_upd equalities extinjects extsplit splits extfields fieldext = |
378 records sel_upd equalities extinjects extsplit splits extfields fieldext = |
380 {records = records, sel_upd = sel_upd, |
379 {records = records, sel_upd = sel_upd, |
381 equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits, |
380 equalities = equalities, extinjects=extinjects, extsplit = extsplit, splits = splits, |
382 extfields = extfields, fieldext = fieldext }: record_data; |
381 extfields = extfields, fieldext = fieldext }: record_data; |
383 |
382 |
384 structure RecordsData = TheoryDataFun |
383 structure RecordsData = Theory_Data |
385 ( |
384 ( |
386 type T = record_data; |
385 type T = record_data; |
387 val empty = |
386 val empty = |
388 make_record_data Symtab.empty |
387 make_record_data Symtab.empty |
389 {selectors = Symtab.empty, updates = Symtab.empty, |
388 {selectors = Symtab.empty, updates = Symtab.empty, |
390 simpset = HOL_basic_ss, defset = HOL_basic_ss, |
389 simpset = HOL_basic_ss, defset = HOL_basic_ss, |
391 foldcong = HOL_basic_ss, unfoldcong = HOL_basic_ss} |
390 foldcong = HOL_basic_ss, unfoldcong = HOL_basic_ss} |
392 Symtab.empty [] Symtab.empty Symtab.empty Symtab.empty Symtab.empty; |
391 Symtab.empty [] Symtab.empty Symtab.empty Symtab.empty Symtab.empty; |
393 |
|
394 val copy = I; |
|
395 val extend = I; |
392 val extend = I; |
396 fun merge _ |
393 fun merge |
397 ({records = recs1, |
394 ({records = recs1, |
398 sel_upd = |
395 sel_upd = |
399 {selectors = sels1, updates = upds1, |
396 {selectors = sels1, updates = upds1, |
400 simpset = ss1, defset = ds1, |
397 simpset = ss1, defset = ds1, |
401 foldcong = fc1, unfoldcong = uc1}, |
398 foldcong = fc1, unfoldcong = uc1}, |
423 simpset = Simplifier.merge_ss (ss1, ss2), |
420 simpset = Simplifier.merge_ss (ss1, ss2), |
424 defset = Simplifier.merge_ss (ds1, ds2), |
421 defset = Simplifier.merge_ss (ds1, ds2), |
425 foldcong = Simplifier.merge_ss (fc1, fc2), |
422 foldcong = Simplifier.merge_ss (fc1, fc2), |
426 unfoldcong = Simplifier.merge_ss (uc1, uc2)} |
423 unfoldcong = Simplifier.merge_ss (uc1, uc2)} |
427 (Symtab.merge Thm.eq_thm_prop (equalities1, equalities2)) |
424 (Symtab.merge Thm.eq_thm_prop (equalities1, equalities2)) |
428 (Library.merge Thm.eq_thm_prop (extinjects1, extinjects2)) |
425 (Thm.merge_thms (extinjects1, extinjects2)) |
429 (Symtab.merge Thm.eq_thm_prop (extsplit1, extsplit2)) |
426 (Symtab.merge Thm.eq_thm_prop (extsplit1, extsplit2)) |
430 (Symtab.merge (fn ((a, b, c, d), (w, x, y, z)) => |
427 (Symtab.merge (fn ((a, b, c, d), (w, x, y, z)) => |
431 Thm.eq_thm (a, w) andalso Thm.eq_thm (b, x) andalso |
428 Thm.eq_thm (a, w) andalso Thm.eq_thm (b, x) andalso |
432 Thm.eq_thm (c, y) andalso Thm.eq_thm (d, z)) (splits1, splits2)) |
429 Thm.eq_thm (c, y) andalso Thm.eq_thm (d, z)) (splits1, splits2)) |
433 (Symtab.merge (K true) (extfields1, extfields2)) |
430 (Symtab.merge (K true) (extfields1, extfields2)) |