doc-src/TutorialI/Sets/Functions.thy
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 10983 59961d32b1ae
child 16417 9bc16273c2d4
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10341
6eb91805a012 added the $Id:$ line
paulson
parents: 10294
diff changeset
     1
(* ID:         $Id$ *)
10294
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     2
theory Functions = Main:
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     3
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     4
ML "Pretty.setmargin 64"
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     5
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     6
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     7
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     8
@{thm[display] id_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
     9
\rulename{id_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    10
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    11
@{thm[display] o_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    12
\rulename{o_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    13
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    14
@{thm[display] o_assoc[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    15
\rulename{o_assoc}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    16
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    17
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    18
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    19
@{thm[display] fun_upd_apply[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    20
\rulename{fun_upd_apply}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    21
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    22
@{thm[display] fun_upd_upd[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    23
\rulename{fun_upd_upd}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    24
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    25
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    26
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    27
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    28
definitions of injective, surjective, bijective
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    29
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    30
@{thm[display] inj_on_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    31
\rulename{inj_on_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    32
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    33
@{thm[display] surj_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    34
\rulename{surj_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    35
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    36
@{thm[display] bij_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    37
\rulename{bij_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    38
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    39
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    40
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    41
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    42
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    43
possibly interesting theorems about inv
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    44
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    45
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    46
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    47
@{thm[display] inv_f_f[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    48
\rulename{inv_f_f}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    49
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    50
@{thm[display] inj_imp_surj_inv[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    51
\rulename{inj_imp_surj_inv}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    52
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    53
@{thm[display] surj_imp_inj_inv[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    54
\rulename{surj_imp_inj_inv}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    55
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    56
@{thm[display] surj_f_inv_f[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    57
\rulename{surj_f_inv_f}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    58
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    59
@{thm[display] bij_imp_bij_inv[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    60
\rulename{bij_imp_bij_inv}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    61
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    62
@{thm[display] inv_inv_eq[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    63
\rulename{inv_inv_eq}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    64
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    65
@{thm[display] o_inv_distrib[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    66
\rulename{o_inv_distrib}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    67
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    68
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    69
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    70
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    71
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    72
small sample proof
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    73
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    74
@{thm[display] ext[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    75
\rulename{ext}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    76
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    77
@{thm[display] expand_fun_eq[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    78
\rulename{expand_fun_eq}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    79
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    80
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    81
lemma "inj f \<Longrightarrow> (f o g = f o h) = (g = h)";
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10849
diff changeset
    82
  apply (simp add: expand_fun_eq inj_on_def)
10294
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    83
  apply (auto)
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    84
  done
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    85
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    86
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    87
\begin{isabelle}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    88
inj\ f\ \isasymLongrightarrow \ (f\ \isasymcirc \ g\ =\ f\ \isasymcirc \ h)\ =\ (g\ =\ h)\isanewline
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    89
\ 1.\ \isasymforall x\ y.\ f\ x\ =\ f\ y\ \isasymlongrightarrow \ x\ =\ y\ \isasymLongrightarrow \isanewline
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    90
\ \ \ \ (\isasymforall x.\ f\ (g\ x)\ =\ f\ (h\ x))\ =\ (\isasymforall x.\ g\ x\ =\ h\ x)
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    91
\end{isabelle}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    92
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    93
 
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    94
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    95
text{*image, inverse image*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    96
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    97
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    98
@{thm[display] image_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
    99
\rulename{image_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   100
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   101
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   102
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   103
@{thm[display] image_Un[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   104
\rulename{image_Un}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   105
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   106
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   107
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   108
@{thm[display] image_compose[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   109
\rulename{image_compose}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   110
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   111
@{thm[display] image_Int[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   112
\rulename{image_Int}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   113
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   114
@{thm[display] bij_image_Compl_eq[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   115
\rulename{bij_image_Compl_eq}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   116
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   117
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   118
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   119
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   120
illustrates Union as well as image
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   121
*}
10849
de981d0037ed now using "by" for one-line proofs
paulson
parents: 10839
diff changeset
   122
10839
1f93f5a27de6 *** empty log message ***
nipkow
parents: 10341
diff changeset
   123
lemma "f`A \<union> g`A = (\<Union>x\<in>A. {f x, g x})"
10849
de981d0037ed now using "by" for one-line proofs
paulson
parents: 10839
diff changeset
   124
by blast
10294
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   125
10839
1f93f5a27de6 *** empty log message ***
nipkow
parents: 10341
diff changeset
   126
lemma "f ` {(x,y). P x y} = {f(x,y) | x y. P x y}"
10849
de981d0037ed now using "by" for one-line proofs
paulson
parents: 10839
diff changeset
   127
by blast
10294
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   128
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   129
text{*actually a macro!*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   130
10839
1f93f5a27de6 *** empty log message ***
nipkow
parents: 10341
diff changeset
   131
lemma "range f = f`UNIV"
10849
de981d0037ed now using "by" for one-line proofs
paulson
parents: 10839
diff changeset
   132
by blast
10294
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   133
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   134
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   135
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   136
inverse image
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   137
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   138
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   139
text{*
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   140
@{thm[display] vimage_def[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   141
\rulename{vimage_def}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   142
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   143
@{thm[display] vimage_Compl[no_vars]}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   144
\rulename{vimage_Compl}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   145
*}
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   146
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   147
2ec9c808a8a7 the Sets chapter and theories
paulson
parents:
diff changeset
   148
end