doc-src/TutorialI/Sets/Relations.thy
author paulson
Wed, 07 Feb 2001 16:37:24 +0100
changeset 11080 22855d091249
parent 10864 f0b0a125ae4b
child 11330 8ee6ed16ea45
permissions -rw-r--r--
various revisions in response to comments from Tobias
paulson@10341
     1
(* ID:         $Id$ *)
paulson@10294
     2
theory Relations = Main:
paulson@10294
     3
paulson@10294
     4
ML "Pretty.setmargin 64"
paulson@10294
     5
paulson@10294
     6
(*Id is only used in UNITY*)
paulson@10294
     7
(*refl, antisym,trans,univalent,\<dots> ho hum*)
paulson@10294
     8
paulson@10294
     9
text{*
paulson@10864
    10
@{thm[display] Id_def[no_vars]}
paulson@10294
    11
\rulename{Id_def}
paulson@10294
    12
*}
paulson@10294
    13
paulson@10294
    14
text{*
paulson@10864
    15
@{thm[display] comp_def[no_vars]}
paulson@10294
    16
\rulename{comp_def}
paulson@10294
    17
*}
paulson@10294
    18
paulson@10294
    19
text{*
paulson@10864
    20
@{thm[display] R_O_Id[no_vars]}
paulson@10294
    21
\rulename{R_O_Id}
paulson@10294
    22
*}
paulson@10294
    23
paulson@10294
    24
text{*
paulson@10864
    25
@{thm[display] comp_mono[no_vars]}
paulson@10294
    26
\rulename{comp_mono}
paulson@10294
    27
*}
paulson@10294
    28
paulson@10294
    29
text{*
paulson@10864
    30
@{thm[display] converse_iff[no_vars]}
paulson@10294
    31
\rulename{converse_iff}
paulson@10294
    32
*}
paulson@10294
    33
paulson@10294
    34
text{*
paulson@10864
    35
@{thm[display] converse_comp[no_vars]}
paulson@10294
    36
\rulename{converse_comp}
paulson@10294
    37
*}
paulson@10294
    38
paulson@10294
    39
text{*
paulson@10864
    40
@{thm[display] Image_iff[no_vars]}
paulson@10294
    41
\rulename{Image_iff}
paulson@10294
    42
*}
paulson@10294
    43
paulson@10294
    44
text{*
paulson@10864
    45
@{thm[display] Image_UN[no_vars]}
paulson@10294
    46
\rulename{Image_UN}
paulson@10294
    47
*}
paulson@10294
    48
paulson@10294
    49
text{*
paulson@10864
    50
@{thm[display] Domain_iff[no_vars]}
paulson@10294
    51
\rulename{Domain_iff}
paulson@10294
    52
*}
paulson@10294
    53
paulson@10294
    54
text{*
paulson@10864
    55
@{thm[display] Range_iff[no_vars]}
paulson@10294
    56
\rulename{Range_iff}
paulson@10294
    57
*}
paulson@10294
    58
paulson@10294
    59
text{*
paulson@10864
    60
@{thm[display] relpow.simps[no_vars]}
paulson@10294
    61
\rulename{relpow.simps}
paulson@10294
    62
paulson@10864
    63
@{thm[display] rtrancl_unfold[no_vars]}
paulson@10294
    64
\rulename{rtrancl_unfold}
paulson@10294
    65
paulson@10864
    66
@{thm[display] rtrancl_refl[no_vars]}
paulson@10294
    67
\rulename{rtrancl_refl}
paulson@10294
    68
paulson@10864
    69
@{thm[display] r_into_rtrancl[no_vars]}
paulson@10294
    70
\rulename{r_into_rtrancl}
paulson@10294
    71
paulson@10864
    72
@{thm[display] rtrancl_trans[no_vars]}
paulson@10294
    73
\rulename{rtrancl_trans}
paulson@10294
    74
paulson@10864
    75
@{thm[display] rtrancl_induct[no_vars]}
paulson@10294
    76
\rulename{rtrancl_induct}
paulson@10294
    77
paulson@10864
    78
@{thm[display] rtrancl_idemp[no_vars]}
paulson@10294
    79
\rulename{rtrancl_idemp}
paulson@10294
    80
paulson@10864
    81
@{thm[display] r_into_trancl[no_vars]}
paulson@10294
    82
\rulename{r_into_trancl}
paulson@10294
    83
paulson@10864
    84
@{thm[display] trancl_trans[no_vars]}
paulson@10294
    85
\rulename{trancl_trans}
paulson@10294
    86
paulson@10864
    87
@{thm[display] trancl_into_rtrancl[no_vars]}
paulson@10294
    88
\rulename{trancl_into_rtrancl}
paulson@10294
    89
paulson@10864
    90
@{thm[display] trancl_converse[no_vars]}
paulson@10294
    91
\rulename{trancl_converse}
paulson@10294
    92
*}
paulson@10294
    93
