2017-09-05 2 views
0

Ich brauche eine Funktion zu definieren, die Schlüssel und Werte eines endlichen Karte in einen Satz von Schlüsselwertpaaren abbildet:Wie werden sowohl Schlüssel als auch Werte eines Mappings abgebildet?

theory Test 
    imports Main "~~/src/HOL/Library/Finite_Map" 
begin 

definition denorm :: "('a, 'b) fmap ⇒ ('a × 'b) fset" where 
    "denorm m ≡ " 

end 

Das Problem ist, dass ich diese Funktion durch Rekursion nicht definieren kann, weil fmap ISN ist kein induktiver Datentyp und hat keine Konstruktoren.

Ich denke, dass fmap wird als eine Liste von Paaren intern dargestellt. Ist es möglich, fmap in die Liste zu konvertieren? Ich brauche eine Inverse von Funktion.

Antwort

1

Eine Möglichkeit ist Bild zusammensetzt, Domäne und lookup: Der Ausdruck

λ m. (λ k. (k, the (fmlookup m k))) |`| fmdom m 

den gewünschten Typ

('a, 'b) fmap ⇒ ('a × 'b) fset 

und sollte den gewünschten Satz für eine Karte m berechnen.

1

Diese Funktion ist schon da:

fset_of_fmap :: "('a, 'b) fmap ⇒ ('a × 'b) fset" 
+0

ich es nicht in Isabelle2016-1 finden. Vielleicht ist es in der neuesten instabilen Version? – Denis

+1

Ja, ich habe es für 2017 hinzugefügt, von denen der erste Release Candidate verfügbar ist. – larsrh

Verwandte Themen