DynBindModelExamples: Difference between revisions

From EiffelStudio: an EiffelSoftware project
Jump to navigation Jump to search
Konradm (talk | contribs)
Manus (talk | contribs)
mNo edit summary
 
(155 intermediate revisions by 4 users not shown)
Line 1: Line 1:
This page shows
[[Category:ECMA]]
{{Article will be deleted}}
Author: Matthias Konrad[[Category:ECMA]]
 
==The system==
In this example we are studying a simple system with three classes that contains both renaming and selects:


====F====
{|border="0" cellpadding="2" cellspacing="0" align="center"
{|border="0" cellpadding="2" cellspacing="0" align="center"
|-valign="top" -halign="center"
|-valign="top" -halign="center"
|<code>[eiffel, N]
|<code>[eiffel, N]
class
class
   C1
   A
feature
feature
   f1 do ... end
   f1 do ... end
Line 15: Line 19:
<code>[eiffel, N]
<code>[eiffel, N]
class
class
   C2
   B
inherit
inherit
   B
   A
       rename f1 as f2, g1 as g2  
       rename f1 as f2, g1 as g2  
       redefine f2, g2 end
       redefine f2, g2 end
Line 28: Line 32:
<code>[eiffel, N]
<code>[eiffel, N]
class
class
   C3
   D
inherit
inherit
   C2
    
      select f1 end
   A
   C1
       redefine f1, g1
       rename f1 as f3, g as g3
       select g1 end
       redefine f3, g3
  B
       select g3 end
       select f2 end
feature
feature
   f3 do ... end
   f1 do ... end
   g3 do ... end
   g1 do ... end
end
end
</code>
</code>
|}
|}
We get:
This system is defined by:
*<math>S = \left\{ C_1, C_2, C_3 \right\} </math>
 
*<math>\tau =  
<math>S=\left\{ A, B, D\right\}</math>
 
<math>\tau =  
\left\{
\left\{
   C_1 \mapsto \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\},  
   A \mapsto \left\{ f1 \mapsto \underline{A.f1}, g1 \mapsto \underline{A.g1} \right\},  
   C_2 \mapsto \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\},
   B \mapsto \left\{ f2 \mapsto \underline{B.f2}, g2 \mapsto \underline{B.g2} \right\},
   C_3 \mapsto \left\{ f_3 \mapsto \underline{C_3.f_3}, g_3 \mapsto \underline{C_3.g_3} \right\}
   D \mapsto \left\{ f1 \mapsto \underline{D.f1}, g1 \mapsto \underline{D.g1} \right\}
\right\}
</math>
 
<math>\alpha = \left\{
  A \mapsto \emptyset,
  B \mapsto \left\{ A \right\},
  D \mapsto \left\{ A, B \right\}
\right\}
\right\}
</math>
</math>
*<math>\eta =  
 
<math>\eta =  
\left\{
\left\{
   C_2 \mapsto \left\{  
   A \mapsto \emptyset,
       C_1 \mapsto \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}  
  B \mapsto \left\{  
   \right\},  
       A \mapsto \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}  
   C3 \mapsto \left\{  
   \right\},
       C2 \mapsto \left\{ f1 \mapsto f3, f \mapsto f3 \right\}
   D \mapsto \left\{  
       A \mapsto \emptyset, B \mapsto \emptyset
   \right\}
   \right\}
\right\}
\right\}
</math>
</math>
*<math>\alpha = \left\{
 
   C \mapsto \left\{ B \right\},
<math>\sigma = \left\{
   D \mapsto \left\{ B, C \right\}
   A \mapsto \emptyset,
  B \mapsto \left\{ A \mapsto \emptyset \right\},  
   D \mapsto \left\{ A \mapsto \left\{ g_1 \right\},
                    B \mapsto \left\{ f_2 \right\} \right\}
\right\}
\right\}
</math>
</math>
*<math>\sigma = \left\{
 
   D \mapsto \left\{ C \mapsto \left\{ f1 \right\} \right\}
<math>
  C = \left\{ 1 \mapsto A, 2 \mapsto B, 3 \mapsto D \right\}
</math>
 
==The naming function==
We proceed by calculating the naming function. According to its definition we have to do that incrementally. Meaning that we first calculate <math>\beta_{S_1}</math> then  <math>\beta_{S_2}</math> and finally <math>\beta_{S_3}</math>.
===Calculating <math>\beta_{S_1}</math>===
 
Since <math>\beta_{S_1}</math> contains only one class it is sufficient to define <math>\beta_{S_1}\left( A \mapsto A\right)</math>. According to the definition:
 
*<math>
  \beta_{S_1}\left( C_1 \mapsto C_1 \right)
      =
  \mbox{id} \left(
      \mbox{dom} \left( \tau_1 \right)
        \, \cup \,
      \mbox {UNION} \ b \, \cdot \, \left(b \in \alpha_1
        \ |\
      \mbox{ran} \left( \beta_{ S_0 } \left( b \mapsto b \right) \ll \eta_{1, b} \right) \right) \right)
</math>
We can forget about the right part of the union since <math>C_1\,</math> has no base classes. So we need to calculate:
#<math>\mbox{id} \left( \mbox{dom} \left( \tau_1 \right) \right) </math>
##<math>
\tau_1 = \tau (C_1) = \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\}
</math>
##<math>
\mbox{dom} \left( \tau_1 \right) = \left\{ f_1, g_1 \right\}
</math>
##<math>
\mbox{id} \left( \mbox{dom} \left( \tau_1 \right) \right) = \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1\right\}
</math>
 
