Eine aufbereitete Darstellung der Quelle

 
     
 
 
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 T⌊e⌉) = 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 (a⌊i⌉) = A a ⊔ A i"
| "A (a⌊i⌉ := e) = A a ⊔ A i ⊔ A e"
| "A (a∙length) = A a"
| "A (e∙F{D}) = A e"
| "A (e1∙F{D}:=e2) = A e1 ⊔ A e2"
| "A (e1∙compareAndSwap(D∙F, e2, e3)) = A e1 ⊔ A e2 ⊔ A e3"
| "A (e∙M(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 T⌊e⌉) 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 (a⌊i⌉) A = (D a A ∧ D i (A ⊔ A a))"
| "D (a⌊i⌉ := e) A = (D a A ∧ D i (A ⊔ A a) ∧ D e (A ⊔ A a ⊔ A i))"
| "D (a∙length) A = D a A"
| "D (e∙F{D}) A = D e A"
| "D (e1∙F{D}:=e2) A = (D e1 A ∧ D e2 (A ⊔ A e1))"
| "D (e1∙compareAndSwap(D∙F, e2, e3)) A = (D e1 A ∧ D e2 (A ⊔ A e1) ∧ D e3 (A ⊔ A e1 ⊔ A e2))"
| "D (e∙M(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=93 G=93

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-09-27) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1897691