paulson@10294
    94
text{*Relations.  transitive closure*}
paulson@10294
    95
paulson@11080
    96
lemma rtrancl_converseD: "(x,y) \<in> (r\<inverse>)\<^sup>* \<Longrightarrow> (y,x) \<in> r\<^sup>*"
paulson@10864
    97
apply (erule rtrancl_induct)
paulson@10864
    98
txt{*
paulson@10864
    99
@{subgoals[display,indent=0,margin=65]}
paulson@10864
   100
*};
paulson@10864
   101
 apply (rule rtrancl_refl)
paulson@11080
   102
apply (blast intro: rtrancl_trans)
paulson@10864
   103
done
paulson@10294
   104
paulson@10294
   105
paulson@11080
   106
lemma rtrancl_converseI: "(y,x) \<in> r\<^sup>* \<Longrightarrow> (x,y) \<in> (r\<inverse>)\<^sup>*"
paulson@10864
   107
apply (erule rtrancl_induct)
paulson@10864
   108
 apply (rule rtrancl_refl)
paulson@11080
   109
apply (blast intro: rtrancl_trans)
paulson@10864
   110
done
paulson@10294
   111
paulson@11080
   112
lemma rtrancl_converse: "(r\<inverse>)\<^sup>* = (r\<^sup>*)\<inverse>"
paulson@10864
   113
by (auto intro: rtrancl_converseI dest: rtrancl_converseD)
paulson@10294
   114
paulson@11080
   115
lemma rtrancl_converse: "(r\<inverse>)\<^sup>* = (r\<^sup>*)\<inverse>"
paulson@10864
   116
apply (intro equalityI subsetI)
paulson@10864
   117
txt{*
paulson@10864
   118
after intro rules
paulson@10294
   119
paulson@10864
   120
@{subgoals[display,indent=0,margin=65]}
paulson@10864
   121
*};
paulson@10864
   122
apply clarify
paulson@10864
   123
txt{*
paulson@10864
   124
after splitting
paulson@10864
   125
@{subgoals[display,indent=0,margin=65]}
paulson@10864
   126
*};
paulson@10864
   127
oops
paulson@10294
   128
paulson@10294
   129
paulson@10864
   130
lemma "(\<forall>u v. (u,v) \<in> A \<longrightarrow> u=v) \<Longrightarrow> A \<subseteq> Id"
paulson@10864
   131
apply (rule subsetI)
paulson@10864
   132
txt{*
paulson@10864
   133
@{subgoals[display,indent=0,margin=65]}
paulson@10294
   134
paulson@10864
   135
after subsetI
paulson@10864
   136
*};
paulson@10864
   137
apply clarify
paulson@10864
   138
txt{*
paulson@10864
   139
@{subgoals[display,indent=0,margin=65]}
paulson@10864
   140
paulson@10864
   141
subgoals after clarify
paulson@10864
   142
*};
paulson@10864
   143
by blast
paulson@10864
   144
paulson@10864
   145
paulson@10294
   146
paulson@10294
   147
paulson@10294
   148
text{*rejects*}
paulson@10294
   149
paulson@10294
   150
lemma "(a \<in> {z. P z} \<union> {y. Q y}) = P a \<or> Q a"
paulson@10864
   151
apply (blast)
paulson@10864
   152
done
paulson@10294
   153
paulson@10294
   154
text{*Pow, Inter too little used*}
paulson@10294
   155
paulson@10294
   156
lemma "(A \<subset> B) = (A \<subseteq> B \<and> A \<noteq> B)"
paulson@10864
   157
apply (simp add: psubset_def)
paulson@10864
   158
done
paulson@10294
   159
paulson@10294
   160
end