Wie beweist man die Gleichwertigkeit zweier Typen und dass eine Signatur einzeln bewohnt ist?

8

Wer dem Blog von Tony Morris und den Scala-Übungen gefolgt ist, weiß, dass diese beiden Signaturen gleichwertig sind:

> %Vor%

Und:

%Vor%

Außerdem wurde festgestellt, dass der Typ einfach bewohnt ist (d. h. alle Implementierungen des Typs sind exakt äquivalent). Ich kann den Beweis der Äquivalenz der beiden Typen erraten, weiß aber nicht wirklich, wo ich mit der Ein-Einwohner-Aussage anfangen soll. Wie beweist man das?

    
oxbow_lakes 01.09.2010, 22:05
quelle

1 Antwort

2

Der Option -Typ ist doppelt bewohnt. Es kann etwas enthalten oder nicht. Dies ergibt sich aus der Signatur von fold in der ersten Eigenschaft, in der Sie nur:

können
  • gib das Ergebnis der Anwendung von some zurück, wenn du einen Wert vom Typ A hast (du bist ein Some )
  • gib dein none Argument zurück (du bist ein None )

Jede gegebene Implementierung kann nur das eine oder das andere tun, ohne die referentielle Transparenz zu verletzen.

Also ich glaube, es ist ein Fehler, es einfach bewohnt zu nennen. Jede Implementierung eines dieser Merkmale muss jedoch zu einem dieser beiden Fälle isomorph sein.

BEARBEITEN

Das heißt, ich glaube nicht, dass Sie die "Bewohnbarkeit" eines Typs wirklich charakterisieren können, ohne seine Konstrukteure zu kennen. Wenn Sie eines dieser Optionsmerkmale um eine Implementierung erweitern, die einen Konstruktor mit einem Tuple12[A] enthält, könnten Sie beispielsweise 13 verschiedene Versionen von fold schreiben.

    
Tom Crockett 01.09.2010 23:30
quelle