• Keine Ergebnisse gefunden

C0: Ausdrücke und Anweisungen

N/A
N/A
Protected

Academic year: 2022

Aktie "C0: Ausdrücke und Anweisungen"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 2 vom 28.04.20

Operationale Semantik

Serge Autexier, Christoph Lüth

Universität Bremen Sommersemester 2020

13:55:42 2020-07-14 1 [43]

Fahrplan

IEinführung

IOperationale Semantik IDenotationale Semantik

IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül

IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen

IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung

ISpezifikation von Funktionen IReferenzen und Speichermodelle IAusblick und Rückblick

Korrekte Software 2 [43]

Zutaten

// GGT(A,B) i f ( a == 0 ) r = b ; e l s e {

w h i l e ( b != 0 ) { i f ( a <= b )

b = b− a ; e l s e a = a− b ; }

r = a ; }

IProgramme berechnenWerte IBasierend auf

I Werte sindVariablenzugewiesen I Evaluation vonAusdrücken IFolgt dem Programmablauf

Korrekte Software 3 [43]

Unsere Programmiersprache

Wir betrachten einen Ausschnitt der ProgrammierspracheC(C0).

Ausbaustufe 1 kennt folgende Konstrukte:

ITypen:int;

IAusdrücke: Variablen, Literale (für ganze Zahlen), arithmetische Operatoren (für ganze Zahlen), Relationen (==,<, . . . ), boolsche Operatoren (&&,||);

IAnweisungen:

IFallunterscheidung (if. . .else. . . ), Iteration (while), Zuweisung, Blöcke;

ISequenzierung und leere Anweisung sind implizit

Korrekte Software 4 [43]

C0: Ausdrücke und Anweisungen

Aexp a::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 Bexp b::=1|0|a1==a2|a1<a2|!b|b1&&b2|b1||b2

Expe:=a|b Stmt c::= Idt=Exp

| if(b)c1 elsec2

| while(b)c

| c1;c2

| { } NB: Nicht diekonkreteSyntax.

Korrekte Software 5 [43]

Eine Handvoll Beispiele

a = (3+ y )∗x+5∗b ; a = ((3+ y )∗x )+(5∗b ) ; a = 3+y∗x+5∗b ;

p = 1 ; c = 1 ;

w h i l e ( c <= n ) { p= p ∗ c ; c= c + 1 ; }

Korrekte Software 6 [43]

Semantik von C0

IDie (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung vonWertenanAdressengeändert werden kann.

Systemzustände

IAusdrücke werten zuWertenV(hier ganze Zahlen) aus.

IAdressenLocsind hier Programmvariablen (Namen):Loc=Idt IEinSystemzustandbildet Adressen auf Werte ab: Σ =Loc*V IEin Programm bildet einen Anfangszustandmöglicherweiseauf einen

Endzustand ab (wenn esterminiert).

Partielle, endliche Abbildungen

Zustände sindpartielle, endliche Abbildungen(finite partial maps)

f :X*A Notation:

If(x) für den Wert vonxinf (lookup) If(x) =⊥wennxnicht inf (undefined)

If[n/x] für den Update an der Stellexmit dem Wertn:

f[n/x](y)def=

(n ifx=y f(y) otherwise

Ihx7→n,y7→miu.ä. für konkrete Abbildungen.

Ihiist die leere (überall undefinierte Abbildung):

hi(x) =⊥

(2)

Arbeitsblatt 2.1: Jetzt seid ihr dran!

IIn euren Gruppen-Arbeitsblättern unter

https://hackmd.informatik.uni-bremen.de/s/SkVLK1Q_Igebt folgendes an

IWie sieht ein Zustand aus, deraden Wert 6 und c den Wert 2 zuweist.

IWelches sind Zustände, und welche nicht:

(A)hx7→1,a7→3i (B)hx7→y,b7→6i (C)hx7→y,b7→6,y7→2i (D)hx7→3,b7→6,y7→2i IUpdate von Zuständen:

(A)hx7→1,a7→3i[1/y] :=??

(B)hx7→1,a7→3i[3/x] :=??

(C)hx7→1,a7→3i[3/x][y/1][4/x] :=??

Korrekte Software 9 [43]

Besprechung

IWie sieht ein Zustand aus, deraden Wert 6 und c den Wert 2 zuweist:ha7→6,c7→2i

IWelches sind Zustände, und welche nicht:

(A)hx7→1,a7→3i + (B)hx7→y,b7→6i − (C)hx7→y,b7→6,y7→2i − (D)hx7→3,b7→6,y7→2i + IUpdate von Zuständen:

(A)hx7→1,a7→3i[1/y] :=hx7→1,a7→3,y7→1i (B)hx7→1,a7→3i[3/x] :=hx7→3,a7→3i

(C)hx7→1,a7→3i[3/x][y/1][4/x] :=hx7→4,y7→1,a7→3i

Korrekte Software 10 [43]

Operationale Semantik: Arithmetische Ausdrücke

Ein arithmetischer Ausdruckawertet unter gegebenen Zustandσzu einer ganzen Zahln(Wert) aus oder zu einem Fehler⊥.

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥ Regeln:

hn, σi →Aexpn xIdt,xDom(σ), σ(x) =v

hx, σi →Aexpv

xIdt,x6∈Dom(σ) hx, σi →Aexp

Korrekte Software 11 [43]

Regelschreibweise vs. Funktionen

SeiInt +=Int∪{⊥}

A e x p E v a l : : AExp−> ( Z u s t a n d−> I n t +) A e x p E v a l n : : I n t s > n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x> s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x )−>

Korrekte Software 12 [43]

Operationale Semantik: Arithmetische Ausdrücke

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nSummen1undn2 ha1+a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1+a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nDiff.n1undn2 ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1a2, σi →Aexp

Korrekte Software 13 [43]

Regelschreibweise vs. Funktionen

SeiInt +=Int∪{⊥}

A e x p E v a l : : AExp−> ( Z u s t a n d−> I n t +) A e x p E v a l n : : I n t s > n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x> s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x )−> A E x p E v a l ( a1 + a2 ) s > l e t n1 = A E x p E v a l a1 s

