Up to index of Isabelle/HOL/CoreSafe
theory BasicFacts(* Title: BasicFacts
Author: Javier de Dios and Ricardo Peņa
Copyright: February 2010, Universidad Complutense de Madrid
*)
header {* Basic Facts *}
theory BasicFacts imports SafeRegion_definitions
begin
(** Axioms **)
(* If μ maps range(ϑ) to some other region type, and polymorphic
type variables of the types in ϑ to arbitrary type, and e \<turnstile> ϑ \<leadsto> t
holds, then e \<turnstile> μ(ϑ) \<leadsto> μ(t) also holds *)
axioms Regions_Lemma_5:
"[| e : \<lbrace> (ϑ1,ϑ2), t \<rbrace> |]
==> e : \<lbrace> ((mu_ext (μ1,μ2)) of ϑ1, (μ2 om ϑ2)), (mu_ext (μ1,μ2) t) \<rbrace> "
axioms Regions_Lemma_5_Depth:
"[| e :f , n \<lbrace> (ϑ1,ϑ2), t \<rbrace> |]
==> e :f , n \<lbrace> ((mu_ext (μ1,μ2)) of ϑ1, (μ2 om ϑ2)), (mu_ext (μ1,μ2) t) \<rbrace> "
axioms ρfake_not_in_dom_η:
"ρfake ∉ dom η"
axioms no_cycles:
"h p = Some (j, C, vn)
==> ∀ i < length vn. p ∉ closureV (vn!i) (h,k)"
axioms fresh_notin_closureL:
"fresh p h
==> ∀ q ∈ dom h. p ∉ closureL q (h,k)"
axioms semantic_extend_pointers:
"(E1, E2) \<turnstile> h , k , td , e \<Down> h' , k , v , r
==> (∀p∈dom h. p ∉ dom h' ∨ h p = h' p)"
axioms semantic_no_capture_h:
"[| (E1, E2) \<turnstile> h , k , td , e \<Down> h' , k , v , r ;
v' ∈ rangeHeap h - domLoc h |]
==> v' ∉ domLoc h'"
axioms semantic_no_capture_E1:
"[| (E1, E2) \<turnstile> h , k , td , e \<Down> h' , k , v , r ;
E1 x = Some (Loc p);
p ∉ dom h |]
==> p ∉ dom h'"
axioms semantic_no_capture_E1_fresh:
"[| (E1, E2) \<turnstile> h , k , td , e \<Down> h' , k , v , r ;
fresh p h |]
==> ∀ x ∈ dom E1. ∀ q. E1 x = Some (Loc q) --> p ≠ q"
axioms semantic_no_capture_E1_fresh_2:
"[| (E1, E2) \<turnstile> h , k , td , e \<Down> h' , k , v , r ;
fresh p h |]
==> ∀ x ∈ dom E1. ∀ q. E1 x = Some (Loc q) --> p ∉ closureL q (h,k)"
axioms semantic_no_capture_E1_fresh_2_semDepth:
"[| (E1, E2) \<turnstile> h , k , e \<Down>(f,n) h' , k , v;
fresh p h |]
==> ∀ x ∈ dom E1. ∀ q. E1 x = Some (Loc q) --> p ∉ closureL q (h,k)"
axioms closureV_equals_closureL:
"h p = Some (j,C,vs)
==> closureL p (h,k) = (\<Union> i < length vs. closureV (vs!i) (h,k)) ∪ {p}"
axioms closureV_subseteq_closureL_None:
"h p = Some (j,C,vs)
==> (\<Union> i < length vs. closureV (vs!i) (h(p:=None),k)) ⊆ closureL p (h(p:=None),k)"
(* Pendiente demostrar *)
axioms SafeDARegion_Var2_2:
"∀i<length tn'. consistent_v (mu_ext (μ1, μ2) (tn' ! i)) η' (vn ! i) h
==> ∀i<length (snd (mapAccumL (copy' j) h (zip vn (recursiveArgs C)))).
consistent_v (map (mu_ext (μ1, μ2(ρ \<mapsto> ρ'))) tn' ! i) η'
(snd (mapAccumL (copy' j) h (zip vn (recursiveArgs C))) ! i) h'"
(* Este axioma quiza habria que incluirlo como premisa
en la semantica *)
axioms dom_copy':
"copy (h, k) p j = ((h', k), p')
==> copy'_dom (j, h, Loc p, True)"
end