So we get:
 
<math>
  \beta_{S_1}\left( C_1 \mapsto C_1 \right) = \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1\right\}
</math>
 
And hence:
 
<math>
  \beta_{S_1} = \left\{ \left( C_1 \mapsto C_1 \right) \mapsto
      \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\} \right\}
</math>
 
===Calculating <math>\beta_{S_2}</math>===
 
We show the calculation of the different (four) parts of the function in separate sections:
 
====Calculate <math>\beta_{S_2}\left( C_1 \mapsto C_1 \right)</math>====
According to the [[DynBindModel#The_naming_function|definition]]:
<math>
  \beta_{S_2}\left( C_1 \mapsto C_1 \right) =
  \beta_{S_1}\left( C_1 \mapsto C_1 \right) =  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1\right\}
</math>
 
====Calculate <math>\beta_{S_2}\left( C_2 \mapsto C_1 \right)</math>====
According to the [[DynBindModel#The_naming_function|definition]]:
<math>
  \beta_{S_2}\left( C_2 \mapsto C_1 \right) = \emptyset
</math>
 
====Calculate <math>\beta_{S_2}\left( C_2 \mapsto C_2 \right)</math>====
According to the [[DynBindModel#The_naming_function|definition]]:
<math>
  \beta_{S_2}\left( C_2 \mapsto C_2 \right)
      =
  \mbox{id} \left( \mbox{dom} \left( \tau_2 \right)
      \, \cup \,
  \mbox {UNION} \ b \, \cdot \, \left(b \in \alpha_2
      \ |\
  \mbox{ran}\left( \beta_{ S_{1} } \left( b \mapsto b \right) \ll \eta_{2, b} \right)\right)
  \right)
</math>
 
Lets calculate the left part first:
 
#<math>
\tau_2 = \tau (C_2) = \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\}
</math>
#<math>
\mbox{dom} \left( \tau_2 \right) = \left\{ f_2, g_2 \right\}
</math>
 
And now the right part:
 
#<math>
\mbox {UNION} \ b \, \cdot \, \left(b \in \left\{ C_1 \right\}
      \ |\
  \mbox{ran}\left( \beta_{ S_{1} } \left( b \mapsto b \right) \ll \eta_{2, b} \right)\right)
=
\mbox{ran}\left( \beta_{ S_{1} } \left( C_1 \mapsto C_1 \right) \ll \eta_{2, C_1} \right)
</math>
#<math>
  \beta_{ S_{1} } \left( C_1 \mapsto C_1 \right)
= 
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1\right\}
</math>
#<math>
  \eta_{2,C_1} = \eta (C_2)(C_1) = \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
#<math>
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1\right\} \ll \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
#<math>
  \mbox{ran}\left( \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2\right\} \right)
= 
  \left\{ f_2, g_2\right\}
</math>
 
So we get:
 
<math>
\beta_{S_2} \left( C_2 \mapsto C_2 \right)
  = 
\left\{ f_2 \mapsto f_2, g_2 \mapsto g_2\right\}
</math>
 
====Calculate <math>\beta_{S_2} \left( C_1 \mapsto C_2 \right)</math>====
According to the [[DynBindModel#The_naming_function|definition]]:
<math>
\beta_{S_2} \left( C_1 \mapsto C_2 \right)
  =
{\beta_{S_2}}^\prime \left( C_1 \mapsto C_2 \right)
  \ll
\theta_{S_2} \left( C_1 \mapsto C_2 \right)
</math>
 
Where:
<math>
{\beta_{S_2}}^\prime \left( C_1 \mapsto C_2 \right)
  =
\mbox {UNION} \ b \ \cdot \ \left(
  b \in \alpha_2
      \ |\
  \beta_{S_{1}} \left( C_1 \mapsto b \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_{1}} \left( C_1 \mapsto b \right) \right) \right)
        \ll
      \eta_{2,b}
  \right)
\right)
</math>
 