n2 = A E x p E v a l a2 s i n

i f n1 : : I n t and n2 : : I n t t h e n n1 + n2 i f n1 == o r n2 ==t h e n

Korrekte Software 14 [43]

Operationale Semantik: Arithmetische Ausdrücke

IAexpa::=Z|Idt|a1+a2|a1a2|a1a2|a1/a2 ha, σi →Aexpn| ⊥

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,nProduktn1undn2

ha1a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥odern2=⊥ ha1a2, σi →Aexp

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni∈Z,n26= 0,nQuotientn1,n2

ha1/a2, σi →Aexpn

ha1, σi →Aexpn1 ha2, σi →Aexpn2 fallsn1=⊥,n2=⊥odern2= 0 ha1/a2, σi →Aexp

Arbeitsblatt 2.2: Jetzt seid ihr dran!

IIn euren Gruppen-Arbeitsblättern unter

https://hackmd.informatik.uni-bremen.de/s/SkVLK1Q_I vervollständigt die Funktion

A e x p E v a l : : AExp−> ( Z u s t a n d−> I n t +) A e x p E v a l n : : I n t s−> n

A e x p E v a l x : : Loc s i f Dom( s ) c o n t a i n s x> s ( x ) A e x p E v a l x : : Loc s i f n o t (Dom( s ) c o n t a i n s x )−> A E x p E v a l ( a1 + a2 ) s > l e t n1 = A E x p E v a l a1 s

n2 = A E x p E v a l a2 s i n

i f n1 : : I n t and n2 : : I n t t h e n n1 + n2 i f n1 == o r n2 ==t h e n

IErgänzt dies für * und für /

IFür⊥könnt ihr einfach\botschreiben.

(3)

Beispiel-Ableitungen

Seiσdef=hx7→6,y7→5i.

hx, σi →Aexp6 hy, σi →Aexp5 hx+y, σi →Aexp11

hx, σi →Aexp6 hy, σi →Aexp5 hx−y, σi →Aexp1 h(x+y)∗(x−y), σi →Aexp11

hx, σi →Aexp6 hx, σi →Aexp6 hx∗x, σi →Aexp36

hy, σi →Aexp5 hy, σi →Aexp5 hy∗y, σi →Aexp25 h(x∗x)−(y∗y), σi →Aexp11

Korrekte Software 17 [43]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

h1, σi →Bexptrue h0, σi →Bexpfalse ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2gleich

ha1==a2, σi →Bexptrue

ha1, σi →Aexpn1 ha2, σi →Aexpn2 ni6=⊥,n1undn2ungleich ha1==a2, σi →Bexpfalse

ha1, σi →Aexpn1 ha2, σi →Aexpn2 n1=⊥orn2=⊥ ha1==a2, σi →Bexp

Korrekte Software 18 [43]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

hb, σi →Bexptrue h!b, σi →Bexpfalse

