36 case_eq_ifs: thm list}; |
36 case_eq_ifs: thm list}; |
37 |
37 |
38 val morph_ctr_sugar: morphism -> ctr_sugar -> ctr_sugar |
38 val morph_ctr_sugar: morphism -> ctr_sugar -> ctr_sugar |
39 val transfer_ctr_sugar: theory -> ctr_sugar -> ctr_sugar |
39 val transfer_ctr_sugar: theory -> ctr_sugar -> ctr_sugar |
40 val ctr_sugar_of: Proof.context -> string -> ctr_sugar option |
40 val ctr_sugar_of: Proof.context -> string -> ctr_sugar option |
|
41 val ctr_sugar_of_global: theory -> string -> ctr_sugar option |
41 val ctr_sugars_of: Proof.context -> ctr_sugar list |
42 val ctr_sugars_of: Proof.context -> ctr_sugar list |
|
43 val ctr_sugars_of_global: theory -> ctr_sugar list |
42 val ctr_sugar_of_case: Proof.context -> string -> ctr_sugar option |
44 val ctr_sugar_of_case: Proof.context -> string -> ctr_sugar option |
|
45 val ctr_sugar_of_case_global: theory -> string -> ctr_sugar option |
43 val ctr_sugar_interpretation: (ctr_sugar -> theory -> theory) -> theory -> theory |
46 val ctr_sugar_interpretation: (ctr_sugar -> theory -> theory) -> theory -> theory |
44 val register_ctr_sugar: string -> ctr_sugar -> local_theory -> local_theory |
47 val register_ctr_sugar: string -> ctr_sugar -> local_theory -> local_theory |
45 val default_register_ctr_sugar_global: string -> ctr_sugar -> theory -> theory |
48 val default_register_ctr_sugar_global: string -> ctr_sugar -> theory -> theory |
46 |
49 |
47 val mk_half_pairss: 'a list * 'a list -> ('a * 'a) list list |
50 val mk_half_pairss: 'a list * 'a list -> ('a * 'a) list list |
146 val empty = Symtab.empty; |
149 val empty = Symtab.empty; |
147 val extend = I; |
150 val extend = I; |
148 fun merge data : T = Symtab.merge (K true) data; |
151 fun merge data : T = Symtab.merge (K true) data; |
149 ); |
152 ); |
150 |
153 |
151 fun ctr_sugar_of ctxt = |
154 fun ctr_sugar_of_generic context = |
152 Symtab.lookup (Data.get (Context.Proof ctxt)) |
155 Option.map (transfer_ctr_sugar (Context.theory_of context)) o Symtab.lookup (Data.get context); |
153 #> Option.map (transfer_ctr_sugar (Proof_Context.theory_of ctxt)); |
156 |
154 |
157 fun ctr_sugars_of_generic context = |
155 fun ctr_sugars_of ctxt = |
158 Symtab.fold (cons o transfer_ctr_sugar (Context.theory_of context) o snd) (Data.get context) []; |
156 Symtab.fold (cons o transfer_ctr_sugar (Proof_Context.theory_of ctxt) o snd) |
159 |
157 (Data.get (Context.Proof ctxt)) []; |
160 fun ctr_sugar_of_case_generic context s = |
158 |
161 find_first (fn {casex = Const (s', _), ...} => s' = s | _ => false) |
159 fun ctr_sugar_of_case ctxt s = |
162 (ctr_sugars_of_generic context); |
160 find_first (fn {casex = Const (s', _), ...} => s' = s | _ => false) (ctr_sugars_of ctxt); |
163 |
|
164 val ctr_sugar_of = ctr_sugar_of_generic o Context.Proof; |
|
165 val ctr_sugar_of_global = ctr_sugar_of_generic o Context.Theory; |
|
166 |
|
167 val ctr_sugars_of = ctr_sugars_of_generic o Context.Proof; |
|
168 val ctr_sugars_of_global = ctr_sugars_of_generic o Context.Theory; |
|
169 |
|
170 val ctr_sugar_of_case = ctr_sugar_of_case_generic o Context.Proof; |
|
171 val ctr_sugar_of_case_global = ctr_sugar_of_case_generic o Context.Theory; |
161 |
172 |
162 structure Ctr_Sugar_Interpretation = Interpretation |
173 structure Ctr_Sugar_Interpretation = Interpretation |
163 ( |
174 ( |
164 type T = ctr_sugar; |
175 type T = ctr_sugar; |
165 val eq: T * T -> bool = op = o pairself #ctrs; |
176 val eq: T * T -> bool = op = o pairself #ctrs; |