Repräsentation von Datenstrukturen im π -Kalkül Simon Pinkel, Betreuer: Guido Tack Seminar: Theorie kommunizierender Systeme: Derπ -Kalkül Gliederung 1. 2. 3. 4. 5. Motivation Darstellung von Daten im π -Kalkül Vergleich mit Alice persistente Daten Zusammenfassung Motivation %XII ( Q ) := ∑ X LQX .%XIIX( Q ) %XII (Q) G Y ,Z ∑ X LQX .%XIIX(,QYG),Z +RXWZG .%XIIYG( Q ) := { RXWZ . %XII YG( Q ) G (|Y | < Q −1) G (|Y | = Q −1) CCS-Buffer beliebiger Größe 2 Kompromisse: { { Erweiterung des Kalküls (Parameter) Wertemenge V endlich Æ Darstellung im π -Kalkül kompromisslos möglich! Darstellung Idee: Werte selektieren aus einem Menu! Menu G Z(D ) G [(D ) G \ (D ) G ] (D ) Wert Programm Darstellung Idee: Werte selektieren aus einem Menu! Menu G Z(D ) G [ (D ) G \ (D ) G ] (D ) Wert Programm Wahrheitswerte Beispiel: Wahrheitswerte 7UXH(N ) := N (W I ).W )DOVH(N ) := N (W I ). I 7UXH N ≡ N (W I ).W W’ W N W ’.3 + I ’.4 N W ’ I ’ .(W ’.3 + I ’.4) 3 flüchtige Daten 7UXH(N ) := N (W I ).W Daten = unäre Abstraktionen )DOVH(N ) := N (W I ). I Argument = /RNDWLRQ N Rechnung = Selektion aus gesendetem 0HQX Rechenoperationen = abgeleitete Operatoren: &RQG ( 3, 4 )(N ) := (new W I )N W I .(W.3 + I .4 ) Æ Berechnungen = Reaktionen(τ ) Rechnen zerstört die Datenstruktur Zahlen parametrisierte Menueinträge ... 3 Menu N null succ(N) 4 Programm Zahlen parametrisierte Menueinträge ... N 3 Menu null succ(N) 4 Programm Zahlen Konstruktoren: =HUR := ( N ).N ( Q V ).Q 6XFF( 1 ) := (N ). new O ( N (Q V ).V O | 1 O ) Dekonstruktor: Beispiel: 1XPEHUFDVHV ( 3, ) )(N ) := (new Q V )N Q V .(Q.3 + V.) ) 4 = 6XFF( 6XFF( 6XFF( 6XFF( 1XOO )))) Korrektheit von Numbercases 6XFF( 1 ) N | 1XPEHUFDVHV ( 3, ) ) N →* new O ( 1 O | ) O ) 6XFF( 1 ) N = new O (N (Q V ).V O | 1 O ) new O ( V O | 1 O ) new O 1 O 1XPEHUFDVHV ( 3, ) ) N N = (new Q V )N Q V .(Q.3 + V.) ) V (new Q V )(Q.3 + V.) ) O ) O (für =HUR analog) Listen 2 Y gleiche Idee wie bei Zahlen: Zeiger auf die Restliste und aktuelles Element ... [v2,v3,v4] Menu 1 Y N [v1,v2,v3,v4] nil cons(NY) Programm Listen 2 Y gleiche Idee wie bei Zahlen: Zeiger auf die Restliste und aktuelles Element ... [v2,v3,v4] k Menu 1 nil cons(NY) [v1,v2,v3,v4] Programm v1 Listen Konstruktor: 1LO := (N ).N ( Q F ).Q &RQV(9 , /) := (N ).QHZ Y O (N ( Q F ).F < Y O > |9 < Y > | / < O >) Dekonstruktor: Beispiel: /LVWFDVHV( 3, ) )(N ) := ( QHZ Q F )N Q F .(Q.3 + F.) ) [1, 2,3, 4] = &RQV(1, &RQV (2, &RQV(3, &RQV(4, 1LO )))) Programmierung GHFU (NP) := case N of =HUR ⇒ =HUR P 6XFF(N ’) ⇒ P(Q V ).N ’ Q V ~ > GHFU (NP) | 6XFF( 1 ) N →* ≈ ( 1 ) P 1FRS\ (OP) := case O of =HUR ⇒ =HUR P 6XFF(O ’) ⇒ new P ’(P( Q V ).V P ’ | 1FRS\ (O ’P ’)) ~ > 1FRS\ OP | 1 O →* 1 P SOXV (NOP) := case N of =HUR ⇒ 1FRS\ OP 6XFF(N ’) ⇒ new P ’(P(Q V ).V P ’ | SOXV (N ’O P ’) ) ~ > SOXV (NOP) | . N | / O →* ( . + /) P Korrektheit von plus SOXV(NOP) | . N | / O →* ( . + /) P : strukturelle Induktion über . : . = =HUR : =HUR N N 1XPEHUFDVHV( 1FRS\ OP ,...) N / O / O O 1FRS\ OP * / P = (0 + /) P Korrektheit von plus SOXV(NOP) | . N | / O →* ( . + /) P : strukturelle Induktion über . : . = 6XFF( . ') : 6XFF( . ’) N N / O .’ N’ N’ 1XPEHUFDVHV(...,(N ’). new P ’(P(Q V ).V P ’ | SOXV(N ’O P ’) ) N new P ’(P(Q V).V P ’ | SOXV(N ’O P ’) ) * / O Induktionsannahme new P ’(P(Q V ).V P ’ | ( . ’+ /) P ’ ) = 6XFF( . ’+ /) P = ( . + /) P Unsichere Operatoren bisher definierte Operationen waren Abstraktionen Argumente waren die Lokationen der zu verrechnenden Werte Æ Unsicher! Beispiel: 3 := 1FRS\ OP | 3 O | 4 O Æ 2 mögliche Reaktionen: 3 →* 3 P | 4 O , 3 →* 3 O | 4 P Lösung: Restriktion! 10RYH( 1 ) := (P ). new O ( 1 O | 1FRS\ OP ) Vergleich mit Alice Beispiel: . N | / O | -RLQ NOP | /HQJWK P versus let fun ccAppend (x::xs,ys) = x::(spawn ccAppend(xs,ys)) | ccAppend (nil,ys) = ys in spawn length (ccAppend(L,K)) end Æ gleiche nebenläufige Berechnungsdisziplin persistente Daten 7UXH N ≡ N (W I ).W N N W ’ I ’ .(W ’.3 + I ’.4) Daten verschwinden durch Benutzung Æ Replikation: *7UXH(N ) := !N (W I ).W *)DOVH(N ) := !N (W I ). I Zahlen: *=HUR := (N ).!N (Q V ).Q *6XFF( 1 ) := (N ).new O (!N (Q V ).V O | 1 O ) * 3 persistent und veränderbar Neu! Programm darf auch selektieren! 3 Y Menu Q F (Y ) Nullref Programm persistent und veränderbar Neu! Programm darf auch selektieren! 3 Y Y Menu Q F (Y ) Ref(v) Programm persistent und veränderbar Neu! Programm darf auch selektieren! 3 Y Y Menu Q F (Y ) Ref(v) Programm persistent und veränderbar Neu! Programm darf auch selektieren! 3 Y Y Menu Q F (Y ) Nullref Programm persistent und veränderbar Referenzen 1XOOUHI ( U ) := U (Q F ).(Q . 1XOOUHI U + F(Y ’).5HI UY ’ + Q. 1XOOUHI U ) 5HI ( UY ) := U (Q F ).(F Y .5HI UY + F( Y ’).5HI UY ’ + Q. 1XOOUHI U ) Æ veränderbare Zelle(sicher): 6WRUH(9 ) := ( U ). new Y ( 5HI UY | 9 Y ) Operationen: 5HIFDVHV( 3, ) ) := ( U ).(new Q F ) U QF .(Q.3 + F.) ) 1XOOLI\ ( 3 ) := ( U ).(new Q F ) U QF .Q .3 $VVLJQ( 3 ) := ( UY ).(new Q F ).U QF .F Y .3 Zusammenfassung Daten empfangen ein 0HQX über eine /RNDWLRQ N Daten selektieren 0HQXRSWLRQ Darstellung beliebig großer Datenstrukturen (Zahlen/Listen) ÆSDUDPHWULVLHUWH0HQXRSWLRQHQ Berechnungen sind nebenläufig, Restriktionen verhindern ungewollte Reaktionen Korrektheit der abgeleiteten Operatoren lässt sich PHLVWdurch 1DFKUHFKQHQGHU5HDNWLRQHQ zeigen Replikation verhindert „Flüchtigkeit“ der Darstellung Referenzen ergeben sich aus: { { Replikation Erweiterung des Protokolls Referenzen Robin Milner, &RPPXQLFDWLQJ DQG0RELOH6\VWHPV WKH 3L&DOFXOXV, Cambridge University Press, 1999 The Alice Project, http://www.ps.uni-sb.de/alice/ Church-Encodings Darstellung von Daten im λ -Kalkül: W ::= [ | λ [.W | W W (λ [.W ) W ’ → W[ [ := W ’] WUXH := λ [\. [ IDOVH := λ [\. \ ]HUR := λ VQ.Q (λ [. [ ) VXFF( 1 ) := λ VQ.V 1 7UXH := (N ).N (W I ).W )DOVH := (N ).N (W I ). I =HUR := (N ).N ( V Q).Q 6XFF( 1 ) := (N ).new O (N (Q V ).V O | 1 O )