hb, σi →Bexpfalse h!b, σi →Bexptrue

hb, σi →Bexp⊥ h!b, σi →Bexp⊥ hb1, σi →Bexpfalse

hb1&&b2, σi →Bexpfalse

hb1, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥ hb1, σi →Bexptrue hb2, σi →Bexpt

hb1&&b2, σi →Bexpt

Korrekte Software 19 [43]

Operationale Semantik: Boolesche Ausdrücke

IBexpb::= 0|1|a1==a2|a1 <a2|!b|b1&&b2|b1 || b2 hb, σi →Bexptrue|false| ⊥

Regeln:

hb1, σi →Bexptrue hb1&&b2, σi →Bexptrue

hb1, σi →Bexp⊥ hb1&&b2, σi →Bexp⊥ hb1, σi →Bexpfalse hb2, σi →Bexpt

hb1||b2, σi →Bexpt

Korrekte Software 20 [43]

Operationale Semantik: Anweisungen

IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Beispiel:

hc, σi →Stmtσ0| ⊥ hx= 5, σi →Stmtσ0

wobeiσ0(x) = 5 undσ0(y) =σ(y) für alley6=x

Korrekte Software 21 [43]

Operationale Semantik: Anweisungen

IStmtc::=Idt=Exp|if(b)c1 elsec2|while(b)c|c1;c2| { } Regeln:

h{ }, σi →Stmtσ ha, σi →Aexpn∈Z

hx=a, σi →Stmtσ[n/x]

ha, σi →Aexp⊥ hx=a, σi →Stmt⊥ hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmtσ006=⊥

hc1;c2, σi →Stmtσ00 hc1, σi →Stmt⊥ hc1;c2, σi →Stmt

hc1, σi →Stmtσ06=⊥ hc2, σ0i →Stmt⊥ hc1;c2, σi →Stmt

Korrekte Software 22 [43]

Operationale Semantik: Anweisungen

IStmtc::=Idt=Exp|if(b)c1 else c2|while(b)c|c1;c2| { } Regeln:

hb, σi →Bexptrue hc1, σi →Stmtσ0 hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexpfalse hc2, σi →Stmtσ0

hif(b)c1 elsec2, σi →Stmtσ0 hb, σi →Bexp⊥ hif(b)c1 elsec2, σi →Stmt

Operationale Semantik: Anweisungen

IStmtc::=Idt=Exp|if(b)c1 elsec2|while(b)c|c1;c2| { } Regeln:

hb, σi →Bexpfalse hwhile(b)c, σi →Stmtσ

hb, σi →Bexptrue hc, σi →Stmtσ0 hwhile(b)c, σ0i →Stmtσ00 hwhile(b)c, σi →Stmtσ00

hb, σi →Bexptrue hc, σi →Stmt⊥ hwhile(b)c, σi →Stmt

hb, σi →Bexp⊥ hwhile(b)c, σi →Stmt

(4)

Beispiel

x = 1 ;

w h i l e ( y != 0 ) { y = y− 1 ; x = 2 ∗ x ; }

//x= 2y σdef=hy7→2i

Korrekte Software 25 [43]

h1, σi →Aexp1 hx= 1, σi →Stmtσ[1/x] :=σ1

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A) hy=y1;x= 2x, σ1i →Stmt?

(B) hw,?i →Stmt? hwhile(y! = 0){y=y1;x= 2∗x}, σ1i →Stmt? hx= 1;while(y! = 0){y=y1;x= 2∗x}

| {z }

w

, σi →Stmt?

Korrekte Software 26 [43]

(A)

hy−1, σ1i →Aexp1 hy=y−1, σ1i →Stmtσ1[1/y] :=σ2

h2∗x, σ2i →Aexp2 hx= 2x, σ2i →Stmtσ2[2/x] :=σ3 hy=y1;x= 2x, σ1i →Stmtσ3

Korrekte Software 27 [43]

h1, σi →Aexp1 hx= 1, σi →Stmtσ1

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A) hy=y1;x= 2∗x, σ1i →Stmtσ3

(B) hw, σ3i →Stmt? hwhile(y! = 0){y=y−1;x= 2∗x}, σ1i →Stmt? hx= 1;while(y! = 0){y=y1;x= 2∗x}

| {z }

w

, σi →Stmt?

Korrekte Software 28 [43]

(B)

hy, σ3i →Aexp1 hy! = 0, σ3i →Bexp1

hy−1, σ3i →Aexp0 hy=y−1, σ3i →Stmtσ3[0/y] :=σ4