And:
<math>
  \theta_{S_2} \left( C_1 \mapsto C_2 \right)
    =
  \mbox {UNION} \ b \ \cdot \ \left(
  b \in \alpha_2
      \ |\
  \beta_{S_{1}} \left( C_1 \mapsto b \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_1} \left( C_1 \mapsto b \right) \right) \right)
        \ll
      \eta_{2,b}
  \right)
  \triangleright \sigma_{2,b}
\right)
</math>
 
Here are the steps taken to compute the part:
 
#<math>
  \beta_{S_{1}} \left( C_1 \mapsto C_1 \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_{1}} \left( C_1 \mapsto C_1 \right) \right) \right)
        \ll
      \eta_{2,C_1}
  \right)
</math>
##<math>
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_{1}} \left( C_1 \mapsto C_1 \right) \right) \right)
    =
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
</math>
##<math>
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\} \ll \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
##<math>
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\} \,;\, \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
##<math>
{\beta_{S_2}}^\prime \left( C_1 \mapsto C_2 \right)
  =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
#<math>
  \beta_{S_1} \left( C_1 \mapsto C_1 \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_1} \left( C_1 \mapsto C_1 \right) \right) \right)
        \ll
      \eta_{2,C_1}
  \right)
  \triangleright \sigma_{2,C_1}
</math>
##<math>
\sigma_{2,C_1} = \emptyset
</math>
##<math>
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_1} \left( C_1 \mapsto C_1 \right) \right) \right)
    \ll
  \emptyset
    =
  \emptyset
</math>
##<math>
  \beta_{S_1} \left( C_1 \mapsto C_1 \right)
      ;
  \emptyset
    =
  \emptyset
</math>
##<math>
  \theta_{S_2} \left( C_1 \mapsto C_2 \right) = \emptyset
</math>
# <math>
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\} \ll \emptyset
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
 
So we get:
 
<math>
\beta_{S_2} \left( C_1 \mapsto C_2 \right)
  =
\left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
 
====Putting the parts together:====
We can know show the complete total function:
 
{|border="0" cellpadding="2" cellspacing="0" align="center"
|-valign="top" -halign="center"
|
<math>\beta_{S_2} = \{</math>
|
<math>
  \left( C_1 \mapsto C_1 \right) \mapsto \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\},
</math>
|-
||
|
<math>
  \left( C_1 \mapsto C_2 \right) \mapsto \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_2 \right) \mapsto \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2 \right\} \ \}
</math>
 
|}
 
===Calculating <math>\beta_{S_3}</math>===
We will not show the complete construction of <math>\beta_{S_3}</math> but restrict our self to the most interesting parts.
 
====Calculate <math>\beta_{S_3} \left( C_1 \mapsto C_3 \right)</math>====
According to the [[DynBindModel#The_naming_function|definition]]:
<math>
\beta_{S_3} \left( C_1 \mapsto C_3 \right)
  =
{\beta_{S_3}}^\prime \left( C_1 \mapsto C_3 \right)
  \ll
\theta_{S_3} \left( C_1 \mapsto C_3 \right)
</math>
 
Where:
<math>
{\beta_{S_3}}^\prime \left( C_1 \mapsto C_3 \right)
  =
\mbox {UNION} \ b \ \cdot \ \left(
  b \in \alpha_3
      \ |\
  \beta_{S_{2}} \left( C_1 \mapsto b \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_{2}} \left( C_1 \mapsto b \right) \right) \right)
        \ll
      \eta_{3,b}
  \right)
\right)
</math>
 
And:
<math>
\theta_{S_3} \left( C_1 \mapsto C_3 \right)
  =
\mbox {UNION} \ b \ \cdot \ \left(
  b \in \alpha_3
      \ |\
  \beta_{S_{2}} \left( C_1 \mapsto b \right)
      ;
  \left(
      \mbox{id} \left( \mbox{ran} \left( \beta_{S_{2}} \left( C_1 \mapsto b \right) \right) \right)
        \ll
      \eta_{3,b}
  \right)
  \triangleright \sigma_{3,b}
\right)
</math>
 
Note that we can omit <math>\eta_{3,b}\,</math> from the formulas since it is always empty.
 
#<math>
  \beta_{S_2} \left( C_1 \mapsto C_2 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_2 \right) \right) \right)
  \ \cup \ 
  \beta_{S_2} \left( C_1 \mapsto C_1 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_1 \right) \right) \right)
</math>
##<math>
  \beta_{S_{2}} \left( C_1 \mapsto C_2 \right)
      =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
##<math>
  \mbox{id}\left(\mbox{ran}\left( \beta_{S_{2}} \left( C_1 \mapsto C_2 \right) \right)\right)
    =
  \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2 \right\}
