equal
deleted
inserted
replaced
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 |