Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  DefAss.thy

  Sprache: Isabelle
 

(*  Title:      JinjaThreads/J/DefAss.thy
    Author:     Tobias Nipkow, Andreas Lochbihler
*)


section Definite assignment

theory DefAss
imports 
  Expr
begin

subsection "Hypersets"

type_synonym 'a hyperset = "'a set option"

definition hyperUn :: "'a hyperset ==> 'a hyperset ==> 'a hyperset"   (infixl  65)
where
  "A B case A of None ==> None
                 | A ==> (case B of None ==> None | B ==> A B)"

definition hyperInt :: "'a hyperset ==> 'a hyperset ==> 'a hyperset"   (infixl  70)
where
  "A B case A of None ==> B
                 | A ==> (case B of None ==> A | B ==> A B)"

definition hyperDiff1 :: "'a hyperset ==> 'a ==> 'a hyperset"   (infixl  65)
where
  "A a case A of None ==> None | A ==> A - {a}"

definition hyper_isin :: "'a ==> 'a hyperset ==> bool"   (infix  50)
where
 "a A case A of None ==> True | A ==> a A"

definition hyper_subset :: "'a hyperset ==> 'a hyperset ==> bool"   (infix  50)
where
  "A B case B of None ==> True
                 | B ==> (case A of None ==> False | A ==> A B)"

lemmas hyperset_defs =
 hyperUn_def hyperInt_def hyperDiff1_def hyper_isin_def hyper_subset_def

lemma [simp]: "{} A = A A {} = A"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "A B = A B A a = A - {a}"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "None A = None A None = None"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma [simp]: "a None None a = None"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma hyperUn_assoc: "(A B) C = A (B C)"
(*<*)by(simp add:hyperset_defs Un_assoc)(*>*)

lemma hyper_insert_comm: "A {a} = {a} A A ({a} B) = {a} (A B)"
(*<*)by(simp add:hyperset_defs)(*>*)

lemma sqSub_mem_lem [elim]: "[ A A'; a A ] ==> a A'"
by(auto simp add: hyperset_defs)

lemma [iff]: "A None"
by(auto simp add: hyperset_defs)

lemma [simp]: "A A"
by(auto simp add: hyperset_defs)

lemma [iff]: "A B A B"
by(auto simp add: hyperset_defs)

lemma sqUn_lem2: "A A' ==> B A B A'"
by(simp add:hyperset_defs) blast

lemma sqSub_trans [trans, intro]: "[ A B; B C ] ==> A C"
by(auto simp add: hyperset_defs)

lemma hyperUn_comm: "A B = B A"
by(auto simp add: hyperset_defs)

lemma hyperUn_leftComm: "A (B C) = B (A C)"
by(auto simp add: hyperset_defs)

lemmas hyperUn_ac = hyperUn_comm hyperUn_leftComm hyperUn_assoc

lemma [simp]: "{} B = B"
by(auto)

lemma [simp]: "{} A"
by(auto simp add: hyperset_defs)

lemma sqInt_lem: "A A' ==> A B A' B"
by(auto simp add: hyperset_defs)

subsection "Definite assignment"

primrec A  :: "('a,'b,'addr) exp ==> 'a hyperset"
  and As :: "('a,'b,'addr) exp list ==> 'a hyperset"
where
  "A (new C) = {}"
"A (newA Te) = A e"
"A (Cast C e) = A e"
"A (e instanceof T) = A e"
"A (Val v) = {}"
"A (e1 «bop¬ e2) = A e1 A e2"
"A (Var V) = {}"
"A (LAss V e) = {V} A e"
"A (ai) = A a A i"
"A (ai := e) = A a A i A e"
"A (alength) = A a"
"A (eF{D}) = A e"
"A (e1F{D}:=e2) = A e1 A e2"
"A (e1compareAndSwap(DF, e2, e3)) = A e1 A e2 A e3"
"A (eM(es)) = A e As es"
"A ({V:T=vo; e}) = A e V"
"A (sync (o') e) = A o' A e"
"A (insync (a) e) = A e"
"A (e1;;e2) = A e1 A e2"
"A (if (e) e1 else e2) = A e (A e1 A e2)"
"A (while (b) e) = A b"
"A (throw e) = None"
"A (try e1 catch(C V) e2) = A e1 (A e2 V)"

