equal
deleted
inserted
replaced
99 | defs (l::[]) r = [one_def l r] |
99 | defs (l::[]) r = [one_def l r] |
100 | defs (l::ls) r = one_def l (%%:"Cprod.cfst"`r) :: defs ls (%%:"Cprod.csnd"`r); |
100 | defs (l::ls) r = one_def l (%%:"Cprod.cfst"`r) :: defs ls (%%:"Cprod.csnd"`r); |
101 val (names, pre_fixdefs) = ListPair.unzip (defs lhss fixpoint); |
101 val (names, pre_fixdefs) = ListPair.unzip (defs lhss fixpoint); |
102 |
102 |
103 val fixdefs = map (inferT_axm thy) pre_fixdefs; |
103 val fixdefs = map (inferT_axm thy) pre_fixdefs; |
104 val (thy', fixdef_thms) = |
104 val (fixdef_thms, thy') = |
105 PureThy.add_defs_i false (map Thm.no_attributes fixdefs) thy; |
105 PureThy.add_defs_i false (map Thm.no_attributes fixdefs) thy; |
106 val ctuple_fixdef_thm = foldr1 (fn (x,y) => cpair_equalI OF [x,y]) fixdef_thms; |
106 val ctuple_fixdef_thm = foldr1 (fn (x,y) => cpair_equalI OF [x,y]) fixdef_thms; |
107 |
107 |
108 val ctuple_unfold = infer thy' (mk_trp (mk_ctuple lhss === mk_ctuple rhss)); |
108 val ctuple_unfold = infer thy' (mk_trp (mk_ctuple lhss === mk_ctuple rhss)); |
109 val ctuple_unfold_thm = standard (Goal.prove thy' [] [] ctuple_unfold |
109 val ctuple_unfold_thm = standard (Goal.prove thy' [] [] ctuple_unfold |