</math>
##<math>
  \beta_{S_2} \left( C_1 \mapsto C_2 \right)
    ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_2 \right) \right) \right)
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
##<math>
  \beta_{S_{2}} \left( C_1 \mapsto C_1 \right)
      =
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
</math>
##<math>
  \mbox{id}\left(\mbox{ran}\left( \beta_{S_{2}} \left( C_1 \mapsto C_1 \right) \right)\right)
    =
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
</math>
##<math>
  \beta_{S_2} \left( C_1 \mapsto C_1 \right)
    ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_1 \right) \right) \right)
    =
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
</math>
##<math>
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
  \ \cup\
  \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
    =
  \left\{ f_1 \mapsto f_1, f_1 \mapsto f_2, g_1 \mapsto g_1, g_1 \mapsto g_2 \right\}
</math>
#<math>
  \beta_{S_2} \left( C_1 \mapsto C_2 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_2 \right) \right) \right)
      \ \triangleright\ 
  \sigma_{3,C_2}
  \ \cup \ 
  \beta_{S_2} \left( C_1 \mapsto C_1 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_1 \right) \right) \right)
      \ \triangleright\ 
  \sigma_{3,C_1}
</math>
##<math>
  \sigma_{3,C_2} = \sigma \left(C_3 \right) \left(C_2\right) = \left\{ f_2 \right\}
</math>
##<math>
  \sigma_{3,C_1} = \sigma \left(C_3 \right) \left(C_1\right) = \left\{ g_1 \right\}
</math>
##<math>
  \beta_{S_2} \left( C_1 \mapsto C_2 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_2 \right) \right) \right)
      \ \triangleright\ 
  \sigma_{3,C_2}
      =
  \left\{ f_1 \mapsto f_2 \right\}
</math>
##<math>
  \beta_{S_2} \left( C_1 \mapsto C_1 \right)
      ;
  \mbox{id} \left( \mbox{ran} \left( \beta_{S_2} \left( C_1 \mapsto C_1 \right) \right) \right)
      \ \triangleright\ 
  \sigma_{3,C_1}
      =
  \left\{ g_1 \mapsto g_1 \right\}
</math>
##<math>
  \left\{ f_1 \mapsto f_2 \right\} \ \cup \ \left\{ g_1 \mapsto g_1 \right\}
      =  
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_1 \right\}
</math>
##<math>
  \left\{ f_1 \mapsto f_1, f_1 \mapsto f_2, g_1 \mapsto g_1, g_1 \mapsto g_2 \right\}
    \ll
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_1 \right\}
    =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_1 \right\}
</math>
 
So we get:
 
<math>
\beta_{S_3} \left( C_1 \mapsto C_3 \right)
  =
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_1 \right\}
</math>
 
====The complete naming function====
 
{|border="0" cellpadding="2" cellspacing="0" align="center"
|-valign="top" -halign="center"
|
<math>\beta_{S_3} = \{</math>
|
<math>
  \left( C_1 \mapsto C_1 \right) \mapsto \left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\},
</math>
|-
||
|
<math>
   \left( C_1 \mapsto C_2 \right) \mapsto \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_2 \right) \mapsto \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2 \right\},
</math>
|-
||
|
<math>
  \left( C_1 \mapsto C_3 \right) \mapsto \left\{ f_1 \mapsto f_2, g_1 \mapsto g_1 \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_3 \right) \mapsto \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2 \right\},
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_3 \right)
      \mapsto
  \left\{  f_1 \mapsto f_1, g_1 \mapsto g_1, f_2 \mapsto f_2, g_2 \mapsto g_2 \right\},
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_2 \right) \mapsto \emptyset  \ \}
</math>
 
 
|}
 