h2∗x, σ4i →Aexp4 hx= 2x, σ4i →Stmtσ4[4/x] :=σ5 hy=y1;x= 2x, σ3i →Stmtσ5

(C) hw, σ5i →Stmtσ5 hw, σ3i →Stmtσ5

hy, σ5i →Aexp0 hy! = 0, σ3i →Bexp0

hw, σ5i →Stmtσ5

(C) (1)

while(y! = 0){y=y−1;x= 2x}

| {z }

w

Korrekte Software 29 [43]

. . .

hy, σ1i →Aexp2 hy! = 0, σ1i →Bexp1

(A) hy=y−1;x= 2x, σ1i →Stmtσ3

(B) hw, σ3i →Stmtσ5 hwhile(y! = 0){y=y1;x= 2∗x}, σ1i →Stmtσ5 hx= 1;while(y! = 0){y=y1;x= 2∗x}

| {z }

w

, σi →Stmtσ5

σ5=σ4[4/x] =σ3[0/y][4/x] =σ2[2/x][0/y][4/x]

=σ1[1/y][2/x][0/y][4/x] =hy7→2i[1/y][2/x][0/y][4/x]

=hy7→0,x7→4i und es giltσ5(x) = 4 = 22= 2σ1(y)

Korrekte Software 30 [43]

Lineare, abgekürzte Schreibweise

//hy7→2i x = 1 ; //hy7→2,x7→1i w h i l e ( y != 0 ) {

y = y− 1 ; x = 2 ∗ x ; }

Lineare, abgekürzte Schreibweise

//hy7→2i

x = 1 ; // Ableitung fürx= 1

//hy7→2,x7→1i

w h i l e(w) //hy! = 0,hy7→2,x7→1ii →Bexp1

| y = y − 1 ; // Ableitung füry=y−1

| //hy7→1,x7→1i

| x = 2 ∗ x ; // Ableitung fürx= 2∗x

| //hy7→1,x7→2i w h i l e ( y != 0 ) {

y = y − 1 ; x = 2 ∗ x ; }

(5)

Lineare, abgekürzte Schreibweise

//hy7→2i x = 1 ; //hy7→2,x7→1i

w h i l e(w) //hy! = 0,hy7→2,x7→1ii →Bexp1

| y = y− 1 ; // Ableitung füry=y−1

| //hy7→1,x7→1i

| x = 2 ∗ x ; // Ableitung fürx= 2∗x

| //hy7→1,x7→2i

w h i l e(w) //hy! = 0,hy7→1,x7→2ii →Bexp1

| y = y− 1 ;

| //hy7→0,x7→1i

| x = 2 ∗ x ;

| //hy7→0,x7→4i

w h i l e(w) //hy! = 0,hy7→0,x7→2ii →Bexp0 //hy7→0,x7→4i

Korrekte Software 33 [43]

Was haben wir gezeigt?

//hy7→2i x = 1 ; //hy7→2,x7→1i w h i l e ( y != 0 ) {

y = y − 1 ; x = 2 ∗ x ; }

//hy7→0,x7→4i

IFüreinen festen Anfangszustandσ1=hy7→2igilt am Ende x= 4 = 22= 2σ1(y).

IGilt das für alle?

IFür welche nicht?

IWie kann man das für alle Anfangs-Zustände, für die es gilt, zeigen?

Korrekte Software 34 [43]

Was passiert hier?

//hy7→ −1i x = 1 ;

w h i l e ( y != 0 ) { y = y− 1 ; x = 2 ∗ x ; }

IAbleitung terminiert nicht (Ableitungsbaum der Auswerttung der while-Schleife wächst unendlich)

IIn linearer Schreibweise geht es immer wieder unten weiter.

Korrekte Software 35 [43]

Arbeitsblatt 2.3: Jetzt seid ihr dran!

IWerten Sie das nebenstehende Program aus für den

Anfangszustandhx7→5,y7→2i IGeben Sie die Auswertung in

abgekürzter Schreibweise an.

IWelche Beziehung gilt am Ende des Programs zwischen den Werten vonxundyim Endzustand und im Anfangszustand?

w h i l e ( y != 0 ) { x = x ∗ x ; y = y− 1 ; }

Korrekte Software 36 [43]

Lineare, abgekürzte Schreibweise

w h i l e(w) //hx7→5,y7→2i σ1

| //hy! = 0,hx7→5,y7→2ii →Bexp1

| x = x ∗ x ;

| //hx7→25,y7→2i

| y = y− 1 ;

| //hx7→25,y7→1i

