(* Title: HOL/HOLCF/IOA/ShortExecutions.thy Author: Olaf Müller *)
theory ShortExecutions imports Traces begin
text‹ Some properties about ‹Cut ex›, defined as follows: For every execution ex there is another shorter execution ‹Cut ex› that has the same trace as ex, but its schedule ends with an external action. ›
definition oraclebuild :: "('a ==> bool) ==> 'a Seq → 'a Seq → 'a Seq" where"oraclebuild P = (fix ⋅ (LAM h s t. case t of nil ==> nil | x ## xs ==> (case x of UU ==> UU | Def y ==> (Takewhile (λx. ¬ P x) ⋅ s) @@ (y ↝ (h ⋅ (TL ⋅ (Dropwhile (λx. ¬ P x) ⋅ s)) ⋅ xs)))))"
definition Cut :: "('a ==> bool) ==> 'a Seq ==> 'a Seq" where"Cut P s = oraclebuild P ⋅ s ⋅ (Filter P ⋅ s)"
definition LastActExtsch :: "('a,'s) ioa ==> 'a Seq ==> bool" where"LastActExtsch A sch ⟷ Cut (λx. x ∈ ext A) sch = sch"
axiomatizationwhere
Cut_prefixcl_Finite: "Finite s ==>∃y. s = Cut P s @@ y"
axiomatizationwhere
LastActExtsmall1: "LastActExtsch A sch ==> LastActExtsch A (TL ⋅ (Dropwhile P ⋅ sch))"
axiomatizationwhere
LastActExtsmall2: "Finite sch1 ==> LastActExtsch A (sch1 @@ sch2) ==> LastActExtsch A sch2"
lemma oraclebuild_unfold: "oraclebuild P = (LAM s t. case t of nil ==> nil | x ## xs ==> (case x of UU ==> UU | Def y ==> (Takewhile (λa. ¬ P a) ⋅ s) @@ (y ↝ (oraclebuild P ⋅ (TL ⋅ (Dropwhile (λa. ¬ P a) ⋅ s)) ⋅ xs))))" apply (rule trans) apply (rule fix_eq2) apply (simp only: oraclebuild_def) apply (rule beta_cfun) apply simp done
lemma oraclebuild_cons: "oraclebuild P ⋅ s ⋅ (x ↝ t) = (Takewhile (λa. ¬ P a) ⋅ s) @@ (x ↝ (oraclebuild P ⋅ (TL ⋅ (Dropwhile (λa. ¬ P a) ⋅ s)) ⋅ t))" apply (rule trans) apply (subst oraclebuild_unfold) apply (simp add: Consq_def) apply (simp add: Consq_def) done
subsection‹Cut rewrite rules›
lemma Cut_nil: "Forall (λa. ¬ P a) s ==> Finite s ==> Cut P s = nil" apply (unfold Cut_def) apply (subgoal_tac "Filter P ⋅ s = nil") apply (simp add: oraclebuild_nil) apply (rule ForallQFilterPnil) apply assumption+ done
lemma Cut_UU: "Forall (λa. ¬ P a) s ==>¬ Finite s ==> Cut P s = UU" apply (unfold Cut_def) apply (subgoal_tac "Filter P ⋅ s = UU") apply (simp add: oraclebuild_UU) apply (rule ForallQFilterPUU) apply assumption+ done
lemma Cut_Cons: "P t ==> Forall (λx. ¬ P x) ss ==> Finite ss ==> Cut P (ss @@ (t ↝ rs)) = ss @@ (t ↝ Cut P rs)" apply (unfold Cut_def) apply (simp add: ForallQFilterPnil oraclebuild_cons TakewhileConc DropwhileConc) done
subsection‹Cut lemmas for main theorem›
lemma FilterCut: "Filter P ⋅ s = Filter P ⋅ (Cut P s)" apply (rule_tac A1 = "λx. True"and Q1 = "λx. ¬ P x"and x1 = "s"in take_lemma_induct [THEN mp]) prefer 3 apply fast apply (case_tac "Finite s") apply (simp add: Cut_nil ForallQFilterPnil) apply (simp add: Cut_UU ForallQFilterPUU) text‹main case› apply (simp add: Cut_Cons ForallQFilterPnil) done
lemma Cut_idemp: "Cut P (Cut P s) = (Cut P s)" apply (rule_tac A1 = "λx. True"and Q1 = "λx. ¬ P x"and x1 = "s"in
take_lemma_less_induct [THEN mp]) prefer 3 apply fast apply (case_tac "Finite s") apply (simp add: Cut_nil ForallQFilterPnil) apply (simp add: Cut_UU ForallQFilterPUU) text‹main case› apply (simp add: Cut_Cons ForallQFilterPnil) apply (rule take_reduction) apply auto done
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.