Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  State.thy

  Sprache: Isabelle
 

(*  Title:      HOL/NanoJava/State.thy
    Author:     David von Oheimb
    Copyright   2001 Technische Universitaet Muenchen
*)


section "Program State"

theory State imports TypeRel begin

definition body :: "cname × mname => stmt" where
 "body λ(C,m). bdy (the (method C m))"

text Locations, i.e.abstract references to objects
typedecl loc 

datatype val
  = Null         null reference
  | Addr loc     address, i.e. location of object

type_synonym fields
        = "(fname val)"

type_synonym
        obj = "cname × fields"

translations
  (type) "fields"  (type) "fname => val option"
  (type) "obj"     (type) "cname × fields"

definition init_vars :: "('a 'b) => ('a val)" where
 "init_vars m == map_option (λT. Null) o m"
  
text private:
type_synonym heap = "loc obj"
type_synonym locals = "vname val"  

text private:
record  state
        = heap   :: heap
          locals :: locals

translations
  (type) "heap"  (type) "loc => obj option"
  (type) "locals"  (type) "vname => val option"
  (type) "state"  (type) "(|heap :: heap, locals :: locals|)"

definition del_locs :: "state => state" where
 "del_locs s s (| locals := Map.empty |)"

definition init_locs     :: "cname => mname => state => state" where
 "init_locs C m s s (| locals := locals s ++
                         init_vars (map_of (lcl (the (method C m)))) |)"

text The first parameter of termset_locs is of type typstate
 rather than typlocals in order to keep typlocals private.

definition set_locs :: "state => state => state" where
 "set_locs s s' s' (| locals := locals s |)"

definition get_local     :: "state => vname => val" (_🚫 [99,099where
 "get_local s x the (locals s x)"

 local function:
definition get_obj       :: "state => loc => obj" where
 "get_obj s a the (heap s a)"

definition obj_class     :: "state => loc => cname" where
 "obj_class s a fst (get_obj s a)"

definition get_field     :: "state => loc => fname => val" where
 "get_field s a f the (snd (get_obj s a) f)"

 local function:
definition hupd       :: "loc => obj => state => state"   (hupd'(__') [10,101000where
 "hupd a obj s s (| heap := ((heap s)(aobj))|)"

definition lupd       :: "vname => val => state => state" (lupd'(__') [10,101000where
 "lupd x v s s (| locals := ((locals s)(xv ))|)"

definition new_obj :: "loc => cname => state => state" where
 "new_obj a C hupd(a(C,init_vars (field C)))"

definition upd_obj    :: "loc => fname => val => state => state" where
 "upd_obj a f v s let (C,fs) = the (heap s a) in hupd(a(C,fs(fv))) s"

definition new_Addr      :: "state => val" where
 "new_Addr s == SOME v. (a. v = Addr a (heap s) a = None) | v = Null"


subsection "Properties not used in the meta theory"

lemma locals_upd_id [simp]: "s(locals := locals s) = s" 
by simp

lemma lupd_get_local_same [simp]: "lupd(xv) s<x> = v"
by (simp add: lupd_def get_local_def)

lemma lupd_get_local_other [simp]: "x y ==> lupd(xv) s<y> = s<y>"
apply (drule not_sym)
by (simp add: lupd_def get_local_def)

lemma get_field_lupd [simp]:
  "get_field (lupd(xy) s) a f = get_field s a f"
by (simp add: lupd_def get_field_def get_obj_def)

lemma get_field_set_locs [simp]:
  "get_field (set_locs l s) a f = get_field s a f"
by (simp add: lupd_def get_field_def set_locs_def get_obj_def)

lemma get_field_del_locs [simp]:
  "get_field (del_locs s) a f = get_field s a f"
by (simp add: lupd_def get_field_def del_locs_def get_obj_def)

lemma new_obj_get_local [simp]: "new_obj a C s <x> = s<x>"
by (simp add: new_obj_def hupd_def get_local_def)

lemma heap_lupd [simp]: "heap (lupd(xy) s) = heap s"
by (simp add: lupd_def)

lemma heap_hupd_same [simp]: "heap (hupd(aobj) s) a = Some obj"
by (simp add: hupd_def)

lemma heap_hupd_other [simp]: "aa a ==> heap (hupd(aaobj) s) a = heap s a"
apply (drule not_sym)
by (simp add: hupd_def)

lemma hupd_hupd [simp]: "hupd(aobj) (hupd(aobj') s) = hupd(aobj) s"
by (simp add: hupd_def)

lemma heap_del_locs [simp]: "heap (del_locs s) = heap s"
by (simp add: del_locs_def)

lemma heap_set_locs [simp]: "heap (set_locs l s) = heap s"
by (simp add: set_locs_def)

lemma hupd_lupd [simp]: 
  "hupd(aobj) (lupd(xy) s) = lupd(xy) (hupd(aobj) s)"
by (simp add: hupd_def lupd_def)

lemma hupd_del_locs [simp]: 
  "hupd(aobj) (del_locs s) = del_locs (hupd(aobj) s)"
by (simp add: hupd_def del_locs_def)

lemma new_obj_lupd [simp]: 
  "new_obj a C (lupd(xy) s) = lupd(xy) (new_obj a C s)"
by (simp add: new_obj_def)

lemma new_obj_del_locs [simp]: 
  "new_obj a C (del_locs s) = del_locs (new_obj a C s)"
by (simp add: new_obj_def)

lemma upd_obj_lupd [simp]: 
  "upd_obj a f v (lupd(xy) s) = lupd(xy) (upd_obj a f v s)"
by (simp add: upd_obj_def Let_def split_beta)

lemma upd_obj_del_locs [simp]: 
  "upd_obj a f v (del_locs s) = del_locs (upd_obj a f v s)"
by (simp add: upd_obj_def Let_def split_beta)

lemma get_field_hupd_same [simp]:
 "get_field (hupd(a(C, fs)) s) a = the fs"
apply (rule ext)
by (simp add: get_field_def get_obj_def)

lemma get_field_hupd_other [simp]:
 "aa a ==> get_field (hupd(aaobj) s) a = get_field s a"
apply (rule ext)
by (simp add: get_field_def get_obj_def)

lemma new_AddrD: 
"new_Addr s = v ==> (a. v = Addr a heap s a = None) | v = Null"
apply (unfold new_Addr_def)
apply (erule subst)
apply (rule someI)
apply (rule disjI2)
apply (rule HOL.refl)
done

end

Messung V0.5 in Prozent
C=91 H=96 G=93

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

*© 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

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik