equal
deleted
inserted
replaced
76 in |
76 in |
77 ("copy_def", %%:(dname^"_copy") == /\ "f" |
77 ("copy_def", %%:(dname^"_copy") == /\ "f" |
78 (dc_abs oo (copy_of_dtyp map_tab r (dtyp_of_eq eqn)) oo dc_rep)) |
78 (dc_abs oo (copy_of_dtyp map_tab r (dtyp_of_eq eqn)) oo dc_rep)) |
79 end; |
79 end; |
80 |
80 |
81 (* -- definitions concerning the discriminators and selectors - *) |
81 (* -- definitions concerning the discriminators - *) |
82 |
82 |
83 val dis_defs = let |
83 val dis_defs = let |
84 fun ddef (con,_,_) = (dis_name con ^"_def",%%:(dis_name con) == |
84 fun ddef (con,_,_) = (dis_name con ^"_def",%%:(dis_name con) == |
85 list_ccomb(%%:(dname^"_when"),map |
85 list_ccomb(%%:(dname^"_when"),map |
86 (fn (con',_,args) => (List.foldr /\# |
86 (fn (con',_,args) => (List.foldr /\# |
113 in (pat_name con ^"_def", list_comb (%%:(pat_name con), ps) == |
113 in (pat_name con ^"_def", list_comb (%%:(pat_name con), ps) == |
114 list_ccomb(%%:(dname^"_when"), map one_con cons)) |
114 list_ccomb(%%:(dname^"_when"), map one_con cons)) |
115 end |
115 end |
116 in map pdef cons end; |
116 in map pdef cons end; |
117 |
117 |
118 val sel_defs = let |
|
119 fun sdef con n arg = Option.map (fn sel => (sel^"_def",%%:sel == |
|
120 list_ccomb(%%:(dname^"_when"),map |
|
121 (fn (con', _, args) => if con'<>con then UU else |
|
122 List.foldr /\# (Bound (length args - n)) args) cons))) (sel_of arg); |
|
123 in map_filter I (maps (fn (con, _, args) => mapn (sdef con) 1 args) cons) end; |
|
124 |
|
125 |
118 |
126 (* ----- axiom and definitions concerning induction ------------------------- *) |
119 (* ----- axiom and definitions concerning induction ------------------------- *) |
127 |
120 |
128 val reach_ax = ("reach", mk_trp(proj (mk_fix (%%:(comp_dname^"_copy"))) eqs n |
121 val reach_ax = ("reach", mk_trp(proj (mk_fix (%%:(comp_dname^"_copy"))) eqs n |
129 `%x_name === %:x_name)); |
122 `%x_name === %:x_name)); |
139 mk_ex("n",(%%:(dname^"_take") $ Bound 0)`Bound 1 === Bound 1))); |
132 mk_ex("n",(%%:(dname^"_take") $ Bound 0)`Bound 1 === Bound 1))); |
140 |
133 |
141 in (dnam, |
134 in (dnam, |
142 (if definitional then [] else [abs_iso_ax, rep_iso_ax, reach_ax]), |
135 (if definitional then [] else [abs_iso_ax, rep_iso_ax, reach_ax]), |
143 (if definitional then [when_def] else [when_def, copy_def]) @ |
136 (if definitional then [when_def] else [when_def, copy_def]) @ |
144 dis_defs @ mat_defs @ pat_defs @ sel_defs @ |
137 dis_defs @ mat_defs @ pat_defs @ |
145 [take_def, finite_def]) |
138 [take_def, finite_def]) |
146 end; (* let (calc_axioms) *) |
139 end; (* let (calc_axioms) *) |
147 |
140 |
148 |
141 |
149 (* legacy type inference *) |
142 (* legacy type inference *) |