Theory J1WellForm
section ‹Well-Formedness of Intermediate Language›
theory J1WellForm imports
  "../J/DefAss"
  J1WellType
begin
subsection‹Well-formedness›
definition wf_J1_mdecl :: "'addr J1_prog ⇒ cname ⇒ 'addr expr1 mdecl ⇒ bool"
where
  "wf_J1_mdecl P C  ≡  λ(M,Ts,T,body).
    (∃T'. P,Class C#Ts ⊢1 body :: T' ∧ P ⊢ T' ≤ T) ∧
    𝒟 body ⌊{..size Ts}⌋ ∧ ℬ body (size Ts + 1) ∧ syncvars body"
lemma wf_J1_mdecl[simp]:
  "wf_J1_mdecl P C (M,Ts,T,body) ≡
    ((∃T'. P,Class C#Ts ⊢1 body :: T' ∧ P ⊢ T' ≤ T) ∧
     𝒟 body ⌊{..size Ts}⌋ ∧ ℬ body (size Ts + 1)) ∧ syncvars body"
by (simp add:wf_J1_mdecl_def)
abbreviation wf_J1_prog :: "'addr J1_prog ⇒ bool"
where "wf_J1_prog == wf_prog wf_J1_mdecl"
end