2017-09-05 2 views
0

J'ai besoin de définir une fonction qui clés et des valeurs d'une carte finie en un ensemble de paires clé-valeur:Comment mapper les deux clés et les valeurs d'un mappage?

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

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

end 

Le problème est que je ne peux pas définir cette fonction par récursion, parce que fmap ISN 't un type de données inductif et il n'a aucun constructeur.

Je suppose que fmap est représenté sous la forme d'une liste de paires en interne. Est-il possible de convertir fmap à la liste? J'ai besoin d'une fonction inverse de fmap_of_list.

Répondre

1

Une façon possible consiste à composer l'image, le domaine et recherche: l'expression

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

a le type désiré

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

et doit calculer la consigne souhaitée pour une carte m.

1

Cette fonction est déjà là:

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

Je ne peux pas le trouver dans Isabelle2016-1. Peut-être que dans la dernière version instable? – Denis

+1

Oui, je l'ai ajouté pour 2017, dont le premier candidat est disponible. – larsrh