70 end; (* LA_Logic *) |
70 end; (* LA_Logic *) |
71 |
71 |
72 |
72 |
73 (* arith context data *) |
73 (* arith context data *) |
74 |
74 |
75 structure Lin_Arith_Data = GenericDataFun |
75 structure Lin_Arith_Data = Generic_Data |
76 ( |
76 ( |
77 type T = {splits: thm list, |
77 type T = {splits: thm list, |
78 inj_consts: (string * typ) list, |
78 inj_consts: (string * typ) list, |
79 discrete: string list}; |
79 discrete: string list}; |
80 val empty = {splits = [], inj_consts = [], discrete = []}; |
80 val empty = {splits = [], inj_consts = [], discrete = []}; |
81 val extend = I; |
81 val extend = I; |
82 fun merge _ |
82 fun merge |
83 ({splits= splits1, inj_consts= inj_consts1, discrete= discrete1}, |
83 ({splits= splits1, inj_consts= inj_consts1, discrete= discrete1}, |
84 {splits= splits2, inj_consts= inj_consts2, discrete= discrete2}) : T = |
84 {splits= splits2, inj_consts= inj_consts2, discrete= discrete2}) : T = |
85 {splits = Library.merge Thm.eq_thm_prop (splits1, splits2), |
85 {splits = Library.merge Thm.eq_thm_prop (splits1, splits2), |
86 inj_consts = Library.merge (op =) (inj_consts1, inj_consts2), |
86 inj_consts = Library.merge (op =) (inj_consts1, inj_consts2), |
87 discrete = Library.merge (op =) (discrete1, discrete2)}; |
87 discrete = Library.merge (op =) (discrete1, discrete2)}; |