Voici deux prédicats simples:Comment définir un prédicat constructif pour une carte?
definition map_is_empty :: "(string ⇒ nat option) ⇒ bool" where
"map_is_empty env ≡ ∀x. env x = None"
value "map_is_empty Map.empty"
value "map_is_empty [''x''↦1]"
definition map_is_less_5 :: "(string ⇒ nat option) ⇒ bool" where
"map_is_less_5 env ≡ ∀x. ∃y. env x = Some y ∧ y < 5"
value "map_is_less_5 [''x''↦1,''y''↦2]"
value "map_is_less_5 [''x''↦1,''y''↦2,''z''↦7]"
Le problème est que value
renvoie des erreurs telles que:
Wellsortedness error
(in code equation map_is_empty ?env ≡ ∀x. Option.is_none (?env x),
with dependency "Pure.dummy_pattern" -> "map_is_empty"):
Type char list not of sort enum
No type arity list :: enum
Comment définir ces prédicats pour pouvoir les évaluer en utilisant value
ou values
?
Peut-être ~~/src/HOL/Library/Finite_Map
et ~~/src/HOL/Library/Mapping
peuvent aider, mais je reçois des erreurs similaires en les utilisant.
~~/src/HOL/Library/FinFun
semble idéal pour ma tâche, mais je reçois la même erreur:
definition ff_is_empty :: "(string ⇒f nat option) ⇒ bool" where
"ff_is_empty env ≡ ∀x. env $ x = None"
value "ff_is_empty (K$ None)"