w h i l e(w) //hy! = 0,hx7→25,y7→1ii →Bexp1

| x = x ∗ x ;

| //hx7→625,y7→1i

| y = y− 1 ;

| //hx7→625,y7→0i σ5

w h i l e(w) //hy! = 0,hx7→625,y7→0ii →Bexp0 //hx7→625,y7→0i

Und es gilt 625 = 54= 522bzw.σ5(x) =σ1(x)2σ1(y)

Korrekte Software 37 [43]

Äquivalenz arithmetischer Ausdrücke

Gegeben zwei Aexpa1anda2 ISind sie gleich?

a1Aexpa2gdw∀σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn ( x∗x ) + 2∗x∗y + ( y∗y ) und ( x+y ) ∗ ( x+y )

IWann sind sie gleich?

σ,n.ha1, σi →Aexpn⇔ ha2, σi →Aexpn

x∗x und 8∗x+9

x∗x und x∗x+1

Korrekte Software 38 [43]

Äquivalenz Boolscher Ausdrücke

Gegeben zwei Bexp-Ausdrückeb1andb2 ISind sie gleich?

b1Bexpb2iff∀σ,b.hb1, σi →Bexpb⇔ hb2, σi →Bexpb A | | (A && B) und A

Beweisen

Zwei Programmec0,c1sind äquivalent gdw. sie die gleichen Zustandsveränderungen bewirken. Formal definieren wir Definition

c0c1iff∀σ, σ0.hc0, σi →Stmtσ0⇔ hc1, σi →Stmtσ0

Ein einfaches Beispiel:

Lemma

Sei wwhile(b)c mit bBexp, cStmt.

Dann gilt: wif(b){c;w} else{ }

(6)

Beweis

Gegeben beliebiger Programmzustandσ. Zu zeigen ist, dass sowohlw also auchif(b){c;w} else{ }zu dem selben Programmzustand auswerten oder beide zu einem Fehler. Der Beweis geht per Fallunterscheidung über die Auswertung von Teilausdrücken bzw.

Teilprogrammen.

1 hb, σi →Bexp⊥:

hwhile(b)c, σi →Stmt⊥ hif(b){c;w} else{ }, σi →Stmt

2 hb, σi →Bexpfalse:

hwhile(b)c, σi →Stmtσ

hif(b){c;w} else{ }, σi →Stmth{ }, σi →Stmtσ

Korrekte Software 41 [43]

Beweis II

3 hb, σi →Bexptrue:

1 hc, σi →Stmtσ0 h

w

z }| {

while(b)c, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00

hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmtσ0 hw, σ0i →Stmtσ00

2 hc, σi →Stmt⊥ h

w

z }| {

while(b)c, σi →Stmthc, σi →Stmt

hif(b){c;w}else{ }, σi →Stmth{c;w}, σi →Stmthc, σi →Stmt

Korrekte Software 42 [43]

Zusammenfassung

IOperationale Semantik als ein Mittel zur Beschreibung der Semantik

IAuswertungsregeln arbeiten entlang der syntaktischen Struktur

IWerten Ausdrücke zu Werten aus und Programme zu Zuständen (zu gegebenen Zustand)

IFragen zu Programmen: Gleichheit

Korrekte Software 43 [43]

Referenzen

ÄHNLICHE DOKUMENTE

Das ultrarelativistische entartete Fermigas (20 Punkte, schriftlich) Wird ein Gas aus Fermionen komprimiert, dann nimmt die mittlere Energie der Fer- mionen zu (E F w¨ achst); wird

•  Mittels Pointer können Funktionen auch als Parameter an andere Funktionen übergeben werden.. Ausdrücke, Operatoren, Typwandlung

sie die gleichen

I Type: zur Zeit nur int; Initialisierer: konstanter Ausdruck I FunSpec später. I Vereinfachte Syntax (konkrete Syntax mischt Type und Id, Kommata

sie die gleichen

Falls eine Kommunikation zwischen Drucker und Computer oder Smartgerät nicht möglich ist, obwohl sich beide in demselben Netzwerk befinden, deaktivieren Sie den Privacy-Separator

Falls eine Kommunikation zwischen Drucker und Computer oder Smartgerät nicht möglich ist, obwohl sich beide in demselben Netzwerk befinden, deaktivieren Sie den Privacy-Separator

Falls eine Kommunikation zwischen Drucker und Computer oder Smartgerät nicht möglich ist, obwohl sich beide in demselben Netzwerk befinden, deaktivieren Sie den Privacy-Separator