==The dynamic binding function==
To calculate the dynamic binding function, we need to get <math>\delta_{S_3}</math>. We will again calculate it incrementally:
===Calculating <math>\delta_{S_1}</math>===
According to the [[DynBindModel#The_dynamic_binding_function|definition]]:
 
<math>
\delta_{S_1} \left( C_1 \mapsto C_1 \right)
  =
\beta_S \left( C_1 \mapsto C_1 \right) ;
\left(
\left( \mbox {UNION} \, b \cdot \left(
    b \in \alpha_1
      \, |\,
    \left( \beta_S \left( b \mapsto b \right) ; \eta_{1,b} \right)^{-1}
      ;
    \delta_{S_0}\left( b \mapsto b \right)\right)  \right) \ll \tau_1
\right)
</math>
 
Since <math>\alpha_1\,</math> is empty this simplifies to:
<math>
\delta_{S_1} \left( C_1 \mapsto C_1 \right)
  =
\beta_S \left( C_1 \mapsto C_1 \right) ; \tau_1
  =
\left\{ f_1 \mapsto f_1, g_1 \mapsto g_1 \right\}
  ;
\left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\}
</math>
 
So we get:
<math>
\delta_{S_1}
  =
\left\{ \left( C_1 \mapsto C_1 \right) \mapsto
  \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\}
\right\}
\right\}
</math>
===Calculating <math>\delta_{S_2}</math>===
Again we calculate the different parts of the function in separate sections:
====Calculate <math>\delta_{S_2}\left( C_1 \mapsto C_1 \right)</math>====
According to the [[DynBindModel#The_dynamic_binding_function|definition]]:
<math>
  \delta_{S_2}\left( C_1 \mapsto C_1 \right) =
  \delta_{S_1}\left( C_1 \mapsto C_1 \right) = 
      \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\}
</math>
====Calculate <math>\delta_{S_2}\left( C_2 \mapsto C_1 \right)</math>====
According to the [[DynBindModel#The_dynamic_binding_function|definition]]:
<math>
  \delta_{S_2}\left( C_1 \mapsto C_1 \right) = \emptyset
</math>
====Calculate <math>\delta_{S_2}\left( C_2 \mapsto C_2 \right)</math>====
According to the [[DynBindModel#The_dynamic_binding_function|definition]]:
<math>
  \delta_{S_2}\left( C_2 \mapsto C_2 \right)
    =
\beta_S \left( C_2 \mapsto C_2 \right) ;
\left(
\left( \mbox {UNION} \, b \cdot \left(
    b \in \alpha_2
      \, |\,
    \left( \beta_S \left( b \mapsto b \right) ; \eta_{2,b} \right)^{-1}
      ;
    \delta_{S_1}\left( b \mapsto b \right)\right)  \right) \ll \tau_2
\right)
</math>
#<math>
  \mbox {UNION} \, b \cdot \left(b \in \left\{ C_1 \right\}
      \, |\,
    \left( \beta_S \left( b \mapsto b \right) ; \eta_{2,b} \right)^{-1}
      ;
    \delta_{S_1}\left( b \mapsto b \right)\right)
    =
    \left( \beta_S \left( C_1 \mapsto C_1 \right) ; \eta_{2,C_1} \right)^{-1}
      ;
    \delta_{S_1}\left( C_1 \mapsto C_1 \right)
</math>
##<math>
  \beta_S \left( C_1 \mapsto C_1 \right) ; \eta_{2,C_1}
    = 
  \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2 \right\}
</math>
##<math>
  \left( \beta_S \left( C_1 \mapsto C_1 \right) ; \eta_{2,C_1} \right)^{-1}
    = 
  \left\{ f_2 \mapsto f_1, g_2 \mapsto g_1 \right\}
</math>
##<math>
  \left( \beta_S \left( C_1 \mapsto C_1 \right) ; \eta_{2,C_1} \right)^{-1}
      ;
  \delta_{S_1}\left( C_1 \mapsto C_1 \right)
    = 
\left\{ f_2 \mapsto \underline{C_1.f_1}, g_2 \mapsto \underline{C_1.g_1} \right\}
</math>
#<math>
  \tau_2 = \tau \left( C_2 \right)
    =
  \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\} 
</math>
#<math>
  \left\{ f_2 \mapsto \underline{C_1.f_1}, g_2 \mapsto \underline{C_1.g_1} \right\}
    \ll
  \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\}
    =
  \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\}
</math>
So we get:
<math>
  \delta_{S_2}\left( C_2 \mapsto C_2 \right)
    =
  \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\}
</math>
====Calculate <math>\delta_{S_2}\left( C_1 \mapsto C_2 \right)</math>====
According to the [[DynBindModel#The_dynamic_binding_function|definition]]:
<math>
  \delta_{S_2}\left( C_1 \mapsto C_2 \right)
    =
\beta_S \left( C_1 \mapsto C_2 \right) ;
\left(
\left( \mbox {UNION} \, b \cdot \left(
    b \in \alpha_2
      \, |\,
    \left( \beta_S \left( b \mapsto b \right) ; \eta_{2,b} \right)^{-1}
      ;
    \delta_{S_{1}}\left( b \mapsto b \right)\right)  \right) \ll \tau_{2}
\right)
</math>
At this stage it should be clear how to calculate this, so we just give the result:
<math>
  \delta_{S_2}\left( C_1 \mapsto C_2 \right)
    =
  \left\{ f_1 \mapsto \underline{C_2.f_2}, g_1 \mapsto \underline{C_2.g_2} \right\}
</math>
====Putting the parts together:====
We can know show the complete total function:
{|border="0" cellpadding="2" cellspacing="0" align="center"
|-valign="top" -halign="center"
|
<math>\delta_{S_2} = \{</math>
|
<math>
  \left( C_1 \mapsto C_1 \right)
      \mapsto
  \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\},
</math>
|-
||
|
<math>
  \left( C_1 \mapsto C_2 \right)
      \mapsto
  \left\{ f_1 \mapsto \underline{C_2.f_2}, g_1 \mapsto \underline{C_2.g_2} \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_2 \right)
      \mapsto
    \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\} \ \}
</math>
|}
===Calculating <math>\delta_{S_3}</math>===
There is nothing new for this calculation so we just present the result:
{|border="0" cellpadding="2" cellspacing="0" align="center"
|-valign="top" -halign="center"
|
<math>\delta_{S_3} = \{</math>
|
<math>
  \left( C_1 \mapsto C_1 \right)
      \mapsto
  \left\{ f_1 \mapsto \underline{C_1.f_1}, g_1 \mapsto \underline{C_1.g_1} \right\},
</math>
|-
||
|
<math>
  \left( C_1 \mapsto C_2 \right)
      \mapsto
  \left\{ f_1 \mapsto \underline{C_2.f_2}, g_1 \mapsto \underline{C_2.g_2} \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_2 \right)
      \mapsto
    \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\},
</math>
|-
||
|
<math>
  \left( C_1 \mapsto C_3 \right)
    \mapsto
  \left\{ f_1 \mapsto \underline{C_2.f_2}, g_1 \mapsto \underline{C_3.g_1} \right\},
</math>
|-
||
|
<math>
  \left( C_2 \mapsto C_3 \right)
    \mapsto
  \left\{ f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\},
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_3 \right)
      \mapsto
  \left\{ f_1 \mapsto \underline{C_3.f_1}, g_1 \mapsto \underline{C_3.g_1},
          f_2 \mapsto \underline{C_2.f_2}, g_2 \mapsto \underline{C_2.g_2} \right\},
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_1 \right) \mapsto \emptyset,
</math>
|-
||
|
<math>
  \left( C_3 \mapsto C_2 \right) \mapsto \emptyset  \ \}
