src/HOL/Library/FuncSet.thy
changeset 80914 d97fdabd9e2b
parent 80790 07c51801c2ea
child 81135 d90869a85f60
equal deleted inserted replaced
80913:46f59511b7bb 80914:d97fdabd9e2b
    17   where "extensional A = {f. \<forall>x. x \<notin> A \<longrightarrow> f x = undefined}"
    17   where "extensional A = {f. \<forall>x. x \<notin> A \<longrightarrow> f x = undefined}"
    18 
    18 
    19 definition "restrict" :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a set \<Rightarrow> 'a \<Rightarrow> 'b"
    19 definition "restrict" :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a set \<Rightarrow> 'a \<Rightarrow> 'b"
    20   where "restrict f A = (\<lambda>x. if x \<in> A then f x else undefined)"
    20   where "restrict f A = (\<lambda>x. if x \<in> A then f x else undefined)"
    21 
    21 
    22 abbreviation funcset :: "'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  (infixr "\<rightarrow>" 60)
    22 abbreviation funcset :: "'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  (infixr \<open>\<rightarrow>\<close> 60)
    23   where "A \<rightarrow> B \<equiv> Pi A (\<lambda>_. B)"
    23   where "A \<rightarrow> B \<equiv> Pi A (\<lambda>_. B)"
    24 
    24 
    25 syntax
    25 syntax
    26   "_Pi" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  ("(3\<Pi> _\<in>_./ _)"   10)
    26   "_Pi" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  (\<open>(3\<Pi> _\<in>_./ _)\<close>   10)
    27   "_lam" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b)"  ("(3\<lambda>_\<in>_./ _)" [0,0,3] 3)
    27   "_lam" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b)"  (\<open>(3\<lambda>_\<in>_./ _)\<close> [0,0,3] 3)
    28 syntax_consts
    28 syntax_consts
    29   "_Pi" \<rightleftharpoons> Pi and
    29   "_Pi" \<rightleftharpoons> Pi and
    30   "_lam" \<rightleftharpoons> restrict
    30   "_lam" \<rightleftharpoons> restrict
    31 translations
    31 translations
    32   "\<Pi> x\<in>A. B" \<rightleftharpoons> "CONST Pi A (\<lambda>x. B)"
    32   "\<Pi> x\<in>A. B" \<rightleftharpoons> "CONST Pi A (\<lambda>x. B)"
   343   where "PiE S T = Pi S T \<inter> extensional S"
   343   where "PiE S T = Pi S T \<inter> extensional S"
   344 
   344 
   345 abbreviation "Pi\<^sub>E A B \<equiv> PiE A B"
   345 abbreviation "Pi\<^sub>E A B \<equiv> PiE A B"
   346 
   346 
   347 syntax
   347 syntax
   348   "_PiE" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  ("(3\<Pi>\<^sub>E _\<in>_./ _)" 10)
   348   "_PiE" :: "pttrn \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set"  (\<open>(3\<Pi>\<^sub>E _\<in>_./ _)\<close> 10)
   349 syntax_consts
   349 syntax_consts
   350   "_PiE" \<rightleftharpoons> Pi\<^sub>E
   350   "_PiE" \<rightleftharpoons> Pi\<^sub>E
   351 translations
   351 translations
   352   "\<Pi>\<^sub>E x\<in>A. B" \<rightleftharpoons> "CONST Pi\<^sub>E A (\<lambda>x. B)"
   352   "\<Pi>\<^sub>E x\<in>A. B" \<rightleftharpoons> "CONST Pi\<^sub>E A (\<lambda>x. B)"
   353 
   353 
   354 abbreviation extensional_funcset :: "'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set" (infixr "\<rightarrow>\<^sub>E" 60)
   354 abbreviation extensional_funcset :: "'a set \<Rightarrow> 'b set \<Rightarrow> ('a \<Rightarrow> 'b) set" (infixr \<open>\<rightarrow>\<^sub>E\<close> 60)
   355   where "A \<rightarrow>\<^sub>E B \<equiv> (\<Pi>\<^sub>E i\<in>A. B)"
   355   where "A \<rightarrow>\<^sub>E B \<equiv> (\<Pi>\<^sub>E i\<in>A. B)"
   356 
   356 
   357 lemma extensional_funcset_def: "extensional_funcset S T = (S \<rightarrow> T) \<inter> extensional S"
   357 lemma extensional_funcset_def: "extensional_funcset S T = (S \<rightarrow> T) \<inter> extensional S"
   358   by (simp add: PiE_def)
   358   by (simp add: PiE_def)
   359 
   359