Gibt es eine Verbindung zwischen 'a: ~: b' und '(a: == b): ~: True'?

8

Gibt es eine Verbindung zwischen propositional und < a href="https://hackage.haskell.org/package/singletons-2.2/docs/Data-Singletons-Prelude-Eq.html"> Gleichstellung gefördert?

Sagen wir, ich habe

%Vor%

im Bereich für einige Symbol s; durch Mustererkennung auf es ist Refl , ich kann das in

umwandeln %Vor%

so:

%Vor%

Aber was ist mit der anderen Richtung? Wenn ich es versuche

%Vor%

Dann ist alles was ich bekomme

%Vor%     
Cactus 20.06.2016, 13:09
quelle

1 Antwort

8

Ja, es ist möglich, zwischen den beiden Darstellungen zu gehen (vorausgesetzt, die Implementierung von :== ist korrekt), aber es erfordert eine Berechnung.

Die Informationen, die Sie benötigen, sind nicht im Boolean selbst vorhanden ( es wurde auf ein einzelnes Bit gelöscht ); Sie müssen es wiederherstellen. Dies beinhaltet die Befragung der beiden Teilnehmer des ursprünglichen Booleschen Gleichheitstests (was bedeutet, dass Sie sie zur Laufzeit behalten müssen) und die Verwendung Ihrer Kenntnis des Ergebnisses, um die unmöglichen Fälle zu eliminieren. Es ist ziemlich mühsam, eine Berechnung erneut durchzuführen, für die Sie die Antwort bereits kennen!

In Agda arbeiten und Naturals anstelle von Strings verwenden (weil sie einfacher sind):

%Vor%

Im Prinzip denke ich, du könntest das in Haskell mit Singletons machen, aber warum? Verwenden Sie keine booleschen Werte!

    
Benjamin Hodgson 20.06.2016, 14:59
quelle