117 |
117 |
118 fun prove_relation_constraints bnf lthy = |
118 fun prove_relation_constraints bnf lthy = |
119 let |
119 let |
120 val transfer_attr = @{attributes [transfer_rule]} |
120 val transfer_attr = @{attributes [transfer_rule]} |
121 val Tname = base_name_of_bnf bnf |
121 val Tname = base_name_of_bnf bnf |
122 fun qualify suffix = Binding.qualified true suffix Tname |
|
123 |
122 |
124 val defs = map (apsnd (prove_relation_side_constraint lthy bnf)) defs |
123 val defs = map (apsnd (prove_relation_side_constraint lthy bnf)) defs |
125 val bi_total = prove_relation_bi_constraint lthy bnf @{thm bi_total_alt_def} |
124 val bi_total = prove_relation_bi_constraint lthy bnf @{thm bi_total_alt_def} |
126 [snd (nth defs 0), snd (nth defs 1)] |
125 [snd (nth defs 0), snd (nth defs 1)] |
127 val bi_unique = prove_relation_bi_constraint lthy bnf @{thm bi_unique_alt_def} |
126 val bi_unique = prove_relation_bi_constraint lthy bnf @{thm bi_unique_alt_def} |
128 [snd (nth defs 2), snd (nth defs 3)] |
127 [snd (nth defs 2), snd (nth defs 3)] |
129 val defs = ("bi_total_rel", bi_total) :: ("bi_unique_rel", bi_unique) :: defs |
128 val defs = ("bi_total_rel", bi_total) :: ("bi_unique_rel", bi_unique) :: defs |
130 val notes = maps (fn (name, thm) => [((qualify name, []), [([thm], transfer_attr)])]) defs |
129 in |
131 in |
130 maps (fn (a, thm) => [((Binding.qualify_name true Tname a, []), [([thm], transfer_attr)])]) defs |
132 notes |
|
133 end |
131 end |
134 |
132 |
135 (* relator_eq *) |
133 (* relator_eq *) |
136 |
134 |
137 fun relator_eq bnf = |
135 fun relator_eq bnf = |
201 fun predicator bnf lthy = |
199 fun predicator bnf lthy = |
202 let |
200 let |
203 val pred_def = pred_set_of_bnf bnf |
201 val pred_def = pred_set_of_bnf bnf |
204 val Domainp_rel = prove_Domainp_rel lthy bnf pred_def |
202 val Domainp_rel = prove_Domainp_rel lthy bnf pred_def |
205 val rel_eq_onp = rel_eq_onp_of_bnf bnf |
203 val rel_eq_onp = rel_eq_onp_of_bnf bnf |
206 fun qualify defname suffix = Binding.qualified true suffix defname |
204 val Domainp_rel_thm_name = Binding.qualify_name true (base_name_of_bnf bnf) "Domainp_rel" |
207 val Domainp_rel_thm_name = qualify (base_name_of_bnf bnf) "Domainp_rel" |
|
208 val pred_data = Transfer.mk_pred_data pred_def rel_eq_onp [] |
205 val pred_data = Transfer.mk_pred_data pred_def rel_eq_onp [] |
209 val type_name = type_name_of_bnf bnf |
206 val type_name = type_name_of_bnf bnf |
210 val relator_domain_attr = @{attributes [relator_domain]} |
207 val relator_domain_attr = @{attributes [relator_domain]} |
211 val notes = [((Domainp_rel_thm_name, []), [([Domainp_rel], relator_domain_attr)])] |
208 val notes = [((Domainp_rel_thm_name, []), [([Domainp_rel], relator_domain_attr)])] |
212 in |
209 in |