</math>
|}
===Deriving the dynamic binding function===
The function is now given. We evaluate it at two interesting points:
*<math>
  \delta\left( C_1 \mapsto f_1 \right)
    =
  \left\{
    C_1 \mapsto \underline{C_1.f_1}, C_2 \mapsto \underline{C_2.f_2}, C_3 \mapsto \underline{C_2.f_2}
  \right\}
</math>
*<math>
  \delta\left( C_1 \mapsto f_g \right)
    =
  \left\{
    C_1 \mapsto \underline{C_1.f_g}, C_2 \mapsto \underline{C_2.g_2}, C_3 \mapsto \underline{C_2.g_1}
  \right\}
</math>
</math>

Latest revision as of 10:11, 11 April 2007

Template:Article will be deleted Author: Matthias Konrad

The system

In this example we are studying a simple system with three classes that contains both renaming and selects:

class
   A
feature
   f1 do ... end
   g1 do ... end
end
class
   B
inherit
   A
      rename f1 as f2, g1 as g2 
      redefine f2, g2 end
feature
   f2 do ... end
   g2 do ... end
end
class
   D
inherit
 
   A
      redefine f1, g1 
      select g1 end
   B
      select f2 end
feature
   f1 do ... end
   g1 do ... end
end

This system is defined by:

S={A,B,D}

τ={A↦{f1↦A.f1_,g1↦A.g1_},B↦{f2↦B.f2_,g2↦B.g2_},D↦{f1↦D.f1_,g1↦D.g1_}}

α={A↦∅,B↦{A},D↦{A,B}}

η={A↦∅,B↦{A↦{f1↦f2,g1↦g2}},D↦{A↦∅,B↦∅}}

σ={A↦∅,B↦{A↦∅},D↦{A↦{g1},B↦{f2}}}

C={1↦A,2↦B,3↦D}

The naming function

We proceed by calculating the naming function. According to its definition we have to do that incrementally. Meaning that we first calculate βS1 then βS2 and finally βS3.

Calculating βS1

Since βS1 contains only one class it is sufficient to define βS1(A↦A). According to the definition:

  • βS1(C1↦C1)=id(dom(τ1)∪UNION b⋅(b∈α1 | ran(βS0(b↦b)≪η1,b)))

We can forget about the right part of the union since C1 has no base classes. So we need to calculate:

  1. id(dom(τ1))
    1. τ1=τ(C1)={f1↦C1.f1_,g1↦C1.g1_}
    2. dom(τ1)={f1,g1}
    3. id(dom(τ1))={f1↦f1,g1↦g1}

So we get:

βS1(C1↦C1)={f1↦f1,g1↦g1}

And hence:

βS1={(C1↦C1)↦{f1↦f1,g1↦g1}}

Calculating βS2

We show the calculation of the different (four) parts of the function in separate sections:

Calculate βS2(C1↦C1)

According to the definition: βS2(C1↦C1)=βS1(C1↦C1)={f1↦f1,g1↦g1}

Calculate βS2(C2↦C1)

According to the definition: βS2(C2↦C1)=∅

Calculate βS2(C2↦C2)

According to the definition: βS2(C2↦C2)=id(dom(τ2)∪UNION b⋅(b∈α2 | ran(βS1(b↦b)≪η2,b)))

Lets calculate the left part first:

  1. τ2=τ(C2)={f2↦C2.f2_,g2↦C2.g2_}
  2. dom(τ2)={f2,g2}

And now the right part:

  1. UNION b⋅(b∈{C1} | ran(βS1(b↦b)≪η2,b))=ran(βS1(C1↦C1)≪η2,C1)
  2. βS1(C1↦C1)={f1↦f1,g1↦g1}
  3. η2,C1=η(C2)(C1)={f1↦f2,g1↦g2}
  4. {f1↦f1,g1↦g1}≪{f1↦f2,g1↦g2}={f1↦f2,g1↦g2}
  5. ran({f1↦f2,g1↦g2})={f2,g2}

So we get:

βS2(C2↦C2)={f2↦f2,g2↦g2}

Calculate βS2(C1↦C2)

According to the definition: βS2(C1↦C2)=βS2′(C1↦C2)≪θS2(C1↦C2)

Where: βS2′(C1↦C2)=UNION b ⋅ (b∈α2 | βS1(C1↦b);(id(ran(βS1(C1↦b)))≪η2,b))

And: θS2(C1↦C2)=UNION b ⋅ (b∈α2 | βS1(C1↦b);(id(ran(βS1(C1↦b)))≪η2,b)▹σ2,b)

Here are the steps taken to compute the part:

  1. βS1(C1↦C1);(id(ran(βS1(C1↦C1)))≪η2,C1)
    1. id(ran(βS1(C1↦C1)))={f1↦f1,g1↦g1}
    2. {f1↦f1,g1↦g1}≪{f1↦f2,g1↦g2}={f1↦f2,g1↦g2}
    3. {f1↦f1,g1↦g1};{f1↦f2,g1↦g2}={f1↦f2,g1↦g2}
    4. βS2′(C1↦C2)={f1↦f2,g1↦g2}
  2. βS1(C1↦C1);(id(ran(βS1(C1↦C1)))≪η2,C1)▹σ2,C1
    1. σ2,C1=∅
    2. id(ran(βS1(C1↦C1)))≪∅=∅
    3. βS1(C1↦C1);∅=∅
    4. θS2(C1↦C2)=∅
  3. {f1↦f2,g1↦g2}≪∅={f1↦f2,g1↦g2}

So we get:

βS2(C1↦C2)={f1↦f2,g1↦g2}

Putting the parts together:

We can know show the complete total function:

βS2={

(C1↦C1)↦{f1↦f1,g1↦g1},

(C1↦C2)↦{f1↦f2,g1↦g2},

(C2↦C1)↦∅,

(C2↦C2)↦{f2↦f2,g2↦g2} }

Calculating βS3

We will not show the complete construction of βS3 but restrict our self to the most interesting parts.

Calculate βS3(C1↦C3)

According to the definition: βS3(C1↦C3)=βS3′(C1↦C3)≪θS3(C1↦C3)

Where: βS3′(C1↦C3)=UNION b ⋅ (b∈α3 | βS2(C1↦b);(id(ran(βS2(C1↦b)))≪η3,b))

And: θS3(C1↦C3)=UNION b ⋅ (b∈α3 | βS2(C1↦b);(id(ran(βS2(C1↦b)))≪η3,b)▹σ3,b)

Note that we can omit η3,b from the formulas since it is always empty.

  1. βS2(C1↦C2);id(ran(βS2(C1↦C2))) ∪ βS2(C1↦C1);id(ran(βS2(C1↦C1)))
    1. βS2(C1↦C2)={f1↦f2,g1↦g2}
    2. id(ran(βS2(C1↦C2)))={f2↦f2,g2↦g2}
    3. βS2(C1↦C2);id(ran(βS2(C1↦C2)))={f1↦f2,g1↦g2}
    4. βS2(C1↦C1)={f1↦f1,g1↦g1}
    5. id(ran(βS2(C1↦C1)))={f1↦f1,g1↦g1}
    6. βS2(C1↦C1);id(ran(βS2(C1↦C1)))={f1↦f1,g1↦g1}
    7. {f1↦f2,g1↦g2} ∪ {f1↦f1,g1↦g1}={f1↦f1,f1↦f2,g1↦g1,g1↦g2}
  2. βS2(C1↦C2);id(ran(βS2(C1↦C2))) ▹ σ3,C2 ∪ βS2(C1↦C1);id(ran(βS2(C1↦C1))) ▹ σ3,C1
    1. σ3,C2=σ(C3)(C2)={f2}
    2. σ3,C1=σ(C3)(C1)={g1}
    3. βS2(C1↦C2);id(ran(βS2(C1↦C2))) ▹ σ3,C2={f1↦f2}
    4. βS2(C1↦C1);id(ran(βS2(C1↦C1))) ▹ σ3,C1={g1↦g1}
    5. {f1↦f2} ∪ {g1↦g1}={f1↦f2,g1↦g1}
    6. {f1↦f1,f1↦f2,g1↦g1,g1↦g2}≪{f1↦f2,g1↦g1}={f1↦f2,g1↦g1}

