Abstrakter
Datentyp "orientierter, gerichteter, knotenbewerteter binärer Baum":
Bem: alle Trägermengen enthalten das
Fehlerelement #
|
Trägermengen |
Intuition (Modell) |
|
A |
Menge von Werten |
|
BA |
Menge der binären Bäume mit Knotenwerten aus A |
|
P = {L,R}* |
Menge der Pfade über {links, rechts} |
|
B =
{true, false} |
Menge der Wahrheitswerte |
|
|
|
|
Funktionen: |
intuitive Erklärung |
|
e |
Konstante "leerer Pfad" |
|
L : P -> P |
Multiplikation mit L von links |
|
R : P -> P |
Multiplikation mit R von links |
|
E |
Konstante "leerer Baum" |
|
con: BAxAxBA -> BA |
Der Baum con(B1,a,B2) hat eine Wurzel mit Wert a, an der links der Baum B1 und rechts der Baum B2 hängt. |
|
sel: BAxP-> A |
sel(B,p) liefert den Wert der an dem von der Wurzel von B aus durch p erreichten Knoten anliegt. |
|
ins:
BAxPxA -> BA |
ins(B,p,a) liefert den Baum der aus B entsteht, wenn der Wert des durch p erreichten Knotens auf a gesetzt wird. |
|
app: BAxPxA -> BA |
app(B,pL,a) liefert den Baum, den man erhält, wenn man an das durch p erreichte Blatt einen linken Sohn mit dem Wert a hängt. Erreicht man durch p kein Blatt, so ergibt es einen Fehler. |
|
cut:
BAxP -> BA |
cut(B,p) ist der Baum, der aus B entsteht, wenn man aus B den durch p erreichten Knoten samt seiner Nachfolger entfernt. |
|
istBlatt: BAxP -> B |
istBlatt(B,p) = true gdw. durch p in B ein Blatt erreicht wird |
Axiome:
sel(E,p) = #
sel( con(B,a,C), e ) = a
sel( con(B,a,C),
Lp ) = sel(B,p)
sel( con(B,a,C),
Rp ) = sel(C,p)
ins(E,p,b) = #
ins( con(B,a,C), e , b ) = con(B,b,C)
ins( con(B,a,C),
Lp , b ) = con( ins(B,p,b) , a , C )
ins( con(B,a,C),
Rp , b ) = con(B , a , ins(C,p) , b )
app(E,e,b) = con(E,b,E)
app(E,p,b) = # <= p /=e
app(con(B,a,C), e , b ) = #
app(con(B,a,C), Lp , b ) = con( app(B,p,b), a , C)
app(con(B,a,C), Rp , b ) = con(B, a , app(C,p,b) )
cut(E,p) = #
cut( con(B,a,C) ,
e ) = E
cut( con(B,a,C) ,
Lp ) = con( cut(B,p) , a , C )
cut( con(B,a,C) ,
Rp ) = con( B , a , cut(C,p) )
istBlatt(E,p) = #
istBlatt(
con(E,a,E) , e ) = true
istBlatt( con(B,a,C)
, e ) = false <= B /=E or C /= E
istBlatt( con(B,a,C) , Lp ) = istBlatt(B,p)
istBlatt( con(B,a,C) , Rp ) = istBlatt(C,p)