src/ZF/Resid/SubUnion.ML
changeset 1461 6bcb44e4d6e5
parent 1048 5ba0314f8214
child 1732 38776e927da8
equal deleted inserted replaced
1460:5a6f2aabd538 1461:6bcb44e4d6e5
     1 (*  Title: 	SubUnion.ML
     1 (*  Title:      SubUnion.ML
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author: 	Ole Rasmussen
     3     Author:     Ole Rasmussen
     4     Copyright   1995  University of Cambridge
     4     Copyright   1995  University of Cambridge
     5     Logic Image: ZF
     5     Logic Image: ZF
     6 *)
     6 *)
     7 
     7 
     8 open SubUnion;
     8 open SubUnion;
    43 by (simp_tac (rank_ss addsimps redexes.con_defs)  1);
    43 by (simp_tac (rank_ss addsimps redexes.con_defs)  1);
    44 val union_App = result();
    44 val union_App = result();
    45 
    45 
    46 val union_ss = redexes_ss addsimps 
    46 val union_ss = redexes_ss addsimps 
    47                 (Ssub.intrs@bool_simps@bool_typechecks@
    47                 (Ssub.intrs@bool_simps@bool_typechecks@
    48 		 Sreg.intrs@Scomp.intrs@
    48                  Sreg.intrs@Scomp.intrs@
    49 		 [or_1 RSN (3,or_commute RS trans),
    49                  [or_1 RSN (3,or_commute RS trans),
    50 		  or_0 RSN (3,or_commute RS trans),
    50                   or_0 RSN (3,or_commute RS trans),
    51 		  union_App,union_Fun,union_Var,compD2,compD1,regD]);
    51                   union_App,union_Fun,union_Var,compD2,compD1,regD]);
    52 
    52 
    53 val union_cs = (ZF_cs addIs Scomp.intrs addSEs 
    53 val union_cs = (ZF_cs addIs Scomp.intrs addSEs 
    54 		[Sreg.mk_cases redexes.con_defs "regular(App(b,f,a))",
    54                 [Sreg.mk_cases redexes.con_defs "regular(App(b,f,a))",
    55 		 Sreg.mk_cases redexes.con_defs "regular(Fun(b))",
    55                  Sreg.mk_cases redexes.con_defs "regular(Fun(b))",
    56 		 Sreg.mk_cases redexes.con_defs "regular(Var(b))",
    56                  Sreg.mk_cases redexes.con_defs "regular(Var(b))",
    57 		 Scomp.mk_cases redexes.con_defs "Fun(u) ~ Fun(t)",
    57                  Scomp.mk_cases redexes.con_defs "Fun(u) ~ Fun(t)",
    58 		 Scomp.mk_cases redexes.con_defs "u ~ Fun(t)",
    58                  Scomp.mk_cases redexes.con_defs "u ~ Fun(t)",
    59 		 Scomp.mk_cases redexes.con_defs "u ~ Var(n)",
    59                  Scomp.mk_cases redexes.con_defs "u ~ Var(n)",
    60 		 Scomp.mk_cases redexes.con_defs "u ~ App(b,t,a)",
    60                  Scomp.mk_cases redexes.con_defs "u ~ App(b,t,a)",
    61 		 Scomp.mk_cases redexes.con_defs "Fun(t) ~ v",
    61                  Scomp.mk_cases redexes.con_defs "Fun(t) ~ v",
    62 		 Scomp.mk_cases redexes.con_defs "App(b,f,a) ~ v",
    62                  Scomp.mk_cases redexes.con_defs "App(b,f,a) ~ v",
    63 		 Scomp.mk_cases redexes.con_defs "Var(n) ~ u"
    63                  Scomp.mk_cases redexes.con_defs "Var(n) ~ u"
    64 		 ]);
    64                  ]);
    65 
    65 
    66 
    66 
    67 
    67 
    68 (* ------------------------------------------------------------------------- *)
    68 (* ------------------------------------------------------------------------- *)
    69 (*    comp proofs                                                            *)
    69 (*    comp proofs                                                            *)
    74 by (ALLGOALS(fast_tac union_cs));
    74 by (ALLGOALS(fast_tac union_cs));
    75 val comp_refl = result();
    75 val comp_refl = result();
    76 
    76 
    77 goal SubUnion.thy 
    77 goal SubUnion.thy 
    78     "!!u.u ~ v ==> v ~ u";
    78     "!!u.u ~ v ==> v ~ u";
    79 by (eresolve_tac [comp_induct] 1);
    79 by (etac comp_induct 1);
    80 by (ALLGOALS(fast_tac union_cs));
    80 by (ALLGOALS(fast_tac union_cs));
    81 val comp_sym = result();
    81 val comp_sym = result();
    82 
    82 
    83 goal SubUnion.thy 
    83 goal SubUnion.thy 
    84     "u ~ v <-> v ~ u";
    84     "u ~ v <-> v ~ u";
    86 val comp_sym_iff = result();
    86 val comp_sym_iff = result();
    87 
    87 
    88 
    88 
    89 goal SubUnion.thy 
    89 goal SubUnion.thy 
    90     "!!u.u ~ v ==> ALL w.v ~ w-->u ~ w";
    90     "!!u.u ~ v ==> ALL w.v ~ w-->u ~ w";
    91 by (eresolve_tac [comp_induct] 1);
    91 by (etac comp_induct 1);
    92 by (ALLGOALS(fast_tac union_cs));
    92 by (ALLGOALS(fast_tac union_cs));
    93 val comp_trans1 = result();
    93 val comp_trans1 = result();
    94 
    94 
    95 val comp_trans = comp_trans1 RS spec RS mp;
    95 val comp_trans = comp_trans1 RS spec RS mp;
    96 
    96 
   101 val sub_induct = standard
   101 val sub_induct = standard
   102     (Ssub.mutual_induct RS spec RS spec RSN (2,rev_mp));
   102     (Ssub.mutual_induct RS spec RS spec RSN (2,rev_mp));
   103 
   103 
   104 goal SubUnion.thy 
   104 goal SubUnion.thy 
   105     "!!u.u ~ v ==> u <== (u un v)";
   105     "!!u.u ~ v ==> u <== (u un v)";
   106 by (eresolve_tac [comp_induct] 1);
   106 by (etac comp_induct 1);
   107 by (eresolve_tac [boolE] 3);
   107 by (etac boolE 3);
   108 by (ALLGOALS(asm_full_simp_tac union_ss));
   108 by (ALLGOALS(asm_full_simp_tac union_ss));
   109 val union_l = result();
   109 val union_l = result();
   110 
   110 
   111 goal SubUnion.thy 
   111 goal SubUnion.thy 
   112     "!!u.u ~ v ==> v <== (u un v)";
   112     "!!u.u ~ v ==> v <== (u un v)";
   113 by (eresolve_tac [comp_induct] 1);
   113 by (etac comp_induct 1);
   114 by (eres_inst_tac [("c","b2")] boolE 3);
   114 by (eres_inst_tac [("c","b2")] boolE 3);
   115 by (ALLGOALS(asm_full_simp_tac union_ss));
   115 by (ALLGOALS(asm_full_simp_tac union_ss));
   116 val union_r = result();
   116 val union_r = result();
   117 
   117 
   118 goal SubUnion.thy 
   118 goal SubUnion.thy 
   119     "!!u.u ~ v ==> u un v = v un u";
   119     "!!u.u ~ v ==> u un v = v un u";
   120 by (eresolve_tac [comp_induct] 1);
   120 by (etac comp_induct 1);
   121 by (ALLGOALS(asm_simp_tac (union_ss addsimps [or_commute])));
   121 by (ALLGOALS(asm_simp_tac (union_ss addsimps [or_commute])));
   122 val union_sym = result();
   122 val union_sym = result();
   123 
   123 
   124 (* ------------------------------------------------------------------------- *)
   124 (* ------------------------------------------------------------------------- *)
   125 (*      regular proofs                                                       *)
   125 (*      regular proofs                                                       *)
   126 (* ------------------------------------------------------------------------- *)
   126 (* ------------------------------------------------------------------------- *)
   127 
   127 
   128 goal SubUnion.thy 
   128 goal SubUnion.thy 
   129     "!!u.u ~ v ==> regular(u)-->regular(v)-->regular(u un v)";
   129     "!!u.u ~ v ==> regular(u)-->regular(v)-->regular(u un v)";
   130 by (eresolve_tac [comp_induct] 1);
   130 by (etac comp_induct 1);
   131 by (ALLGOALS(asm_full_simp_tac
   131 by (ALLGOALS(asm_full_simp_tac
   132 	     (union_ss setloop(SELECT_GOAL (safe_tac union_cs)))));
   132              (union_ss setloop(SELECT_GOAL (safe_tac union_cs)))));
   133 by (dres_inst_tac [("psi", "regular(Fun(?u) un ?v)")] asm_rl 1);
   133 by (dres_inst_tac [("psi", "regular(Fun(?u) un ?v)")] asm_rl 1);
   134 by (asm_full_simp_tac union_ss 1);
   134 by (asm_full_simp_tac union_ss 1);
   135 val union_preserve_regular = result();
   135 val union_preserve_regular = result();