"As ([]) = {}"
"As (e#es) = A e As es"

primrec D  :: "('a,'b,'addr) exp ==> 'a hyperset ==> bool"
  and Ds :: "('a,'b,'addr) exp list ==> 'a hyperset ==> bool"
where
  "D (new C) A = True"
"D (newA Te) A = D e A"
"D (Cast C e) A = D e A"
"D (e instanceof T) = D e"
"D (Val v) A = True"
"D (e1 «bop¬ e2) A = (D e1 A D e2 (A A e1))"
"D (Var V) A = (V A)"
"D (LAss V e) A = D e A"
"D (ai) A = (D a A D i (A A a))"
"D (ai := e) A = (D a A D i (A A a) D e (A A a A i))"
"D (alength) A = D a A"
"D (eF{D}) A = D e A"
"D (e1F{D}:=e2) A = (D e1 A D e2 (A A e1))"
"D (e1compareAndSwap(DF, e2, e3)) A = (D e1 A D e2 (A A e1) D e3 (A A e1 A e2))"
"D (eM(es)) A = (D e A Ds es (A A e))"
"D ({V:T=vo; e}) A = (if vo = None then D e (A V) else D e (A {V}))"
"D (sync (o') e) A = (D o' A D e (A A o'))"
"D (insync (a) e) A = D e A"
"D (e1;;e2) A = (D e1 A D e2 (A A e1))"
"D (if (e) e1 else e2) A = (D e A D e1 (A A e) D e2 (A A e))"
"D (while (e) c) A = (D e A D c (A A e))"
"D (throw e) A = D e A"
"D (try e1 catch(C V) e2) A = (D e1 A D e2 (A {V}))"

"Ds ([]) A = True"
"Ds (e#es) A = (D e A Ds es (A A e))"

lemma As_map_Val[simp]: "As (map Val vs) = {}"
(*<*)by (induct vs) simp_all(*>*)

lemma As_append [simp]: "As (xs @ ys) = (As xs) (As ys)"
by(induct xs, auto simp add: hyperset_defs)

lemma Ds_map_Val[simp]: "Ds (map Val vs) A"
(*<*)by (induct vs) simp_all(*>*)

lemma D_append[iff]: "A. Ds (es @ es') A = (Ds es A Ds es' (A As es))"
(*<*)by (induct es type:list) (auto simp:hyperUn_assoc)(*>*)


lemma fixes e :: "('a,'b,'addr) exp" and es :: "('a,'b,'addr) exp list"
  shows A_fv: "A. A e = A ==> A fv e"
  and  "A. As es = A ==> A fvs es"
apply(induct e and es rule: A.induct As.induct)
apply (simp_all add:hyperset_defs)
apply fast+
done


lemma sqUn_lem: "A A' ==> A B A' B"
(*<*)by(simp add:hyperset_defs) blast(*>*)

lemma diff_lem: "A A' ==> A b A' b"
(*<*)by(simp add:hyperset_defs) blast(*>*)

(* This order of the premises avoids looping of the simplifier *)
lemma fixes e :: "('a, 'b, 'addr) exp" and es :: "('a, 'b, 'addr) exp list"
  shows D_mono: "A A'. A A' ==> D e A ==> D e A'"
  and Ds_mono: "A A'. A A' ==> Ds es A ==> Ds es A'"
(*<*)
apply(induct e and es rule: D.induct Ds.induct)
subgoal by simp
subgoal by simp
subgoal by simp
subgoal by simp
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
subgoal by(fastforce simp add:hyperset_defs)
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp (iprover dest: sqUn_lem)
subgoal 
  apply(clarsimp split: if_split_asm) 
  apply (iprover dest:diff_lem) 
  apply(iprover dest: sqUn_lem)
  done
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
subgoal by simp
subgoal by simp (iprover dest:sqUn_lem)
done
(*>*)

(* And this is the order of premises preferred during application: *)
lemma D_mono': "D e A ==> A A' ==> D e A'"
and Ds_mono': "Ds es A ==> A A' ==> Ds es A'"
(*<*)by(blast intro:D_mono, blast intro:Ds_mono)(*>*)

declare hyperUn_comm [simp]
declare hyperUn_leftComm [simp]

end

Messung V0.5 in Prozent
C=94 H=99 G=96

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge