Research Article

A Comprehensive Formalization of AADL with Behavior Annex

Table 2

Description and code of syntax rules.

DescriptionCode in Isabelle/HOL

(N1) The defining identifier for a component type must be unique in the namespace of the package within which it is declared.definition type_name_valid:: “(′s, ′Dispatcher, ′Port, ′Dataaccess, ′Subpaccess, ′Parameter, ′Subprogramcall, ′Subprogramcalls, ′Connection, ′Data, ′Subprogram, ′Thread, ′Process, ′System, ′BehaviorAnnex) AADL_model ⇒ bool”
  where “type_name_valid m ≡ (∀dt1 dt2. (data_tp m)≠None ∧ dt1≠dt2 ⟶ (type_name (the (data_tp m) dt1))≠(type_name (the (data_tp m) dt2)))
     ∧ (∀sp1 sp2. (subprogram_tp m)≠None ∧ sp1≠sp2 ⟶ (type_name (the (subprogram_tp m) sp1))≠(type_name (the (subprogram_tp m) sp2)))
     ∧ (∀thd1 thd2. (thread_tp m)≠None ∧ thd1≠thd2 ⟶ (type_name (the (thread_tp m) thd1))≠(type_name (the (thread_tp m) thd2)))
     ∧ (∀pro1 pro2. (process_tp m)≠None ∧ pro1≠pro2⟶ (type_name (the (process_tp m) pro1))≠(type_name (the (process_tp m) pro2)))
     ∧ (∀sys1 sys2. sys1≠sys2 ⟶ (type_name ((system_tp m) sys1))≠(type_name ((system_tp m) sys2)))”
(N1) A component implementation name consists of a component type identifier and a component implementation identifier separated by a dot (“.”). The first identifier of the defining component implementation name must name a component type that is declared in the same package as the component implementation, or name an alias to a component type in another package.definition impl2type_name_valid:: “(′s, ′Dispatcher, ′Port, ′Dataaccess, ′Subpaccess, ′Parameter, ′Subprogramcall, ′Subprogramcalls, ′Connection, ′Data, ′Subprogram, ′Thread, ′Process, ′System, ′BehaviorAnnex) AADL_model ⇒ bool”
  where “impl2type_name_valid m ≡ (∀dt. (data_im m)≠None
     ∧ (data_tp m)≠None ∧ (the (data_im m) dt)≠None ⟶ (get_prename_impl_dt m dt)=(type_name (the (data_tp m) dt)))
     ∧ (∀sp. (subprogram_im m)≠None ∧ (subprogram_tp m)≠None ∧ (the (subprogram_im m) sp)≠None ⟶ (get_prename_impl_sp m sp)=(type_name (the (subprogram_tp m) sp)))
     ∧ (∀thd. (thread_im m)≠None ∧ (thread_tp m)≠None ∧ (the (thread_im m) thd)≠None ⟶ (get_prename_impl_thd m thd)=(type_name (the (thread_tp m) thd))) ∧ (∀pro. (process_im m)≠None ∧ (process_tp m)≠None ∧ (the (process_im m) pro)≠None ⟶ (get_prename_impl_pro m pro)=(type_name (the (process_tp m) pro)))
     ∧ (∀sys. (system_im m)≠None ∧ (the (system_im m) sys)≠None ⟶ (get_prename_impl_sys m sys)=(type_name ((system_tp m) sys)))”
......……