686 (res_inst_tac [("s","f[g[y]]"),("t","y")] subst 1), |
686 (res_inst_tac [("s","f[g[y]]"),("t","y")] subst 1), |
687 (etac spec 1), |
687 (etac spec 1), |
688 (etac cfun_arg_cong 1) |
688 (etac cfun_arg_cong 1) |
689 ]); |
689 ]); |
690 |
690 |
|
691 (* ------------------------------------------------------------------------- *) |
|
692 (* a result about functions with flat codomain *) |
|
693 (* ------------------------------------------------------------------------- *) |
|
694 |
|
695 val flat_codom = prove_goalw Fix.thy [flat_def] |
|
696 "[|flat(y::'b);f[x::'a]=(c::'b)|] ==> f[UU::'a]=UU::'b | (!z.f[z::'a]=c)" |
|
697 (fn prems => |
|
698 [ |
|
699 (cut_facts_tac prems 1), |
|
700 (res_inst_tac [("Q","f[x::'a]=UU::'b")] classical2 1), |
|
701 (rtac disjI1 1), |
|
702 (rtac UU_I 1), |
|
703 (res_inst_tac [("s","f[x]"),("t","UU::'b")] subst 1), |
|
704 (atac 1), |
|
705 (rtac (minimal RS monofun_cfun_arg) 1), |
|
706 (res_inst_tac [("Q","f[UU::'a]=UU::'b")] classical2 1), |
|
707 (etac disjI1 1), |
|
708 (rtac disjI2 1), |
|
709 (rtac allI 1), |
|
710 (res_inst_tac [("s","f[x]"),("t","c")] subst 1), |
|
711 (atac 1), |
|
712 (res_inst_tac [("a","f[UU::'a]")] (refl RS box_equals) 1), |
|
713 (etac allE 1),(etac allE 1), |
|
714 (dtac mp 1), |
|
715 (res_inst_tac [("fo5","f")] (minimal RS monofun_cfun_arg) 1), |
|
716 (etac disjE 1), |
|
717 (contr_tac 1), |
|
718 (atac 1), |
|
719 (etac allE 1), |
|
720 (etac allE 1), |
|
721 (dtac mp 1), |
|
722 (res_inst_tac [("fo5","f")] (minimal RS monofun_cfun_arg) 1), |
|
723 (etac disjE 1), |
|
724 (contr_tac 1), |
|
725 (atac 1) |
|
726 ]); |
|
727 |
691 (* ------------------------------------------------------------------------ *) |
728 (* ------------------------------------------------------------------------ *) |
692 (* admissibility of special formulae and propagation *) |
729 (* admissibility of special formulae and propagation *) |
693 (* ------------------------------------------------------------------------ *) |
730 (* ------------------------------------------------------------------------ *) |
694 |
731 |
695 val adm_less = prove_goalw Fix.thy [adm_def] |
732 val adm_less = prove_goalw Fix.thy [adm_def] |
1125 (atac 1), |
1164 (atac 1), |
1126 (atac 1) |
1165 (atac 1) |
1127 ]); |
1166 ]); |
1128 |
1167 |
1129 |
1168 |
1130 val adm_all2 = (allI RS adm_all); |
|
1131 |
1169 |
1132 val adm_thms = [adm_impl,adm_disj,adm_eq,adm_not_UU,adm_UU_not_less, |
1170 val adm_thms = [adm_impl,adm_disj,adm_eq,adm_not_UU,adm_UU_not_less, |
1133 adm_all2,adm_not_less,adm_not_free,adm_conj,adm_less |
1171 adm_all2,adm_not_less,adm_not_free,adm_conj,adm_less |
1134 ]; |
1172 ]; |
1135 |
1173 |
1136 (* ------------------------------------------------------------------------- *) |
|
1137 (* a result about functions with flat codomain *) |
|
1138 (* ------------------------------------------------------------------------- *) |
|
1139 |
|
1140 val flat_codom = prove_goalw Fix.thy [flat_def] |
|
1141 "[|flat(y::'b);f[x::'a]=(c::'b)|] ==> f[UU::'a]=(UU::'b) | (!z.f[z::'a]=c)" |
|
1142 (fn prems => |
|
1143 [ |
|
1144 (cut_facts_tac prems 1), |
|
1145 (res_inst_tac [("Q","f[x::'a]=(UU::'b)")] classical2 1), |
|
1146 (rtac disjI1 1), |
|
1147 (rtac UU_I 1), |
|
1148 (res_inst_tac [("s","f[x]"),("t","UU::'b")] subst 1), |
|
1149 (atac 1), |
|
1150 (rtac (minimal RS monofun_cfun_arg) 1), |
|
1151 (res_inst_tac [("Q","f[UU::'a]=(UU::'b)")] classical2 1), |
|
1152 (etac disjI1 1), |
|
1153 (rtac disjI2 1), |
|
1154 (rtac allI 1), |
|
1155 (res_inst_tac [("s","f[x]"),("t","c")] subst 1), |
|
1156 (atac 1), |
|
1157 (res_inst_tac [("a","f[UU::'a]")] (refl RS box_equals) 1), |
|
1158 (etac allE 1),(etac allE 1), |
|
1159 (dtac mp 1), |
|
1160 (res_inst_tac [("fo5","f")] (minimal RS monofun_cfun_arg) 1), |
|
1161 (etac disjE 1), |
|
1162 (contr_tac 1), |
|
1163 (atac 1), |
|
1164 (etac allE 1), |
|
1165 (etac allE 1), |
|
1166 (dtac mp 1), |
|
1167 (res_inst_tac [("fo5","f")] (minimal RS monofun_cfun_arg) 1), |
|
1168 (etac disjE 1), |
|
1169 (contr_tac 1), |
|
1170 (atac 1) |
|
1171 ]); |
|