23 Int :: ['a set, 'a set] => 'a set (infixl 70) |
26 Int :: ['a set, 'a set] => 'a set (infixl 70) |
24 Un :: ['a set, 'a set] => 'a set (infixl 65) |
27 Un :: ['a set, 'a set] => 'a set (infixl 65) |
25 UNION, INTER :: ['a set, 'a => 'b set] => 'b set (*general*) |
28 UNION, INTER :: ['a set, 'a => 'b set] => 'b set (*general*) |
26 UNION1 :: ['a => 'b set] => 'b set (binder "UN " 10) |
29 UNION1 :: ['a => 'b set] => 'b set (binder "UN " 10) |
27 INTER1 :: ['a => 'b set] => 'b set (binder "INT " 10) |
30 INTER1 :: ['a => 'b set] => 'b set (binder "INT " 10) |
28 Union, Inter :: (('a set)set) => 'a set (*of a set*) |
31 Union, Inter :: (('a set) set) => 'a set (*of a set*) |
29 Pow :: 'a set => 'a set set (*powerset*) |
32 Pow :: 'a set => 'a set set (*powerset*) |
30 range :: ('a => 'b) => 'b set (*of function*) |
33 range :: ('a => 'b) => 'b set (*of function*) |
31 Ball, Bex :: ['a set, 'a => bool] => bool (*bounded quantifiers*) |
34 Ball, Bex :: ['a set, 'a => bool] => bool (*bounded quantifiers*) |
32 inj, surj :: ('a => 'b) => bool (*inj/surjective*) |
35 inj, surj :: ('a => 'b) => bool (*inj/surjective*) |
33 inj_onto :: ['a => 'b, 'a set] => bool |
36 inj_onto :: ['a => 'b, 'a set] => bool |
34 "``" :: ['a => 'b, 'a set] => ('b set) (infixr 90) |
37 "``" :: ['a => 'b, 'a set] => ('b set) (infixr 90) |
35 (*membership*) |
38 (*membership*) |
36 "op :" :: ['a, 'a set] => bool ("(_/ : _)" [50,51] 50) |
39 "op :" :: ['a, 'a set] => bool ("(_/ : _)" [50, 51] 50) |
37 |
40 |
|
41 |
|
42 |
|
43 (** Additional concrete syntax **) |
38 |
44 |
39 syntax |
45 syntax |
40 |
46 |
41 UNIV :: 'a set |
47 "op :" :: ['a, 'a set] => bool ("op :") |
42 |
48 |
43 (*infix synatx for non-membership*) |
49 UNIV :: 'a set |
44 "op ~:" :: ['a, 'a set] => bool ("(_/ ~: _)" [50,51] 50) |
|
45 |
50 |
46 "@Finset" :: args => 'a set ("{(_)}") |
51 (* Infix syntax for non-membership *) |
47 |
52 |
48 "@Coll" :: [pttrn, bool] => 'a set ("(1{_./ _})") |
53 "op ~:" :: ['a, 'a set] => bool ("(_/ ~: _)" [50, 51] 50) |
49 "@SetCompr" :: ['a, idts, bool] => 'a set ("(1{_ |/_./ _})") |
54 "op ~:" :: ['a, 'a set] => bool ("op ~:") |
|
55 |
|
56 "@Finset" :: args => 'a set ("{(_)}") |
|
57 |
|
58 "@Coll" :: [pttrn, bool] => 'a set ("(1{_./ _})") |
|
59 "@SetCompr" :: ['a, idts, bool] => 'a set ("(1{_ |/_./ _})") |
50 |
60 |
51 (* Big Intersection / Union *) |
61 (* Big Intersection / Union *) |
52 |
62 |
53 "@INTER" :: [pttrn, 'a set, 'b set] => 'b set ("(3INT _:_./ _)" 10) |
63 "@INTER" :: [pttrn, 'a set, 'b set] => 'b set ("(3INT _:_./ _)" 10) |
54 "@UNION" :: [pttrn, 'a set, 'b set] => 'b set ("(3UN _:_./ _)" 10) |
64 "@UNION" :: [pttrn, 'a set, 'b set] => 'b set ("(3UN _:_./ _)" 10) |
60 "*Ball" :: [pttrn, 'a set, bool] => bool ("(3ALL _:_./ _)" 10) |
70 "*Ball" :: [pttrn, 'a set, bool] => bool ("(3ALL _:_./ _)" 10) |
61 "*Bex" :: [pttrn, 'a set, bool] => bool ("(3EX _:_./ _)" 10) |
71 "*Bex" :: [pttrn, 'a set, bool] => bool ("(3EX _:_./ _)" 10) |
62 |
72 |
63 translations |
73 translations |
64 "UNIV" == "Compl {}" |
74 "UNIV" == "Compl {}" |
65 "range(f)" == "f``UNIV" |
75 "range f" == "f``UNIV" |
66 "x ~: y" == "~ (x : y)" |
76 "x ~: y" == "~ (x : y)" |
67 "{x, xs}" == "insert x {xs}" |
77 "{x, xs}" == "insert x {xs}" |
68 "{x}" == "insert x {}" |
78 "{x}" == "insert x {}" |
69 "{x. P}" == "Collect (%x. P)" |
79 "{x. P}" == "Collect (%x. P)" |
70 "INT x:A. B" == "INTER A (%x. B)" |
80 "INT x:A. B" == "INTER A (%x. B)" |
73 "? x:A. P" == "Bex A (%x. P)" |
83 "? x:A. P" == "Bex A (%x. P)" |
74 "ALL x:A. P" => "Ball A (%x. P)" |
84 "ALL x:A. P" => "Ball A (%x. P)" |
75 "EX x:A. P" => "Bex A (%x. P)" |
85 "EX x:A. P" => "Bex A (%x. P)" |
76 |
86 |
77 |
87 |
|
88 syntax (symbols) |
|
89 "op Int" :: ['a set, 'a set] => 'a set (infixl "\\<inter>" 70) |
|
90 "op Un" :: ['a set, 'a set] => 'a set (infixl "\\<union>" 65) |
|
91 "op :" :: ['a, 'a set] => bool ("(_/ \\<in> _)" [50, 51] 50) |
|
92 "op :" :: ['a, 'a set] => bool ("op \\<in>") |
|
93 "op ~:" :: ['a, 'a set] => bool ("(_/ \\<notin> _)" [50, 51] 50) |
|
94 "op ~:" :: ['a, 'a set] => bool ("op \\<notin>") |
|
95 "UN " :: [idts, bool] => bool ("(3\\<Union> _./ _)" 10) |
|
96 "INT " :: [idts, bool] => bool ("(3\\<Inter> _./ _)" 10) |
|
97 "@UNION" :: [pttrn, 'a set, 'b set] => 'b set ("(3\\<Union> _\\<in>_./ _)" 10) |
|
98 "@INTER" :: [pttrn, 'a set, 'b set] => 'b set ("(3\\<Inter> _\\<in>_./ _)" 10) |
|
99 Union :: (('a set) set) => 'a set ("\\<Union> _" [90] 90) |
|
100 Inter :: (('a set) set) => 'a set ("\\<Inter> _" [90] 90) |
|
101 "@Ball" :: [pttrn, 'a set, bool] => bool ("(3\\<forall> _\\<in>_./ _)" 10) |
|
102 "@Bex" :: [pttrn, 'a set, bool] => bool ("(3\\<exists> _\\<in>_./ _)" 10) |
|
103 "*Ball" :: [pttrn, 'a set, bool] => bool ("(3\\<forall> _\\<in>_./ _)" 10) |
|
104 "*Bex" :: [pttrn, 'a set, bool] => bool ("(3\\<exists> _\\<in>_./ _)" 10) |
|
105 |
|
106 |
|
107 |
|
108 (** Rules and definitions **) |
|
109 |
78 rules |
110 rules |
79 |
111 |
80 (* Isomorphisms between Predicates and Sets *) |
112 (* Isomorphisms between Predicates and Sets *) |
81 |
113 |
82 mem_Collect_eq "(a : {x.P(x)}) = P(a)" |
114 mem_Collect_eq "(a : {x.P(x)}) = P(a)" |
83 Collect_mem_eq "{x.x:A} = A" |
115 Collect_mem_eq "{x.x:A} = A" |
84 |
116 |
85 |
117 |
86 defs |
118 defs |
|
119 |
87 Ball_def "Ball A P == ! x. x:A --> P(x)" |
120 Ball_def "Ball A P == ! x. x:A --> P(x)" |
88 Bex_def "Bex A P == ? x. x:A & P(x)" |
121 Bex_def "Bex A P == ? x. x:A & P(x)" |
89 subset_def "A <= B == ! x:A. x:B" |
122 subset_def "A <= B == ! x:A. x:B" |
90 Compl_def "Compl(A) == {x. ~x:A}" |
123 Compl_def "Compl(A) == {x. ~x:A}" |
91 Un_def "A Un B == {x.x:A | x:B}" |
124 Un_def "A Un B == {x.x:A | x:B}" |