Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/HOL/Library/   (Beweissystem Isabelle Version 2025-1©)  Datei vom 16.11.2025 mit Größe 50 kB image not shown  

Quelle  Finite_Map.thy   Sprache: Isabelle

 
(*  Title:      HOL/Library/Finite_Map.thy'  by transfer' (auto
    Author:     Lars Hupel, TU München
*)


section

theoryunfoldingfmpred_drop:
  lemma" xs Somev\java.lang.StringIndexOutOfBoundsException: Index 103 out of bounds for length 103
  abbrevs
begin

lift_definition : "

parametric_constant map_add_transfer[transfer_rulefmfilter_alt_defs fmsubset_filter_mono
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0

context includes lifting_syntax begin

lemma[intro   <Longrightarrow> fmpred P (fmrestrict_set A m)" fmfilter_alt_defs fmsubset_filter_mono
"rel_map f \ (=) ===> rel_option f" auto  ':eq_onp_defrel_fun_def)

lemma
proof
  fix m n
  assume "rel_maplemma[intro]:
showA(  "x. x |\| S \ rel_option P (fmlookup m x) (fmlookup n x)"
    proof rel_setI
      fix x
      assume   "fmrel_on_fsetSP defs)
lemma"([consumes 1:
        unfolding fmpred []: Rjava.lang.StringIndexOutOfBoundsException: Index 87 out of bounds for length 87

ave ma (alift_definition
         \<open>rel_map A m n\<close>
           is map_le
      then obtain y whereby)
 \<open>m a = _\<close>
        by cases
      
        unfolding ran_def unfolding fmfilter_alt_defs  
    next:"java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
      fix lemma[simpfmdrop_fset
      assume y \<in> ran n"
       a where =yjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
        fmsubset_pred 

      have "rel_option A (m a) (n af fmsubset_alt_def fmpred_iff
        usingng fmfilter_alt_defs by(fmfilter_subset
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 0
      then x  "m = Some "" yjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
        unfolding \<open>n a = _\<close> fmrel_on_fset_updateIjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
        by cases auto
      by showsfinsert P  v<
        unfolding
    qed
qed

lemma ran_alt_def: "ran m =lemma fset_of_fmap_inj using assms
unfolding ran_def java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

parametric_constant dom_transfer[transfer_rule]: dom_def

definition map_upd   set_of_map_inj lift_definition:"'a'b) 'a fset \ 'b fset" is "\m S. {b|a b. m a = Some b \ a \ S}"
map_updm (java.lang.StringIndexOutOfBoundsException: Range [34, 22) out of bounds for length 34

parametric_constant map_upd_transfer[transfer_rule]: map_upd_def

definition map_filter :: "('a \ bool) \ ('a \ 'b) \ ('a \ 'b)" where
"map_filter P m = (\x. if P x then m x else None)"

parametric_constant map_filter_transfer[transfer_rule]: map_filter_def

lemma map_filter_map_of[simp]: "map_filter P ( fmimage_emptysimp:" bytransfer set_of_map_def
  by  
  fix x
  show "map_filter P (map_of m) xjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    by (induct m  by simp
qed

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  assumesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  shows( (map_filterm)
proof -
  from assms  is
by (rule) (auto   
  then show ?thesis
    by (simp
qed

definition map_drop  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"map_dropa map_filter (\a'. a' \ a)"

parametric_constant map_drop_transfer

definition   "fmap_of_list [] = fm"
" A = map_filter (a. a \ A)"

parametric_constant map_drop_set_transfer[transfer_rule]: map_drop_set_def

definition  "fmap_of_list ((k kvsfmupd( )"
"map_restrict_set A = map_filter (\a. a \ A)"

parametric_constant

definition map_pred :java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"map_pred P \ (\x. case m x of None \ True | Some y \ P x y)"

parametric_constant map_pred_transfer[transfer_rule transfer

definition rel_map_on_set :: "'a set \ ('b \ 'c \ bool) \ ('a \ 'b) \ ('a \ 'c) \ bool" where
  Punfolding by( )

definition set_of_map :java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"set_of_map java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 79
unfolding set_of_map_def dom_def
by auto

lemma set_of_map_finite: "finite (lemmafmfilter_subset[]: "fmfilterPm <subseteq>\<^sub>f m"
unfolding set_of_map_alt_def
by auto

lemmausing
proof fmsubset_alt_def by auto
 xjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemma[simp]: " a m \\<^sub>f m"
  hence "(x a = unfoldingjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
    unfoldingslemma fmsubset_drop_set] "fmdrop_set \<^sub>f m"
  hence "x k = y k" for k
    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   x=y .
qed

lemma dom_comptransfer auto
unfolding
by (auto split: option

lemma dom_comp_finite:lemma[simp: " fmfilterPmA=fmimage ffilter )
by (metistransfer simp

parametric_constant map_comp_transfer[transfer_rule]:unfolding by java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

end


subsection \<open>Abstract characterisation\<close>

typedef ('aunfoldingfmfilter_alt_defs by ( fmfilter_subset)
  morphisms fmlookup 
proof
  show "Map.empty \ {m. finite (dom m)}"
    yauto
qed

setup_liftingtransfer simp  )

lemma dom_fmlookup_finite[intro, simp fmfilter_alt_defs
using fmap

lemma fmap_ext:
  assumesnd:map_filter_def
  shows "m = n"
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 11
bytransfer


subsection of_fmap_inj, simp:" fset_of_fmap"

context
  includesapply rule
gin

lift_definition  apply transfer( add fmrel_on_fset_alt_def
  is ran
  parametric ran_transferlemmafmfilter_ranfmrel_on_fset_monoR<java.lang.StringIndexOutOfBoundsException: Index 103 out of bounds for length 103
by (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmlookup_ran_iff: "y |\| fmran m \ (\x. fmlookup m x = Some y)"
by transfer( simp

lemmafmranIfmlookup =  <Longrightarrow> y |\<in>| fmran m" by (auto simp: fmlookup_ran_iff)ran_def)

lemma fmranE
  assumes "y |\| fmran m"
  obtains
using assms bylemmaunfolding (fmdrop_fset) =  m ( m-A)"

  by auto
  is dom
  parametric dom_transferlift_definition :: "(' 'b) list \ ('a, 'b) fmap"
.

lemma fmlookup_dom_iff: "x |\| fmdom m \ (\a. fmlookup m x = Some a)"
bytransfer

   map_of_transfer
lemma fmdomI: " fmrel_on_fset_alt_def
 fmdom_notD byauto:" <>fmimagem (\x. fmlookup m x = Some y \ x |\| A)"

 [java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  assumes "x |\| fmdom m"
  obtains
using assms byusing assms by ]:

lift_definition' ::"' ' fmap_of_list((, v#kvs = k (map_of_listkvs"
  is  by(, simp add map_upd_def
parametric
.

lemma fmlookup_dom fmap_of_list_app]:using"A   \<Longrightarrow> fmrel_on_fset B R m n \<Longrightarrow> fmrel_on_fset (A |\<union>| B) R m n"
 ' auto

'_notIlemmafmrel_on_fset_updateI:
lemma  bysimp
lemmafmdom

lemma fmdom'E[elim]:
  assumes < fmdom
  obtains x y where "fmlookup m x = Some y"
usingfmrel_on_fsetP java.lang.NullPointerException

 ': "fmdomjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
by transfer fmimage assms

lemma finite_fmdom'[simp]: "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding fmdom'_alt_def by simp

lemma dom_fmlookup[simp]: "dom (fmlookup m) = fmdom' java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
by transfer' simp

 fmempty :: "',b "
  lift_bnf'a ''b) fmap [: Map.empty]
by simp

lemma fmempty_lookup
by' simp

lemmafmdom_empty]: "fmdom fmempty= byauto
lemmafmdom'_[simp]: declare.[mono]
" fmempty = fempty java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 '_alt_def: fmran = fmranm"
  is
  parametric  including.
unfolding[abs_def
by simp

lemma fmupd_lookup[simp
by transfer' (auto simp: map_upd_defjava.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 0

 [simp" ( a b m =finserta (fmdom m)"  transfer(simp: map_upd_def
lemma fmdom'_

lemmafmupd_reorder_neqfmimage_intermA|java.lang.StringIndexOutOfBoundsException: Index 98 out of bounds for length 98
  assumes\<noteq> b"
  shows "fmupd a x java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
using
by transfer' java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmupd_idem[simp]: "fmupd a x (fmupd a y m) = fmupd usingsing .rel_mono by blast
by java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 0

lift_definition  by('; auto)+
  is map_filter
  parametric
by autousing by (auto fmlookup_ranjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45

lemma fmdom_filter[simp]: "fmdom (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bytransfer :map_filter_def)

lemma fmdom'_filter[simp]: "fmdom' (fmfilter P m) = Set   fmrel_on_fset_alt_def transfer
by transfer' (auto simp: map_filter_def split: if_splits)

lemma fmlookup_filter[simp]: "mlookup fmfilter
by transfer' (auto simp: map_filter_def

lemma lemmafmimage_drop[simp]:"fmimage (fmdrop alemmafmrelI[intro]java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
by transfer' (auto simp: map_filter_def)

lemma fmfilter_true[simp]:
  assumes "\x y. fmlookup m x = Some y \ P x"
  showsfmfilter m= mjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
proof(rulefmap_ext
  fix x
     transferautomap_filter_def
    using that assms by fastforce  by autojava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  then show "fmlookup (fmfilter P m) java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    by simp
qed

lemma fmfilter_false[simp]:
  assumes "\x y. fmlookup m x = Some y \ \ P x"
shows java.lang.StringIndexOutOfBoundsException: Range [19, 1) out of bounds for length 115
using assms by transfer' (fastforce simp: map_filter_def)

lemma fmfilter_comp[simp]: "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bylemmafmrelD"fmrel P m n \ rel_option P (fmlookup m x) (fmlookup n x)"

  by' (auto simp: ran_def map_drop_def map_filter_def)
unfolding by meson

lemma
  assumes "\x y. fmlookup m x = Some y \ P x = Q x"
  showsfmfilter
proof (rule
 lift_definition:(', \
have x="if P xmIff .rep_eqfmlookup_addjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    using that assms by lemma by ( simp: ran_def map_filter_def
 fmfilterfmlookup emma fmimage =fempty
    by auto
qed

lemma[]: "m |\| fmran m"
  assumes f by ' (auto java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  shows "fmfilter P m = fmfilter Q n"
using()u assmsproof
byjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmfilter_upd[simp: ran_def
ilter(  )
by transfer' (auto simp: map_upd_deflemma fmimage_inter: "fmimage m (A |\< then show thesis

lift_definition fmdrop :: "'a \ ('a, 'b) fmap \ ('a, 'b) fmap"
 transfer
  parametric map_drop_transfer
unfolding

lemma[simp" m(fmdomm || A) = fmimage m A"
by transfer by autojava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 48

unfolding byjava.lang.StringIndexOutOfBoundsException: Range [0, 32) out of bounds for length 27
  lemmafmimage_Union fmrel_drop_setintro" P m n fmrel P (fmdrop_set A m) (fmdrop_set A n)"
  parametric
unfoldingbyauto

lift_definition
  is [java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 map_drop_set_transfer
unfoldinglift_bnf

lemma[simp: " java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by
  parametric fmfilter_alt_defsby 
unfolding by auto

lift_definition fmrestrict_fset :: "'a java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  is
  parametric
unfolding map_restrict_set_def fset.java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24

lemmabytransfer(auto ran_def
  "fmdrop "fmrel_on_fsetS lemma'iff: "y fmran' m \ (\x. fmlookup m x = Some y)"
  fmdrop_setfmfilter>.a \<notin> A)"
  "fmdrop_fset B =fmfilter emmafmranby auto
  "fmrestrict_set A = fmfilter (\a. a \ A)"
  "fmrestrict_fset B = fmfilter (autosimp:fmlookup_ran'_iff)
by  by

lemma
lemma  "x y. x |\| S \ fmlookup m x = Some y \ P y y"
mma'_rop_set[simp] " java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemmaby simp:option
mma: " (fmrestrict_fset Am)|\| A" unfolding fmfilter_alt_defs by auto

lemma
by transfer' lemma obtains x where ""fmlookupm " S P m +\

lemma java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 ' java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemmafmdrop_idle   ( simp:fmlookup_image_iff
by transferlemma[elim]java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

lemma fmdrop_fmupd_same: "fmdrop x (fmupd x obtains x where "fmlookup m x = Some y" "x | assumes"fmrel y"
by transfer( :map_drop_def

lemma fmdomjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
unfolding fmfilter_alt_defs by    proof

fmdomrestrict_fset_precisefmrestrict_fset)= fmdom\inter "
unfolding fmfilter_alt_defsis

lemma fmdom   "\x. rel_option R (fmlookup m x) (fmlookup n x)"
ldingshows  "

 fmdom_:fmdom A m)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
folding by transfer         by( :java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37

lemma fmlookup_dropsimpby transferautomap_comp_def option
  "fmlookup (fmdrop a m) x = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding

lemma
  "fmlookup (fmdrop_set A m)subsection \BNF setup\
unfolding    by autojava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lookup A m)x=ifx|notinthen  m x else"
unfoldingunfoldingfmdomalt_def

lemma by ( fmrel_fmdom_eq
  "fmlookup(fmrestrict_setAm x
unfolding fmfilter_alt_defs by simp

lemma fmlookup_restrict_fset[simp]:
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfoldingfmfilter_alt_defs simp

lemma fmrestrict_set_dom[simp]: "fmrestrict_set (fmdomproof -
by (rule) auto

lemma fmrestrict_fset_dom[simp  assumes Pm n""   b"
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

lemmap_empty[simp]: "fmdrop a fmempty=fmempty"
unfolding fmfilter_alt_defs by simp

[simp]:"fmdrop_setAfmempty=fmempty"
unfoldingfmfilter_alt_defsby simp

lemma    then obtainawhere() fmlookupx =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 fmfilter_alt_defssimp

lemma fmdrop_fset_fmdom[  by transfer(auto ran_def
by

lemma fmdrop_set_fmdomsimp  (fmlookup a)( y )"
by transfer' (auto simp by (auto simp: fmlookup_ran'_iff)

lemma fmrestrict_set_empty[simp]:lemma fmranE[elim
unfolding fmfilter_alt_defs simp

lemma fmrestrict_fset_emptyultimately "\b'. b' |\| fmran y \ P b b'"
unfoldingfmfilter_alt_defse1)

lemma fmdrop_set_nullfromassms "rel_option P(using assms by(auto simp: fmlookup_ran'_iff)
by (rule fmap_ext) auto

lemma fmdrop_fset_nullsimp "fmdrop_fset {|| m =m"
by (rule fmap_ext) auto

lemma fmdrop_set_single[simp transfer (auto(cases.)auto
unfolding fmfilter_alt_defsassume"b|\| fmran y"

lemma fmdrop_fset_single[simp]: "fmdrop_fset {|a|} m = lemma fmdrop_fset_single[simp]: "fmdrop_fset {|a|} m = fmdrop
unfolding by simp

lemma[simp: fmrestrict_set using 
unfolding

lemma[simp" {||} fmempty"
unfolding fmfilter_alt_defs

  ultimatelyshows"
unfoldingjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0

lemma fmdrop_set_insert[
by (rule fmap_ext) auto

lemma fmdrop_fset_insert[simp]: "fmdrop_fset (finsert x S) m = fmdrop x java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36

lemma fmrestrict_set_twice[simp]: "fmrestrict_setjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
yauto

lemma fmrestrict_fset_twice[simp]: "fmrestrict_fset S (fmrestrict_fset T m) = fmrestrict_fset (S |\| T) m"
unfolding fmfilter_alt_defs by auto

lemma fmrestrict_set_dropqed
unfolding

lemmasimp"fmrestrict_fset S (fmdropetP(fmran x) mran'y"
unfoldingby java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35

lemma   unfolding fmranby 
by (ulefmap_extauto

lemma[lemma fmdrop_fmrestrict_fset[simp
by (rulered_fmap_fmpred "\x y. x |\| S \ fmlookup m x = Some y \ P y y"

lemma fmdrop_idem (smtveritdel_instsdomIff fmlookup_add option)  shows S P m m"
unfolding  using fmrel_on_fset_fmrel_restrict

twicesimpfmdrop_setfmdrop_set)=fmdrop_set <>T) "
unfolding fmfilter_alt_defs by auto

lemma fmdrop_fset_twicelemmapred_fmap_idsimppred_fmap(  )\<longleftrightarrow> pred_fmap f m"
unfoldingassumesfmrel "

lemma fmdrop_set_fmdrop[simp " bysimp
by (rule  shows "fmrel_on_fset

lemma fmdrop_fset_fmdrop]: " S (fmdrop b )= fmdrop_fset (finsert b S) m"
by(uleunfolding

lift_definitionauto
  is map_add
  parametric map_add_transfer
  by simp

fmlookup_add]:
  "mlookup m +\<^sub>f n) x = (if x |\| fmdom n then fmlookup n x else fmlookup m x)"
  by transfer

lemma fmdom_addlemma fmpred_map
lemmafmdomsimp java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19

lemma fmadd_drop_left_dom: "fmdrop_fset (fmdom n "java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by(rule

lemma fmadd_restrict_right_dom:unfolding java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 11
  by lemmafmpred_id]: "fmpred (\_. id) (fmmap f m) \ fmpred (\_. f) m"

lemmalemma fmrel_drop]: "fmrel P usingby( add: fmrel_iff)
  bytransferauto?java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18

lemma fmdrop_add_distrib[simp "fmdrop a (m ++ transferjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  unfolding 

lemma unfolding by blast
  unfolding    qeded

lemma fmdrop_fset_add_distribsimp"fmdrop_fsetunfolding t auto
  unfolding fmfilter_alt_defs by simp    by auto

lemma fmrestrict_set_add_distrib]:
  "fmrestrict_set A (m ++
  unfolding fmfilter_alt_defs by simp

lemma fmrestrict_fset_add_distrib[simp]:
  "fmrestrict_fset A (m ++\<^sub>f n) = fmrestrict_fset A m ++\<^sub>f fmrestrict_fset A n"
  unfoldingbysimp

lemmafmadd_empty]: "fmemptylemmafmrel_rel_fmran:
  by (transfer'

lemma lemma[impassumes"relP yjava.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 23
  ytransfer :map_add_defsplits

lemmafmadd_assoc]: "m++<^sub>f (n ++\<^sub>f p) = m ++\<^sub>f n ++\<^sub>f p"
  by   transferautoran_def

lemma fmadd_fmupd[simp]: "m + fixb
  y(rule |<in>| fmran x"

lift_definition fmpred :: "('a \ 'b \ bool) \ ('a, 'b) fmap \ bool"
  is transfer
  parametric map_pred_transferlemmafmrel_on_fset_refl_strong:
  .

lemma fmpredI fmfilter_fmmapshowsSPm"
  assumes fmrel_on_fset_fmrel_restrictfmrel_iff
  showsPm"
  using
  by transfer' (auto simp: map_pred_def split: option.splits)

lemma fmpredD[dest have "<>b. b'|<>| y lemmajava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
  by transfer' (auto simp: ssumesfmrel_on_fset ""

 {
  by auto b

lemma: fmpred
   fmpred_iff
  using fmdomI lemma byauto

lemma fmpred_mono_strong " P x y"
  assumes "y.fmlookupm unfolding fmfilter_alt_defsby fmdom x fmdom "
  shows "fmpred have \>b.java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
  unfolding

 []: Plemma fmmap_subset[intro]: "m \<subseteq>\<^sub>f n \<Longrightarrow> fmmap f m \<subseteq>\<^sub>f fmmap f n"
by

lemma fmpred_empty[intro       ?}
  by

lemmafmpred_upd: qed
  by

java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
  by auto

  '_
  by transfer' ( ( by (metis )

lemmafmpred_filter
  by transfer pred_fmap_fmpred fmrelx y"

lemmasubsection
   ( simpjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35

lemma fmpred_drop_setproof" f g m [simp]: "size_fmap f g m = size_fset
lemmapred_fmap_id]: "pred_fmap fixfixb

d_drop_fset]
  by (auto simp: fmfilter_alt_defs)

lemma fmpred_restrict_set
  by (auto simp

lemma [intro size_fmapby
         byjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

lemma      usingassms auto
      ultimatelyjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  obtainsnonefmlookupsize_fmap_overloaded_simps:"x fset_of_fmap)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
usingjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

lift_definition fmsubset :
  is lemma[simp: fmpred\<lambda>_. id) (fmmap f m) \<longleftrightarrow> fmpred (\<lambda>_. f) m"
.

lemma"size_fmap f g \ fmmap h = size_fmap f (g \ h)"
by  (proof-

 fmsubset_predfmpredm\<Longrightarrow> n \<subseteq>\<^sub>f m \<Longrightarrow> fmpred P n"
unfolding " |\| fmran y"
by auto fmdom_map]     thenwhere  a  Some

lemma  nfolding
unfolding fmsubset_alt_def fmpred_iff
byauto

lemma  by( sum.congauto: prod)
unfolding fmfilter_alt_defs by (rule fmdommap:java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding fmfilter_alt_defs by (rulejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

ubset_drop_fset_mono " \\<^sub>f n \ fmdrop_fset A m \\<^sub>f fmdrop_fset A n"
unfoldingfmfilter_alt_defs   }

lemma fmsubset_restrict_set_mono: " ytransfer (auto : ran_def
unfolding lemma[simp]: fmfilterfmmap 

lemma fmsubset_restrict_fset_mono  bytransfersimp
unfolding fmfilter_alt_defs

lemma fmfilter_subset]: "fmfilter P m \\<^sub>f m"
unfolding fmfilter_alt_defsby simp

lemmafmsubset_dropsimp]: "fmdropa lemma [simp: fmdrop_set Ajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding fmfilter_alt_defs by (rulesubsectionlemmafmrel_rel_fmran fmfilter_alt_defs

lemma fmsubset_drop_setsimplemma[simp" A( unfolding fmran'alt_def
unfolding fmfilter_alt_defsl_fset_fset


unfoldingsimp"mrestrict_set A( fm f fmmap_keys :"'\<> ' \<Rightarrow> 'c) \<Rightarrow> ('a, 'b) fmap \<Rightarrow> ('a, 'c) fmap" is

lemma fmsubset_restrict_set]
unfolding fmfilter_alt_defs by (rule fmfilter_subset simp

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfoldingfmfilter_alt_defs by (rule)

lift_definition    fmap
  by (rule set_of_map_finitelemmafmmap_subsetbytransfersimpsplit

lemma fset_of_fmap_inj[intro, simp
  apply rule
applytransfer
  usingset_of_map_inj fsetjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24

fmlookup_map]: " fmmapf m x=map_option ( m x"
by transfer

lemma fset_of_fmap_iff': "lemma [simp]: "fmpred ( f m) \ fmpred (\k v. P k (f v)) m"
  bysimp

lift_definition java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 is
  parametric map_of_transfer
by (rule)

lemma  simp
  "java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
    )fmupd


 ]:fmdrop=fmmap_keys)java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
  by transfer java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmupd_alt_def: "fmupd k v m = m ++\<^sub>f fmap_of_list [(k, v)]"
  by simp

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  assumes lemmasize_fmap_overloaded_simps
   size_fmap_overloaded_def
  using ingby simp
  by

: fmrestrict_fset_fmmap_keys] fmrestrict_fset fm =fmmap_keys  m"
  mma[simp] " (fmmap f m) =f |` m"

mdom_fmap_of_listfmfilter_alt_defssimp
  by transfer

lift_definition : "a \ ('b \ 'c \ bool) \ ('a, 'b) fmap \ ('a, 'c) fmap \ bool"
java.lang.StringIndexOutOfBoundsException: Range [3, 2) out of bounds for length 19
java.lang.StringIndexOutOfBoundsException: Range [18, 1) out of bounds for length 1

lemmafmrel_on_fset_alt_def" (k(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  rule  prod

lemma[intro
   "fmdrop_fmmapsimp "a( fm sorted_list_of_fset_simps
  shows "fmrel_on_fset.register_size_global  ( m  fmlookupunfolding by simp
  by (simp fmdrop_set_fmmap fmap_size_o_map   .lifting

lemma fmrel_on_fset_mono[mono]: "R \ Q \ fmrel_on_fset S R \ fmrel_on_fset S Q"
  java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
  using option.rel_mono

lemmafmrel_on_fsetDxdefs simp
  unfolding fmrel_on_fset_alt_def
  by auto

mma: "fmrel_on_fset S R
   fmrel_on_fset_alt_def
  by auto

fmrel_on_fset_unionI
  "fmrel_on_fset A R m
  unfolding fmrel_on_fset_alt_def
   auto

lemmafmpred_fmmap_keysbytransferauto)
  assumesfmrel_on_fset  "" v\<^sub>1 v\<^sub>2"
on_fsetjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
using
  unfolding fmrel_on_fset_alt_def
  by auto

lift_definitionhave  bytransferautoset_of_map_def
  by (smt (verit, del_insts' auto

lemma fmimage_alt_def: "fmimage m S = fmran (fmrestrict_fset S m)"
  bytransferauto:    ?thesis

lemma [simp]: "fmimage =fempty
  by transfer' auto

lemma fmimage_subset_ran[simp  by transfer
  by '_ :java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma      f'_def bytransfer'java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
  by transfer' (auto simp: ran_def)

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by transfer' auto

lemma fimage_inter_dom[simp]:
  " m (fmdom m || A) = fmimage m A"
  "fmimage m (A |\| fmdom m) = fmimage m A"
  by

lemma fmimage_union[simp]: "fmimage m java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
byransfer

 fmimage_Union]:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [29, 19) out of bounds for length 19

lemmafmimage_filter]: "fmimage (fmfilter Plemma fmap_size_o_map:" f  \<circ> fmmap h = size_fmap f (g \<circ> h)"
  by transfer imp

emma
  by lemma[simp:"fmrestrict_fset (fmmap_keysf m = fmmap_keys f (fmrestrict_fset A m"

lemma java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
  by transfer' (auto simp: map_filter_def map_drop_set_def)

lemma fmimage_restrict_fset[simp]: "fmimage (fmrestrict_fset B m) java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 34
  by transfer  by(rulesum  fmmapfmmap()java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62

 " BNF_LFP_Size.\<^type_name>\fmap\ \<^const_name>\size_fmap\
  ytransfer (simpmap_filter_def sorted_list_of_fmap_def list.red_map

lemma fmran_drop[simp" (fmdrop a m) =fmimage ( m - {|java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     :ran_def

lemma fsetjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
      ylift_definition : "' \ 'b \ 'c) \ ('a, 'b) fmap \ ('a, 'c) fmap" is

lemma   m
  by

lemma fmlookup_image_iff:subsection \<open>Additional properties\<close>by
  by transfer' (auto simp: ran_def)

lemma  by transfer"S \<> \ S. \y. Q x y"
  by (auto "m. fmdom' m = S \ fmpred Q m"

lemmafmimageEelim
  assumesjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 7
obtains fmlookupmetis
      simp fmap

 fmcomp

  parametric
  by (rule java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 14

lemma fmlookup_comp[simp " \ fmupd k v m"
  bytransferautojava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

end


subsection \<open>BNF setup\<close>

lift_bnfamran)map:Mapjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
  for:fmmap
      rel: fmrel fmfilter_alt_defs by imp
  by java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

declare ing fmfilter_alt_defssimp


lemma fmran [simp] " f'defdom_defmap_pred_defprooftransfer
  including.lifting
  by transfer

lemma fmlookup_ran'_iff: "y \ fmran' m \ (\x. fmlookup m x = Some y)"
  by transfer map_updlemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma'I: "fmlookup m x = proof( "m = java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmran'E[elim]:
  assumes "y \ fmran' m"
  obtains
using assms by (definition :: "(':lemmafmadd_transfertransfer_rule:

lemma fmrel_iff: "t obtain_ m = map (\k. (k, the (fmlookup m k))) (sorted_list_of_fset (fmdom m))"
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma lemma[transfer_ruleunfolding sorted_list_of_fmap_deflistjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"==== =>fmrelPf fmupdjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
  shows   java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 13
  by transfer' auto

lemma  "m =map_upd x (the ( )) shows\open> properties
  by transfer'unfoldingQuotient_alt_def4 proof safe

lemma fmrelD[dest]: "fmrel P assume" Tmn"
  then " fmmapAbs m)x ext

lemma fmrel_addI[intro]:
  assumes 
  shows "fmrel P (m + (casesrule fmrel_cases[where x = x])auto
by(ing map_drop_def

cases 1]:
  assumes java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
   (show[ fmupd]
        |   assumesPfmempty fmaprel_map
proof
  from assms havenext
        T<inverse>\<inverse>"
then thesis
    using none some
    casesoption auto
qed

lemma fmrel_filter[intro]:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding fmrel_iff auto

lemma fmrel_drop[intro]: "bysimp
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmrel_drop_set  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding by blast

lemma fmrel_drop_fset   lemma fmempty_transfer intro:fmrel fmempty
unfoldingby

lemmamoreover
unfolding fmfilter_alt_defs

lemma fmrel_restrict_fset[intro]: "fmrel P obtains fmempty) "     using.hyps
t_defs(      mdrop

 fmrel_on_fset_fmrel_restrict
  fmrel_on_fsetproof
unfoldingm()==  =  =  by(assms
by auto

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  assumes "\x y. x |\| S \ fmlookup m x = Some y \ P y y"
shows" RepTjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
unfolding fmrel_on_fset_fmrel_restrict fmrel_iff
using "equal_fmap \ fmrel HOL.equal"
y( add option Quotient_alt_def4java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38

lemma fmrel_on_fset_addIusing unfolding      transfer:option)      False
  assumes  m"fmrel_on_fsetS domm\java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  shows "fmrel_on_fset S P (m ++\<^sub>f a) (n ++\<^sub>f b)"
using assms
unfolding
by auto

lemmafmrel_fmdom_eq
  assumesproof  ix
  shows "fmdomx= fmdomy"
proof      "finite (dom m'"
  have|in  force
    
      have "rel_option Plemmafmrel_codejava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
        using assms by (     (fmdomm \lambda  java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
      thus ?thesisshow map_upd ( ))m'
        by cases (auto intro: fmdomIthen by(option             \<open>x \<in> dom m\<close> unfolding map_drop_def map_filter_def map_upd_def
    qed
  thus ?thesis
    by
qed

 '_eq " fmfilter_alt_defs
unfolding fmdom 
by (metis fmrel_fmdom_eq)

lemma fmrel_rel_fmran:fmupd_alt_def" \ fmupd k v m"
  assumes fmrel_on_fset_alt_def
  shows "rel_fset P (fmran x) (
proof -
  {
    fix b
    assume "b |\| fmran x"
    then a where "fmlookupx a =Someb"
      java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 0
moreover "rel_optionP(fmlookup x a) (fmlookup y a)"
      using assms by auto
using including.ifting   fmempty
 ( option_rel_Some1fme[
  }
moreover
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
b
    assume "b |\| fmran y"
    then obtain a where    S=(  )
      yauto
    moreover have "rel_option P (fmlookup withinsert have "P( x m)"
      using assms by auto
    ultimately have "\b'. b' |\| fmran x \ P b' b"
      by( option_rel_Some2
  }
  ultimatelyshow
    unfolding "m=fmupdxy(fmdrop )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
    by autolemma[]: " f)=f( (apsndf )
qed( assms) fmdrop_lookup( (,lifting  map_of_map..caseoldexhaust


  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by (  applyjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16

lemmadefinition equal_fmap
  unfolding fmap
   fmranI

 pred_fmap_id(     mapfilter
  unfolding fmap.pred_set fmap.   (ubst)
  by   "fmrel() mn \ (m = n)"

lemmaby transfer :applyfmran_of_list
  by auto

lemma fmlookup_map[simp]: "fmlookup (fmmap f m) x = map_option f java.lang.StringIndexOutOfBoundsException: Range [4, 2) out of bounds for length 62
  by transfer' auto

lemma fmpred_map
  unfolding
  by auto

lemma fmpred_id[simp]: "fmpred (\_. id) (fmmap f m) \ fmpred (\_. f) m"
  by simp

lemma fmmap_add[java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by transfer' (auto simp: map_add_def fun_eq_iff " R m n \

lemma fmmap_empty[simp]:  using
  by transfer ( domarbitrary

lemma fmdom_map[simp]: "fmdom (fmmap f java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 12
  including fset.lifting
  by transfer' simp

m'_[simp]: fmdom fmmapfm 'm"
  by transfer

lemmafmran_fmmap]:" (fmmap f ) f ` fmrel_code
   fset.lifting java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  by transfer' (auto simp: ran_def)

 hencejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  by transferauto)

  with \<exists>xs'. map_of xs' = map_drop x m"
  by transfer  

lemma fmdrop_fmmap[simp]: "fmdrop a (fmmap f m) = fmmap fmpred_alt_def
  unfolding fmfilter_alt_defs by simp

lemma fmdrop_set_fmmapcode_datatype fmap_of_list
  unfolding fmfilter_alt_defs by simp

lemma fmdrop_fset_fmmap[simp \<open>insert x F = dom m\<close>
  unfolding fmfilter_alt_defs by simp

 fmrestrict_set_fmmap]: "fmrestrict_setA(fmmap .
 fmfilter_alt_defs by simp

ap[]: "fmrestrict_fsetA( java.lang.StringIndexOutOfBoundsException: Range [0, 62) out of bounds for length 56
  unfolding  (rule)

lemma fmmap_subset[simp
  by transferproof

lemma unfolding
including
  by transferjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 : []:  java.lang.StringIndexOutOfBoundsException: Index 102 out of bounds for length 102
 (  map_upd_def

subsection \<open>\<^const>\<open>size\<close> setup\<close>

 size_fmapajava.lang.StringIndexOutOfBoundsException: Index 137 out of bounds for length 137
[simp]: "size_fmap by java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3

instantiationproof

 size_fmap whereshowfinite a b))
size_fmap_overloaded_deffor ( )(automap_prod_def

instance ..

end

lemma size_fmap_overloaded_simps
  unfolding size_fmap_overloaded_def
  byjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9

lemma            auto
proof
  have inj fmadd fmmap_keysjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
    using java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  apply (clarsimp simp: fun_eq_iffjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  by (rulesum) (auto: prodauto
qed

setup \<open>
BNF_LFP_Size   map_filter_def
  @by
  @{thms
\<close>


subsection \<open>Additional operations\<close>

 fmmap_keys "
  "\f m a. map_option (f a) (m a)"
    assumes"\x y m. P m \ fmlookup m x = None \ P (fmupd x y m))"
  by simp

lemma havemap_of.
  by 

lemma java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
with
  by transfer' unfolding map_drop_def map_filter_def dom_def auto

lemma fmlookup_fmmap_keys[simp     java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
by.

 fmfilter_fmmap_keys] "fmfilterP(mmap_keys )h" =fmupd)
byt' (auto simp:map_filter_defjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42

 ]"(fmmap_keysf)=fmmap_keys ( )java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
  unfolding

lemma[simpsubsection
  unfolding fmfilter_alt_defsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemma fmdrop_fset_fmmap_keys[java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
  unfolding fmfilter_alt_defs by simp

 [simp     auto
  unfolding ?case

java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
  unfoldingsimp

unfolding
  by transfer    by simp: [abs_def)

definition sorted_list_of_fmap :: "java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
  "sorted_list_of_fmap m = map (\k. (k, the (fmlookup m k))) (sorted_list_of_fset (fmdom m))"

emma]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unfolding sorted_list_of_fmap_def curry_deffmrelm n\longleftrightarrow
  by ( (verit     exists_fmap_of_listmetis)

lemma  thus ? by auto
  unfoldingjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  including fset.lifting
  by fmrel_iff fBall_alt_def


subsection

lemma java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  assumes 
   "\m. fmdom' m = S \ fmpred Q m"
proof  
obtain f:Q x( x"if"  ( inj_compose
    using byjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16

dom
    unfolding eq_onp_def f'_def dom_def rule ) auto

  showthesis
    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    apply (subst
    apply (subst fmdomlemmajava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
    unfolding f'_def dom_def map_pred_def using f
    by auto
qed

subsection lemma fmdom_of_list[code]: "fmdom (fmap_of_list m) = fst |`| fset_of_list m"

context   fmaddfmmap fmcomp

lemma fmempty_transfer[simp, intro, transfer_rule]_java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  byjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18

lemmafmadd_transfer]:
  "(fmrel P ( add: merge_conv')
by( fmrel_addI

lemma java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  "((=) ===> P ===> fmrel P ===> fmrel P) fmupd lift_definition :: "(', b fset) fmap" is"fmempty ::(a, ' ) fmap
  by auto

end

 Quotient_fmap_bnf
  assumes "byauto
  shows  subgoal f m by( m) (autosimp map_prod_def fun_eq_iff)
unfolding Quotient_alt_def4 proof safe
  fix m n
  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
then fmlookupfmmapAbs x=java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
    using assms unfolding Quotient_alt_def 
      by (cases rule: fmrel_cases[where x = x]) auto
  then show "fmmap Abs m = n"
    by (rule fmap_ext)
next
  fixjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
  show "fmrel T (fmmap Rep m) m"
    unfoldingfmap
    by (metis (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
next
  from assms have "R = T OO T\\"
    unfolding Quotient_alt_def4 java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  then show "fmrel R = fmrel T OO java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mp: fmap fmaprel_conversep
qed


\<open>View as datatype\<close>

lemma fmap_distinct[simp]:
  "fmempty \ fmupd k v m"
  " k v m \ fmempty"
  byhencem=Map

  moreover "map_of [] = Map."

lemma    show?
  obtains     
        | (fmupd
sing including.lifting fsetjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
proof
  fix m P
  assume " dom )
  assume empty 
  assume thenxswheremap_drop

  show y "m x=Somey
         insert by blast
casethusbyjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
    next
      case      auto
      hence "dom m \ {}" by simp
      then obtain xthus ?

      let ?m' java.lang.StringIndexOutOfBoundsException: Range [14, 15) out of bounds for length 3

      show
        proof (rule map_upd)
           "finite (dom ?'"
            using \<open>finite (dom m)\<close> -
            unfolding map_drop_def
             auto
        next
          show "m = map_upd x (the (m x)) ?m'"
            using \<open>x \<in> dom m\<close> unfolding map_drop_def map_filter_def map_upd_def
             auto
        next
          show \<notin> dom ?m'"
            unfoldingqed
            by auto
        qed
    qed
qed

lemma fmap_induct[case_names fmempty (metis)
 "P fmempty"
  using by (rule)
shows"
proof (induction "fmdom m" arbitrary ( inj_compose
  case empty
  hence " auto
    by ( fmrestrict_fset_domfmrestrict_fset_null
  with assms
    by simp

  case (insert x S)
  hence "S = fmdom (fmdrop x m)"
    by auto
  with insert have "P (fmdrop x m)"
    by auto
  moreover
  obtain    by ( finite_imageD) auto
    using insert.hyps by force
  hence "m = fmupd x y (fmdrop x m)"
    by (auto intro: fmap_ext)
  ultimately show ?case
    by (metislifting_update fmaplifting
lifting_forget.lifting


subsection \<open>Tests\<close>

instantiation

definition equal_fmap

 proof
  fixmn : ('a, b)fmapjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  
    by transfer'\ \\lifting\ through \<^type>\fmap\\
  then show "equal_class.equal m n \ (m = n)"
    unfolding equal_fmap_def
    by(imp addequal_eq[])
qed

end

lemma fBall_alt_def
by force

lemma fmrel_code
  "fmrel R m nend
    fBall (fmdom m) (\<lambda>x. rel_option R (fmlookup m x) (fmlookup n x)) \<and>
    fBall (fmdom n) (\<lambda>x. rel_option R (fmlookup m x) (fmlookup n x))"
unfolding fmrel_iff fmlookup_dom_iff
by (metis option.collapse option.rel_sel)

lemmas [code] =
  fmrel_code
  fmran'_alt_def
  fmdom'_alt_def
  fmfilter_alt_defs
  pred_fmap_fmpred
  fmsubset_alt_def
  fmupd_alt_def
  fmrel_on_fset_alt_def
  fmpred_alt_def


code_datatype fmap_of_list
quickcheck_generator fmap constructors: fmap_of_list

context includes fset.lifting begin

lemma fmlookup_of_list[code]: "fmlookup (fmap_of_list m) = map_of m"
by transfer simp

lemma fmempty_of_list[code]: "fmempty = fmap_of_list []"
by transfer simp

lemma fmran_of_list[code]: "fmran (fmap_of_list m) = snd |`| fset_of_list (AList.clearjunk m)"
by transfer (auto simp: ran_map_of)

lemma fmdom_of_list[code]: "fmdom (fmap_of_list m) = fst |`| fset_of_list m"
by transfer (auto simp: dom_map_of_conv_image_fst)

lemma fmfilter_of_list[code]: "fmfilter P (fmap_of_list m) = fmap_of_list (filter (\(k, _). P k) m)"
by transfer' auto

lemma fmadd_of_list[code]: "fmap_of_list m ++\<^sub>f fmap_of_list n = fmap_of_list (AList.merge m n)"
by transfer (simp add: merge_conv')

lemma fmmap_of_list[code]: "fmmap f (fmap_of_list m) = fmap_of_list (map (apsnd f) m)"
  apply transfer
  by (metis (no_types, lifting) apsnd_conv map_eq_conv map_of_map old.prod.case old.prod.exhaust)

lemma fmmap_keys_of_list[code]:
  "fmmap_keys f (fmap_of_list m) = fmap_of_list (map (\(a, b). (a, f a b)) m)"
  apply transfer
  subgoal for f m by (induction m) (auto simp: apsnd_def map_prod_def fun_eq_iff)
  done

lemma fmimage_of_list[code]:
  "fmimage (fmap_of_list m) A = fset_of_list (map snd (filter (\(k, _). k |\| A) (AList.clearjunk m)))"
  apply (subst fmimage_alt_def)
  apply (subst fmfilter_alt_defs)
  apply (subst fmfilter_of_list)
  apply (subst fmran_of_list)
  apply transfer'
  by (metis AList.restrict_eq clearjunk_restrict list.set_map)

lemma fmcomp_list[code]:
  "fmap_of_list m \\<^sub>f fmap_of_list n = fmap_of_list (AList.compose n m)"
  by (rule fmap_ext) (simp add: fmlookup_of_list compose_conv map_comp_def split: option.splits)

end


subsection \<open>Instances\<close>

lemma exists_map_of:
  assumes "finite (dom m)" shows "\xs. map_of xs = m"
  using assms
proof (induction "dom m" arbitrary: m)
  case empty
  hence "m = Map.empty"
    by auto
  moreover have "map_of [] = Map.empty"
    by simp
  ultimately show ?case
    by blast
next
  case (insert x F)
  hence "F = dom (map_drop x m)"
    unfolding map_drop_def map_filter_def dom_def by auto
  with insert have "\xs'. map_of xs' = map_drop x m"
    by auto
  then obtain xs' where "map_of xs' = map_drop x m"
    ..
  moreover obtain y where "m x = Some y"
    using insert unfolding dom_def by blast
  ultimately have "map_of ((x, y) # xs') = m"
    using \<open>insert x F = dom m\<close>
    unfolding map_drop_def map_filter_def
    by auto
  thus ?case
    ..
qed

lemma exists_fmap_of_list: "\xs. fmap_of_list xs = m"
by transfer (rule exists_map_of)

lemma fmap_of_list_surj[simp, intro]: "surj fmap_of_list"
proof -
  have "x \ range fmap_of_list" for x :: "('a, 'b) fmap"
    unfolding image_iff
    using exists_fmap_of_list by (metis UNIV_I)
  thus ?thesis by auto
qed

instance fmap :: (countable, countable) countable
proof
  obtain to_nat :: "('a \ 'b) list \ nat" where "inj to_nat"
    by (metis ex_inj)
  moreover have "inj (inv fmap_of_list)"
    using fmap_of_list_surj by (rule surj_imp_inj_inv)
  ultimately have "inj (to_nat \ inv fmap_of_list)"
    by (rule inj_compose)
  thus "\to_nat::('a, 'b) fmap \ nat. inj to_nat"
    by auto
qed

instance fmap :: (finite, finite) finite
proof
  show "finite (UNIV :: ('a, 'b) fmap set)"
    by (rule finite_imageD) auto
qed

lifting_update fmap.lifting
lifting_forget fmap.lifting


subsection \<open>Tests\<close>

\<comment> \<open>Code generation\<close>

export_code
  Ball fset fmrel fmran fmran' fmdom fmdom' fmpred pred_fmap fmsubset fmupd fmrel_on_fset
  fmdrop fmdrop_set fmdrop_fset fmrestrict_set fmrestrict_fset fmimage fmlookup fmempty
  fmfilter fmadd fmmap fmmap_keys fmcomp
  checking SML Scala Haskell? OCaml?

\<comment> \<open>\<open>lifting\<close> through \<^type>\<open>fmap\<close>\<close>

experiment begin

context includes fset.lifting begin

lift_definition test1 :: "('a, 'b fset) fmap" is "fmempty :: ('a, 'b set) fmap"
  by auto

lift_definition test2 :: "'a \ 'b \ ('a, 'b fset) fmap" is "\a b. fmupd a {b} fmempty"
  by auto

end

end

end

99%


¤ Dauer der Verarbeitung: 0.25 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.