So we get:

βS3(C1↦C3)={f1↦f2,g1↦g1}

The complete naming function

βS3={

(C1↦C1)↦{f1↦f1,g1↦g1},

(C1↦C2)↦{f1↦f2,g1↦g2},

(C2↦C1)↦∅,

(C2↦C2)↦{f2↦f2,g2↦g2},

(C1↦C3)↦{f1↦f2,g1↦g1},

(C2↦C3)↦{f2↦f2,g2↦g2},

(C3↦C3)↦{f1↦f1,g1↦g1,f2↦f2,g2↦g2},

(C3↦C1)↦∅,

(C3↦C2)↦∅ }


The dynamic binding function

To calculate the dynamic binding function, we need to get δS3. We will again calculate it incrementally:

Calculating δS1

According to the definition:

δS1(C1↦C1)=βS(C1↦C1);((UNIONb⋅(b∈α1|(βS(b↦b);η1,b)−1;δS0(b↦b)))≪τ1)

Since α1 is empty this simplifies to: δS1(C1↦C1)=βS(C1↦C1);τ1={f1↦f1,g1↦g1};{f1↦C1.f1_,g1↦C1.g1_}

So we get: δS1={(C1↦C1)↦{f1↦C1.f1_,g1↦C1.g1_}}

Calculating δS2

Again we calculate the different parts of the function in separate sections:

Calculate δS2(C1↦C1)

According to the definition: δS2(C1↦C1)=δS1(C1↦C1)={f1↦C1.f1_,g1↦C1.g1_}

Calculate δS2(C2↦C1)

According to the definition: δS2(C1↦C1)=∅

Calculate δS2(C2↦C2)

According to the definition:

δS2(C2↦C2)=βS(C2↦C2);((UNIONb⋅(b∈α2|(βS(b↦b);η2,b)−1;δS1(b↦b)))≪τ2)

  1. UNIONb⋅(b∈{C1}|(βS(b↦b);η2,b)−1;δS1(b↦b))=(βS(C1↦C1);η2,C1)−1;δS1(C1↦C1)
    1. βS(C1↦C1);η2,C1={f1↦f2,g1↦g2}
    2. (βS(C1↦C1);η2,C1)−1={f2↦f1,g2↦g1}
    3. (βS(C1↦C1);η2,C1)−1;δS1(C1↦C1)={f2↦C1.f1_,g2↦C1.g1_}
  2. τ2=τ(C2)={f2↦C2.f2_,g2↦C2.g2_}
  3. {f2↦C1.f1_,g2↦C1.g1_}≪{f2↦C2.f2_,g2↦C2.g2_}={f2↦C2.f2_,g2↦C2.g2_}

So we get: δS2(C2↦C2)={f2↦C2.f2_,g2↦C2.g2_}

Calculate δS2(C1↦C2)

According to the definition:

δS2(C1↦C2)=βS(C1↦C2);((UNIONb⋅(b∈α2|(βS(b↦b);η2,b)−1;δS1(b↦b)))≪τ2)

At this stage it should be clear how to calculate this, so we just give the result:

δS2(C1↦C2)={f1↦C2.f2_,g1↦C2.g2_}

Putting the parts together:

We can know show the complete total function:

δS2={

(C1↦C1)↦{f1↦C1.f1_,g1↦C1.g1_},

(C1↦C2)↦{f1↦C2.f2_,g1↦C2.g2_},

(C2↦C1)↦∅,

(C2↦C2)↦{f2↦C2.f2_,g2↦C2.g2_} }

Calculating δS3

There is nothing new for this calculation so we just present the result:

δS3={

(C1↦C1)↦{f1↦C1.f1_,g1↦C1.g1_},

(C1↦C2)↦{f1↦C2.f2_,g1↦C2.g2_},

(C2↦C1)↦∅,

(C2↦C2)↦{f2↦C2.f2_,g2↦C2.g2_},

(C1↦C3)↦{f1↦C2.f2_,g1↦C3.g1_},

(C2↦C3)↦{f2↦C2.f2_,g2↦C2.g2_},

(C3↦C3)↦{f1↦C3.f1_,g1↦C3.g1_,f2↦C2.f2_,g2↦C2.g2_},

(C3↦C1)↦∅,

(C3↦C2)↦∅ }

Deriving the dynamic binding function

The function is now given. We evaluate it at two interesting points:

  • δ(C1↦f1)={C1↦C1.f1_,C2↦C2.f2_,C3↦C2.f2_}
  • δ(C1↦fg)={C1↦C1.fg_,C2↦C2.g2_,C3↦C2.g1_}