src/HOL/Lex/RegExp2NAe.ML
changeset 5118 6b995dad8a9d
parent 5069 3ea049f7979d
child 5132 24f992a25adc
equal deleted inserted replaced
5117:7b5efef2ca74 5118:6b995dad8a9d
    29  "(p,q) : step (atom a) (Some b) = (p=[True] & q=[False] & b=a)";
    29  "(p,q) : step (atom a) (Some b) = (p=[True] & q=[False] & b=a)";
    30 by(Simp_tac 1);
    30 by(Simp_tac 1);
    31 qed "in_step_atom_Some";
    31 qed "in_step_atom_Some";
    32 Addsimps [in_step_atom_Some];
    32 Addsimps [in_step_atom_Some];
    33 
    33 
    34 Goal
    34 Goal "([False],[False]) : steps (atom a) w = (w = [])";
    35  "([False],[False]) : steps (atom a) w = (w = [])";
       
    36 by (induct_tac "w" 1);
    35 by (induct_tac "w" 1);
    37  by(Simp_tac 1);
    36  by(Simp_tac 1);
    38 by(asm_simp_tac (simpset() addsimps [comp_def]) 1);
    37 by(asm_simp_tac (simpset() addsimps [comp_def]) 1);
    39 qed "False_False_in_steps_atom";
    38 qed "False_False_in_steps_atom";
    40 
    39 
    41 Goal
    40 Goal "(start (atom a), [False]) : steps (atom a) w = (w = [a])";
    42  "(start (atom a), [False]) : steps (atom a) w = (w = [a])";
       
    43 by (induct_tac "w" 1);
    41 by (induct_tac "w" 1);
    44  by(asm_simp_tac (simpset() addsimps [start_atom,rtrancl_empty]) 1);
    42  by(asm_simp_tac (simpset() addsimps [start_atom,rtrancl_empty]) 1);
    45 by(asm_full_simp_tac (simpset()
    43 by(asm_full_simp_tac (simpset()
    46      addsimps [False_False_in_steps_atom,comp_def,start_atom]) 1);
    44      addsimps [False_False_in_steps_atom,comp_def,start_atom]) 1);
    47 qed "start_fin_in_steps_atom";
    45 qed "start_fin_in_steps_atom";
    48 
    46 
    49 Goal
    47 Goal "accepts (atom a) w = (w = [a])";
    50  "accepts (atom a) w = (w = [a])";
       
    51 by(simp_tac(simpset() addsimps
    48 by(simp_tac(simpset() addsimps
    52        [accepts_def,start_fin_in_steps_atom,fin_atom]) 1);
    49        [accepts_def,start_fin_in_steps_atom,fin_atom]) 1);
    53 qed "accepts_atom";
    50 qed "accepts_atom";
    54 
    51 
    55 
    52 
    88 AddIffs [True_in_step_union,False_in_step_union];
    85 AddIffs [True_in_step_union,False_in_step_union];
    89 
    86 
    90 (***** True/False ueber epsclosure anheben *****)
    87 (***** True/False ueber epsclosure anheben *****)
    91 
    88 
    92 Goal
    89 Goal
    93  "!!d. (tp,tq) : (eps(union L R))^* ==> \
    90  "(tp,tq) : (eps(union L R))^* ==> \
    94 \ !p. tp = True#p --> (? q. (p,q) : (eps L)^* & tq = True#q)";
    91 \ !p. tp = True#p --> (? q. (p,q) : (eps L)^* & tq = True#q)";
    95 be rtrancl_induct 1;
    92 be rtrancl_induct 1;
    96  by(Blast_tac 1);
    93  by(Blast_tac 1);
    97 by(Clarify_tac 1);
    94 by(Clarify_tac 1);
    98 by(Asm_full_simp_tac 1);
    95 by(Asm_full_simp_tac 1);
    99 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
    96 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   100 val lemma1a = result();
    97 val lemma1a = result();
   101 
    98 
   102 Goal
    99 Goal
   103  "!!d. (tp,tq) : (eps(union L R))^* ==> \
   100  "(tp,tq) : (eps(union L R))^* ==> \
   104 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)";
   101 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)";
   105 be rtrancl_induct 1;
   102 be rtrancl_induct 1;
   106  by(Blast_tac 1);
   103  by(Blast_tac 1);
   107 by(Clarify_tac 1);
   104 by(Clarify_tac 1);
   108 by(Asm_full_simp_tac 1);
   105 by(Asm_full_simp_tac 1);
   109 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   106 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   110 val lemma1b = result();
   107 val lemma1b = result();
   111 
   108 
   112 Goal
   109 Goal
   113  "!!p. (p,q) : (eps L)^*  ==> (True#p, True#q) : (eps(union L R))^*";
   110  "(p,q) : (eps L)^*  ==> (True#p, True#q) : (eps(union L R))^*";
   114 be rtrancl_induct 1;
   111 be rtrancl_induct 1;
   115  by(Blast_tac 1);
   112  by(Blast_tac 1);
   116 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   113 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   117 val lemma2a = result();
   114 val lemma2a = result();
   118 
   115 
   119 Goal
   116 Goal
   120  "!!p. (p,q) : (eps R)^*  ==> (False#p, False#q) : (eps(union L R))^*";
   117  "(p,q) : (eps R)^*  ==> (False#p, False#q) : (eps(union L R))^*";
   121 be rtrancl_induct 1;
   118 be rtrancl_induct 1;
   122  by(Blast_tac 1);
   119  by(Blast_tac 1);
   123 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   120 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   124 val lemma2b = result();
   121 val lemma2b = result();
   125 
   122 
   289 AddIffs [True_step_conc, False_step_conc];
   286 AddIffs [True_step_conc, False_step_conc];
   290 
   287 
   291 (** False in epsclosure **)
   288 (** False in epsclosure **)
   292 
   289 
   293 Goal
   290 Goal
   294  "!!d. (tp,tq) : (eps(conc L R))^* ==> \
   291  "(tp,tq) : (eps(conc L R))^* ==> \
   295 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)";
   292 \ !p. tp = False#p --> (? q. (p,q) : (eps R)^* & tq = False#q)";
   296 by(etac rtrancl_induct 1);
   293 by(etac rtrancl_induct 1);
   297  by(Blast_tac 1);
   294  by(Blast_tac 1);
   298 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   295 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   299 qed "lemma1b";
   296 qed "lemma1b";
   300 
   297 
   301 Goal
   298 Goal
   302  "!!p. (p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*";
   299  "(p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*";
   303 by(etac rtrancl_induct 1);
   300 by(etac rtrancl_induct 1);
   304  by(Blast_tac 1);
   301  by(Blast_tac 1);
   305 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   302 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   306 val lemma2b = result();
   303 val lemma2b = result();
   307 
   304 
   327 AddIffs [False_steps_conc];
   324 AddIffs [False_steps_conc];
   328 
   325 
   329 (** True in epsclosure **)
   326 (** True in epsclosure **)
   330 
   327 
   331 Goal
   328 Goal
   332  "!!L R. (p,q): (eps L)^* ==> (True#p,True#q) : (eps(conc L R))^*";
   329  "(p,q): (eps L)^* ==> (True#p,True#q) : (eps(conc L R))^*";
   333 be rtrancl_induct 1;
   330 be rtrancl_induct 1;
   334  by(Blast_tac 1);
   331  by(Blast_tac 1);
   335 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   332 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   336 qed "True_True_eps_concI";
   333 qed "True_True_eps_concI";
   337 
   334 
   338 Goal
   335 Goal
   339  "!!L R. !p. (p,q) : steps L w --> (True#p,True#q) : steps (conc L R) w";
   336  "!p. (p,q) : steps L w --> (True#p,True#q) : steps (conc L R) w";
   340 by(induct_tac "w" 1);
   337 by(induct_tac "w" 1);
   341  by (simp_tac (simpset() addsimps [True_True_eps_concI]) 1);
   338  by (simp_tac (simpset() addsimps [True_True_eps_concI]) 1);
   342 by (Simp_tac 1);
   339 by (Simp_tac 1);
   343 by(blast_tac (claset() addIs [True_True_eps_concI]) 1);
   340 by(blast_tac (claset() addIs [True_True_eps_concI]) 1);
   344 qed_spec_mp "True_True_steps_concI";
   341 qed_spec_mp "True_True_steps_concI";
   345 
   342 
   346 Goal
   343 Goal
   347  "!!d. (tp,tq) : (eps(conc L R))^* ==> \
   344  "(tp,tq) : (eps(conc L R))^* ==> \
   348 \ !p. tp = True#p --> \
   345 \ !p. tp = True#p --> \
   349 \ (? q. tq = True#q & (p,q) : (eps L)^*) | \
   346 \ (? q. tq = True#q & (p,q) : (eps L)^*) | \
   350 \ (? q r. tq = False#q & (p,r):(eps L)^* & fin L r & (start R,q) : (eps R)^*)";
   347 \ (? q r. tq = False#q & (p,r):(eps L)^* & fin L r & (start R,q) : (eps R)^*)";
   351 by(etac rtrancl_induct 1);
   348 by(etac rtrancl_induct 1);
   352  by(Blast_tac 1);
   349  by(Blast_tac 1);
   353 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   350 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   354 val lemma1a = result();
   351 val lemma1a = result();
   355 
   352 
   356 Goal
   353 Goal
   357  "!!p. (p, q) : (eps L)^* ==> (True#p, True#q) : (eps(conc L R))^*";
   354  "(p, q) : (eps L)^* ==> (True#p, True#q) : (eps(conc L R))^*";
   358 by(etac rtrancl_induct 1);
   355 by(etac rtrancl_induct 1);
   359  by(Blast_tac 1);
   356  by(Blast_tac 1);
   360 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   357 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   361 val lemma2a = result();
   358 val lemma2a = result();
   362 
   359 
   365 by(split_all_tac 1);
   362 by(split_all_tac 1);
   366 by (Asm_full_simp_tac 1);
   363 by (Asm_full_simp_tac 1);
   367 val lemma = result();
   364 val lemma = result();
   368 
   365 
   369 Goal
   366 Goal
   370  "!!L R. (p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*";
   367  "(p,q) : (eps R)^* ==> (False#p, False#q) : (eps(conc L R))^*";
   371 by(etac rtrancl_induct 1);
   368 by(etac rtrancl_induct 1);
   372  by(Blast_tac 1);
   369  by(Blast_tac 1);
   373 by (dtac lemma 1);
   370 by (dtac lemma 1);
   374 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   371 by(blast_tac (claset() addIs [rtrancl_into_rtrancl]) 1);
   375 val lemma2b = result();
   372 val lemma2b = result();
   475   "!A. (p,q) : step A a --> (True#p, True#q) : step (star A) a";
   472   "!A. (p,q) : step A a --> (True#p, True#q) : step (star A) a";
   476 by(Simp_tac 1);
   473 by(Simp_tac 1);
   477 qed_spec_mp "True_True_step_starI";
   474 qed_spec_mp "True_True_step_starI";
   478 
   475 
   479 Goal
   476 Goal
   480   "!!A. (p,r) : (eps A)^* ==> (True#p, True#r) : (eps(star A))^*";
   477   "(p,r) : (eps A)^* ==> (True#p, True#r) : (eps(star A))^*";
   481 be rtrancl_induct 1;
   478 be rtrancl_induct 1;
   482  by(Blast_tac 1);
   479  by(Blast_tac 1);
   483 by(blast_tac (claset() addIs [True_True_step_starI,rtrancl_into_rtrancl]) 1);
   480 by(blast_tac (claset() addIs [True_True_step_starI,rtrancl_into_rtrancl]) 1);
   484 qed_spec_mp "True_True_eps_starI";
   481 qed_spec_mp "True_True_eps_starI";
   485 
   482 
   487  "!A. fin A p --> (True#p,True#start A) : eps(star A)";
   484  "!A. fin A p --> (True#p,True#start A) : eps(star A)";
   488 by(Simp_tac 1);
   485 by(Simp_tac 1);
   489 qed_spec_mp "True_start_eps_starI";
   486 qed_spec_mp "True_start_eps_starI";
   490 
   487 
   491 Goal
   488 Goal
   492  "!!dummy. (tp,s) : (eps(star A))^* ==> (! p. tp = True#p --> \
   489  "(tp,s) : (eps(star A))^* ==> (! p. tp = True#p --> \
   493 \ (? r. ((p,r) : (eps A)^* | \
   490 \ (? r. ((p,r) : (eps A)^* | \
   494 \        (? q. (p,q) : (eps A)^* & fin A q & (start A,r) : (eps A)^*)) & \
   491 \        (? q. (p,q) : (eps A)^* & fin A q & (start A,r) : (eps A)^*)) & \
   495 \       s = True#r))";
   492 \       s = True#r))";
   496 be rtrancl_induct 1;
   493 be rtrancl_induct 1;
   497  by(Simp_tac 1);
   494  by(Simp_tac 1);