src/ZF/Resid/Cube.ML
changeset 5068 fb28eaa07e01
parent 4152 451104c223e2
child 5147 825877190618
equal deleted inserted replaced
5067:62b6288e6005 5068:fb28eaa07e01
    15 (*         Prism theorem                                                     *)
    15 (*         Prism theorem                                                     *)
    16 (*         =============                                                     *)
    16 (*         =============                                                     *)
    17 (* ------------------------------------------------------------------------- *)
    17 (* ------------------------------------------------------------------------- *)
    18 
    18 
    19 (* Having more assumptions than needed -- removed below  *)
    19 (* Having more assumptions than needed -- removed below  *)
    20 goal Cube.thy 
    20 Goal 
    21     "!!u. v<==u ==> \
    21     "!!u. v<==u ==> \
    22 \   regular(u)-->(ALL w. w~v-->w~u-->  \
    22 \   regular(u)-->(ALL w. w~v-->w~u-->  \
    23 \             w |> u = (w|>v) |> (u|>v))";
    23 \             w |> u = (w|>v) |> (u|>v))";
    24 by (etac Ssub.induct 1);
    24 by (etac Ssub.induct 1);
    25 by (ALLGOALS (asm_simp_tac prism_ss));
    25 by (ALLGOALS (asm_simp_tac prism_ss));
    29 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 
    29 by (dresolve_tac [spec RS mp RS mp] 1 THEN resolve_tac [Scomp.Comp_Fun] 1 
    30     THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1)));
    30     THEN resolve_tac [Scomp.Comp_Fun] 2 THEN (REPEAT(assume_tac 1)));
    31 by (asm_full_simp_tac prism_ss 1);
    31 by (asm_full_simp_tac prism_ss 1);
    32 qed_spec_mp "prism_l";
    32 qed_spec_mp "prism_l";
    33 
    33 
    34 goal Cube.thy 
    34 Goal 
    35     "!!u.[|v <== u; regular(u); w~v|]==> \
    35     "!!u.[|v <== u; regular(u); w~v|]==> \
    36 \       w |> u = (w|>v) |> (u|>v)";
    36 \       w |> u = (w|>v) |> (u|>v)";
    37 by (rtac prism_l 1);
    37 by (rtac prism_l 1);
    38 by (rtac comp_trans 4);
    38 by (rtac comp_trans 4);
    39 by (assume_tac 4);
    39 by (assume_tac 4);
    43 
    43 
    44 (* ------------------------------------------------------------------------- *)
    44 (* ------------------------------------------------------------------------- *)
    45 (*    Levy's Cube Lemma                                                      *)
    45 (*    Levy's Cube Lemma                                                      *)
    46 (* ------------------------------------------------------------------------- *)
    46 (* ------------------------------------------------------------------------- *)
    47 
    47 
    48 goal Cube.thy 
    48 Goal 
    49     "!!u.[|u~v; regular(v); regular(u); w~u|]==>  \
    49     "!!u.[|u~v; regular(v); regular(u); w~u|]==>  \
    50 \          (w|>u) |> (v|>u) = (w|>v) |> (u|>v)";
    50 \          (w|>u) |> (v|>u) = (w|>v) |> (u|>v)";
    51 by (stac preservation 1 
    51 by (stac preservation 1 
    52     THEN assume_tac 1 THEN assume_tac 1);
    52     THEN assume_tac 1 THEN assume_tac 1);
    53 by (stac preservation 1 
    53 by (stac preservation 1 
    66 
    66 
    67 (* ------------------------------------------------------------------------- *)
    67 (* ------------------------------------------------------------------------- *)
    68 (*           paving theorem                                                  *)
    68 (*           paving theorem                                                  *)
    69 (* ------------------------------------------------------------------------- *)
    69 (* ------------------------------------------------------------------------- *)
    70 
    70 
    71 goal Cube.thy 
    71 Goal 
    72     "!!u.[|w~u; w~v; regular(u); regular(v)|]==> \
    72     "!!u.[|w~u; w~v; regular(u); regular(v)|]==> \
    73 \          EX uv vu. (w|>u) |> vu = (w|>v) |> uv & (w|>u)~vu &\
    73 \          EX uv vu. (w|>u) |> vu = (w|>v) |> uv & (w|>u)~vu &\
    74 \            regular(vu) & (w|>v)~uv & regular(uv) ";
    74 \            regular(vu) & (w|>v)~uv & regular(uv) ";
    75 by (subgoal_tac "u~v" 1);
    75 by (subgoal_tac "u~v" 1);
    76 by (safe_tac (claset() addSIs [exI]));
    76 by (safe_tac (claset() addSIs [exI]));