diff -r 692911c0b981 -r 3178f0e948ac thys3/BlexerSimp.thy --- a/thys3/BlexerSimp.thy Thu Jul 21 20:22:35 2022 +0100 +++ b/thys3/BlexerSimp.thy Tue Aug 02 22:11:22 2022 +0100 @@ -303,27 +303,7 @@ apply(subgoal_tac "(cc @ a # dB6 cc' (tset (cc @ [a]))) s\* (cc @ (p6 cc a) # dB6 cc' (tset (cc @ [a])))") sorry -(* -lemma ss6_stronger_aux: - shows "(rs1 @ rs2) s\* (rs1 @ dB6 rs2 (set (map erase rs1)))" - apply(induct rs2 arbitrary: rs1) - apply simp - apply(case_tac "erase a \ erase ` set rs1") - apply(simp) - apply(drule_tac x = "rs1" in meta_spec) - apply(subgoal_tac "(rs1 @ a # rs2) s\* (rs1 @ rs2)") - using srewrites_trans apply blast - using deletes_dB apply presburger - apply(case_tac "set (turnIntoTerms (erase a)) \ erase ` set rs1") - - apply simp - apply(auto) - prefer 2 - apply(drule_tac x="rs1 @ [a]" in meta_spec) - apply(simp) - sorry -*) lemma ss6_stronger: @@ -348,6 +328,7 @@ harmless sorry *) + sorry thm seqFold.simps @@ -359,7 +340,8 @@ done -lemma tint_seqFold_eq: shows"set (tint (seqFold (erase x42) [erase x43])) = +lemma tint_seqFold_eq: shows +"set (tint (seqFold (erase x42) [erase x43])) = set (tint (SEQ (erase x42) (erase x43)))" apply(case_tac "erase x42 = ONE") apply simp @@ -377,18 +359,31 @@ -lemma top_bitcodes_preserved_p6: - shows "\ r = ASEQ bs a1 a2 \ \ p6 as r = AZERO \ (\bs3. top (p6 as r) = bs @ bs3)" - apply(induct r arbitrary: as) - apply simp - apply simp - apply simp - apply(case_tac "a1") - apply simp +lemma p6fa_aux: + shows " fuse bs + (bsimp_AALTs bs\<^sub>0 as) = + + (bsimp_AALTs (bs @ bs\<^sub>0) as)" + by (metis bsimp_AALTs.simps(1) bsimp_AALTs.simps(2) bsimp_AALTs.simps(3) fuse.simps(1) fuse.simps(4) fuse_append neq_Nil_conv) - sorry +lemma p6pfuse_alts: + shows +" \bs\<^sub>0 as\<^sub>0. + \\a bs. set (tint (erase a)) = set (tint (erase (fuse bs a))); a = AALTs bs\<^sub>0 as\<^sub>0\ + \ \ set (tint (erase a)) \ (\x\set as. set (tint (erase x))) \ + fuse bs + (case a of AZERO \ AZERO | AONE x \ AONE x | ACHAR x xa \ ACHAR x xa + | ASEQ bs r1 r2 \ bsimp_ASEQ bs (prune6 (\x\set as. set (tint (erase x))) r1 [erase r2]) r2 + | AALTs bs rs0 \ bsimp_AALTs bs (filter notZero (map (\r. prune6 (\x\set as. set (tint (erase x))) r []) rs0)) | ASTAR x xa \ ASTAR x xa) + = + (case fuse bs a of AZERO \ AZERO | AONE x \ AONE x | ACHAR x xa \ ACHAR x xa + | ASEQ bs r1 r2 \ bsimp_ASEQ bs (prune6 (\x\set as. set (tint (erase x))) r1 [erase r2]) r2 + | AALTs bs rs0 \ bsimp_AALTs bs (filter notZero (map (\r. prune6 (\x\set as. set (tint (erase x))) r []) rs0)) | ASTAR x xa \ ASTAR x xa)" + apply simp + using p6fa_aux by presburger + @@ -406,9 +401,27 @@ apply simp using tint_seqFold_eq apply simp + apply (smt (z3) bsimp_ASEQ.simps(1) bsimp_ASEQ0 bsimp_ASEQ1 bsimp_ASEQ2 fuse.simps(1) fuse.simps(5) fuse_append) + using p6pfuse_alts apply presburger + by simp + +(* +The top-level bitlist stays the same: +\<^sub>b\<^sub>sa ------pruning-----> \<^sub>b\<^sub>s\<^sub>' b \ \bs3. bs' = bs @ bs3 +*) +lemma top_bitcodes_preserved_p6: + shows "top r = bs \ p6 as r = AZERO \ (\bs3. top (p6 as r) = bs @ bs3)" + + + apply(induct r arbitrary: as) + +(*this sorry requires more care *) + sorry + + corollary prune6_preserves_fuse_srewrite: shows "(as @ map (fuse bs) [a] @ as2) s\* (as @ map (fuse bs) [p6 as a] @ as2)" apply(subgoal_tac "map (fuse bs) [a] = [fuse bs a]") @@ -567,7 +580,14 @@ case (ss6 a1 a2 rsa rsb rsc) then show ?case by (smt (verit, best) Nil_is_append_conv bmkepss1 bmkepss2 bnullable_correctness in_set_conv_decomp list.distinct(1) list.set_intros(1) nullable_correctness set_ConsD subsetD) -qed (auto) +next + prefer 10 + case (ss7 as a as1) + then show ?case + +(*this sorry requires more effort*) + sorry +qed(auto) lemma rewrites_bmkeps: assumes "r1 \* r2" "bnullable r1" @@ -606,6 +626,12 @@ shows "(map f [a]) = [f a]" by (simp) +lemma "set (tint (erase a)) \ (\x\set as. set (tint (erase x))) \ + set (tint (erase (bder c a))) \ (\x\set (map (bder c) as). set (tint (erase x)))" + + sorry + + lemma rewrite_preserves_bder: shows "r1 \ r2 \ (bder c r1) \* (bder c r2)" and "rs1 s\ rs2 \ map (bder c) rs1 s\* map (bder c) rs2" @@ -681,6 +707,11 @@ apply(rule_tac rrewrite_srewrite.ss6) using Der_def der_correctness apply auto[1] by blast +next + case (ss7 as a as1) + then show ?case + apply simp + sorry qed lemma rewrites_preserves_bder: @@ -733,18 +764,20 @@ by (metis rrewrites_trans star_seq star_seq2) then have "ASEQ bs1 r1 r2 \* bsimpStrong6 (ASEQ bs1 r1 r2)" by simp } - ultimately show "ASEQ bs1 r1 r2 \* bsimpStrong6 (ASEQ bs1 r1 r2)" sorry + ultimately show "ASEQ bs1 r1 r2 \* bsimpStrong6 (ASEQ bs1 r1 r2)" + by blast next case (2 bs1 rs) have IH: "\x. x \ set rs \ x \* bsimpStrong6 x" by fact then have "rs s\* (map bsimpStrong6 rs)" by (simp add: trivialbsimp_srewrites) also have "... s\* flts (map bsimpStrong6 rs)" by (simp add: fltsfrewrites) - also have "... s\* distinctWith (flts (map bsimpStrong6 rs)) eq1 {}" by (simp add: ss6_stronger) - finally have "AALTs bs1 rs \* AALTs bs1 (distinctWith (flts (map bsimpStrong6 rs)) eq1 {})" + also have "... s\* dB6 (flts (map bsimpStrong6 rs)) {}" by (simp add: ss6_stronger) + finally have "AALTs bs1 rs \* AALTs bs1 (dB6 (flts (map bsimpStrong6 rs)) {})" using contextrewrites0 by auto - also have "... \* bsimp_AALTs bs1 (distinctWith (flts (map bsimpStrong6 rs)) eq1 {})" + also have "... \* bsimp_AALTs bs1 (dB6 (flts (map bsimpStrong6 rs)) {})" by (simp add: bsimp_AALTs_rewrites) - finally show "AALTs bs1 rs \* bsimpStrong6 (AALTs bs1 rs)" sorry + finally show "AALTs bs1 rs \* bsimpStrong6 (AALTs bs1 rs)" + using bsimpStrong6.simps(2) by presburger qed (simp_all)