Theory CertifSafeToSVM_definitions

Up to index of Isabelle/HOL/SafeImp

theory CertifSafeToSVM_definitions
imports SafeRASemantics SVMSemantics CoreSafeToSVM
begin

(*  Title:      Certificate Safe to SVM
    Author:     Javier de Dios and Ricardo Peņa
    Copyright:  June 2008, Universidad Complutense de Madrid
*)



header {* Certification of the translation CoreSafe to SVM. Definitions *}

theory CertifSafeToSVM_definitions
imports Main "../CoreSafe/SafeRASemantics" SVMSemantics CoreSafeToSVM

begin


subsection {* Auxiliary functions *}

fun domRho :: "Env => char list set" where
  "domRho [] = {}"
| "domRho ((delta,m,n)#rest) = (dom delta) ∪ domRho rest"

fun identityEnvironment :: "Environment => Env => Stack => bool" (" _ \<Join> '(_, _') " 120) where
  "(E1,E2) \<Join> (ρ,S) = (((dom E1 ∪ dom E2 - {self}) = domRho ρ) 
                                      ∧ (∀ x ∈ dom E1. Val (the (E1 x)) = S!+(ρ |> x))
                                      ∧ (∀ r ∈ dom E2 - {self}. Reg (the (E2 r)) = S!+(ρ |> r)))"


axioms identityEnvironment_good:
 "(E1,E2) \<Join> (ρ,S)
  ==> (∀x∈ dom E1.  S!+(ρ |> x) = Val v) ∧ (∀x∈ dom E2.  S!+(ρ |> x) = Reg r)"

fun sizeST :: "Stack => int" where
  "sizeST [] = 0"
| "sizeST (Val v # S) = 1 + sizeST S"
| "sizeST (Reg r # S) = 1 + sizeST S"
| "sizeST (Cont c # S) = 2 + sizeST S"


fun sizeH :: "Heap => int" where
  "sizeH (h,k) = int (card (dom h))"

fun sizeSVMStateST :: "SVMState => int" where
  "sizeSVMStateST (h,r,pc,s) = sizeST s"

fun sizeSVMStateH :: "SVMState => int" where
  "sizeSVMStateH (h,r,pc,s) = sizeH h"


fun foldl1 :: "('a => 'a => 'a) => 'a list => 'a" where
"foldl1 f (x#xs)  =  foldl f x xs"

fun maximum :: "int list => int" where
  "maximum xs = foldl1 max xs"


fun maxFreshCells :: "SVMState list => int" where
  "maxFreshCells ((h0,r0,pc0,s0)#sts) = maximum (map (%(h,r,pc,s). sizeH h - (sizeH h0)) ((h0,r0,pc0,s0)#sts))"

fun maxFreshWords :: "SVMState list => int" where
  "maxFreshWords ((h0,r0,pc0,s0)#sts) = maximum (map (%(h,r,pc,s). sizeST s - (sizeST s0)) ((h0,r0,pc0,s0)#sts))"

constdefs region :: "Heap => Location => Region"
  "region h l ≡ (case h of 
                  (hm,k) => 
                    case (hm l) of 
                     Some (r,(c,xs)) => r)"

constdefs numCellsRegion :: "Heap => nat => int"
  "numCellsRegion h i ≡ int (card {w ∈ dom (fst h). region h w = i})"

constdefs diff :: "nat => Heap => Heap => nat \<rightharpoonup> int"
  "diff k h h' ≡ (%i. if i ∈ {0..k} 
                       then Some (numCellsRegion h' i - numCellsRegion h i)
                       else None)"
      
constdefs extends :: "('a \<rightharpoonup> 'b) => ('a \<rightharpoonup> 'b) => bool" 
  "extends f g ≡ ((dom f ⊆ dom g) ∧ (∀x ∈ dom f. f x = g x))"

constdefs extendsL :: "('a ×'b) list => ('a ×'b) list => bool" (infix "\<sqsubseteq>" 110 )
 "xs \<sqsubseteq> ys == extends (map_of xs) (map_of ys)"

axioms A7: 
  "SafeHeap.copy (h,k) j p = ((h',k),p') 
   ==> extends h  h' ∧
       size  h' p' = size h p ∧
       sizeH (h',k) - sizeH (h,k) = size h' p' ∧
       (∀ k. k >= j --> diff k (h,k) (h',k) = empty(j\<mapsto>size h' p'))"

constdefs disjointList :: "('a × 'b) list => ('a × 'b) list => bool"
  "disjointList n m ≡ dom (map_of n) ∩ dom (map_of m) = {}"



fun rho_good' :: "Env => bool"  where
  "rho_good' [] = True"
| "rho_good' ((delta,m,n)#rest) = ((∀ x∈ dom delta. m - n >= the (delta x) ∧ the (delta x) >= 1) ∧ rho_good' rest)"

fun rho_good :: "Env => bool"  where
 "rho_good ((delta,m,n)#rest) = (n = 0 ∧ rho_good' ((delta,m,n)#rest))"

end

Auxiliary functions