src/CCL/Trancl.thy
author nipkow
Tue, 05 Nov 2019 14:57:41 +0100
changeset 71033 c1b63124245c
parent 62020 5d208fd2507d
child 74445 63a697f1fb8f
permissions -rw-r--r--
tuned
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
     1
(*  Title:      CCL/Trancl.thy
1474
3f7d67927fe2 expanded tabs
clasohm
parents: 0
diff changeset
     2
    Author:     Martin Coen, Cambridge University Computer Laboratory
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
     6
section \<open>Transitive closure of a relation\<close>
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
     7
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
     8
theory Trancl
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
     9
imports CCL
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
    10
begin
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    12
definition trans :: "i set \<Rightarrow> o"  (*transitivity predicate*)
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    13
  where "trans(r) == (ALL x y z. <x,y>:r \<longrightarrow> <y,z>:r \<longrightarrow> <x,z>:r)"
42156
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    14
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    15
definition id :: "i set"  (*the identity relation*)
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    16
  where "id == {p. EX x. p = <x,x>}"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    18
definition relcomp :: "[i set,i set] \<Rightarrow> i set"  (infixr "O" 60)  (*composition of relations*)
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    19
  where "r O s == {xz. EX x y z. xz = <x,z> \<and> <x,y>:s \<and> <y,z>:r}"
42156
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    20
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    21
definition rtrancl :: "i set \<Rightarrow> i set"  ("(_^*)" [100] 100)
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    22
  where "r^* == lfp(\<lambda>s. id Un (r O s))"
42156
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    23
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    24
definition trancl :: "i set \<Rightarrow> i set"  ("(_^+)" [100] 100)
42156
df219e736a5d modernized specifications -- less axioms;
wenzelm
parents: 32153
diff changeset
    25
  where "r^+ == r O rtrancl(r)"
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 1474
diff changeset
    26
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    27
62020
5d208fd2507d isabelle update_cartouches -c -t;
wenzelm
parents: 60770
diff changeset
    28
subsection \<open>Natural deduction for \<open>trans(r)\<close>\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    29
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    30
lemma transI: "(\<And>x y z. \<lbrakk><x,y>:r; <y,z>:r\<rbrakk> \<Longrightarrow> <x,z>:r) \<Longrightarrow> trans(r)"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    31
  unfolding trans_def by blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    32
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    33
lemma transD: "\<lbrakk>trans(r); <a,b>:r; <b,c>:r\<rbrakk> \<Longrightarrow> <a,c>:r"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    34
  unfolding trans_def by blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    35
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    36
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
    37
subsection \<open>Identity relation\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    38
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    39
lemma idI: "<a,a> : id"
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    40
  apply (unfold id_def)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    41
  apply (rule CollectI)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    42
  apply (rule exI)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    43
  apply (rule refl)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    44
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    45
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    46
lemma idE: "\<lbrakk>p: id;  \<And>x. p = <x,x> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    47
  apply (unfold id_def)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    48
  apply (erule CollectE)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    49
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    50
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    51
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    52
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
    53
subsection \<open>Composition of two relations\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    54
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    55
lemma compI: "\<lbrakk><a,b>:s; <b,c>:r\<rbrakk> \<Longrightarrow> <a,c> : r O s"
24825
c4f13ab78f9d avoid unnamed infixes;
wenzelm
parents: 20140
diff changeset
    56
  unfolding relcomp_def by blast
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    57
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    58
(*proof requires higher-level assumptions or a delaying of hyp_subst_tac*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    59
lemma compE: "\<lbrakk>xz : r O s; \<And>x y z. \<lbrakk>xz = <x,z>; <x,y>:s; <y,z>:r\<rbrakk> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
24825
c4f13ab78f9d avoid unnamed infixes;
wenzelm
parents: 20140
diff changeset
    60
  unfolding relcomp_def by blast
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    61
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    62
lemma compEpair: "\<lbrakk><a,c> : r O s; \<And>y. \<lbrakk><a,y>:s; <y,c>:r\<rbrakk> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    63
  apply (erule compE)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    64
  apply (simp add: pair_inject)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    65
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    66
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    67
lemmas [intro] = compI idI
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    68
  and [elim] = compE idE
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    69
  and [elim!] = pair_inject
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    70
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    71
lemma comp_mono: "\<lbrakk>r'<=r; s'<=s\<rbrakk> \<Longrightarrow> (r' O s') <= (r O s)"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    72
  by blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    73
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    74
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
    75
subsection \<open>The relation rtrancl\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    76
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    77
lemma rtrancl_fun_mono: "mono(\<lambda>s. id Un (r O s))"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    78
  apply (rule monoI)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    79
  apply (rule monoI subset_refl comp_mono Un_mono)+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    80
  apply assumption
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    81
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    82
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    83
lemma rtrancl_unfold: "r^* = id Un (r O r^*)"
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    84
  by (rule rtrancl_fun_mono [THEN rtrancl_def [THEN def_lfp_Tarski]])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    85
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    86
(*Reflexivity of rtrancl*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    87
lemma rtrancl_refl: "<a,a> : r^*"
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    88
  apply (subst rtrancl_unfold)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    89
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    90
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    91
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    92
(*Closure under composition with r*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    93
lemma rtrancl_into_rtrancl: "\<lbrakk><a,b> : r^*; <b,c> : r\<rbrakk> \<Longrightarrow> <a,c> : r^*"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    94
  apply (subst rtrancl_unfold)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    95
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    96
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    97
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
    98
(*rtrancl of r contains r*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
    99
lemma r_into_rtrancl: "<a,b> : r \<Longrightarrow> <a,b> : r^*"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   100
  apply (rule rtrancl_refl [THEN rtrancl_into_rtrancl])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   101
  apply assumption
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   102
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   103
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   104
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
   105
subsection \<open>standard induction rule\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   106
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   107
lemma rtrancl_full_induct:
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   108
  "\<lbrakk><a,b> : r^*;
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   109
      \<And>x. P(<x,x>);
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   110
      \<And>x y z. \<lbrakk>P(<x,y>); <x,y>: r^*; <y,z>: r\<rbrakk>  \<Longrightarrow> P(<x,z>)\<rbrakk>
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   111
   \<Longrightarrow>  P(<a,b>)"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   112
  apply (erule def_induct [OF rtrancl_def])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   113
   apply (rule rtrancl_fun_mono)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   114
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   115
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   116
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   117
(*nice induction rule*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   118
lemma rtrancl_induct:
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   119
  "\<lbrakk><a,b> : r^*;
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   120
      P(a);
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   121
      \<And>y z. \<lbrakk><a,y> : r^*; <y,z> : r;  P(y)\<rbrakk> \<Longrightarrow> P(z) \<rbrakk>
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   122
    \<Longrightarrow> P(b)"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   123
(*by induction on this formula*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   124
  apply (subgoal_tac "ALL y. <a,b> = <a,y> \<longrightarrow> P(y)")
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   125
(*now solve first subgoal: this formula is sufficient*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   126
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   127
(*now do the induction*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   128
  apply (erule rtrancl_full_induct)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   129
   apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   130
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   131
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   132
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   133
(*transitivity of transitive closure!! -- by induction.*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   134
lemma trans_rtrancl: "trans(r^*)"
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   135
  apply (rule transI)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   136
  apply (rule_tac b = z in rtrancl_induct)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   137
    apply (fast elim: rtrancl_into_rtrancl)+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   138
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   139
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   140
(*elimination of rtrancl -- by induction on a special formula*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   141
lemma rtranclE:
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   142
  "\<lbrakk><a,b> : r^*; a = b \<Longrightarrow> P; \<And>y. \<lbrakk><a,y> : r^*; <y,b> : r\<rbrakk> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   143
  apply (subgoal_tac "a = b | (EX y. <a,y> : r^* \<and> <y,b> : r)")
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   144
   prefer 2
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   145
   apply (erule rtrancl_induct)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   146
    apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   147
   apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   148
  apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   149
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   150
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   151
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
   152
subsection \<open>The relation trancl\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   153
60770
240563fbf41d isabelle update_cartouches;
wenzelm
parents: 58977
diff changeset
   154
subsubsection \<open>Conversions between trancl and rtrancl\<close>
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   155
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   156
lemma trancl_into_rtrancl: "<a,b> : r^+ \<Longrightarrow> <a,b> : r^*"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   157
  apply (unfold trancl_def)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   158
  apply (erule compEpair)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   159
  apply (erule rtrancl_into_rtrancl)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   160
  apply assumption
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   161
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   162
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   163
(*r^+ contains r*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   164
lemma r_into_trancl: "<a,b> : r \<Longrightarrow> <a,b> : r^+"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   165
  unfolding trancl_def by (blast intro: rtrancl_refl)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   166
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   167
(*intro rule by definition: from rtrancl and r*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   168
lemma rtrancl_into_trancl1: "\<lbrakk><a,b> : r^*; <b,c> : r\<rbrakk> \<Longrightarrow> <a,c> : r^+"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   169
  unfolding trancl_def by blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   170
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   171
(*intro rule from r and rtrancl*)
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   172
lemma rtrancl_into_trancl2: "\<lbrakk><a,b> : r; <b,c> : r^*\<rbrakk> \<Longrightarrow> <a,c> : r^+"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   173
  apply (erule rtranclE)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   174
   apply (erule subst)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   175
   apply (erule r_into_trancl)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   176
  apply (rule trans_rtrancl [THEN transD, THEN rtrancl_into_trancl1])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   177
    apply (assumption | rule r_into_rtrancl)+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   178
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   179
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   180
(*elimination of r^+ -- NOT an induction rule*)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   181
lemma tranclE:
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   182
  "\<lbrakk><a,b> : r^+;
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   183
    <a,b> : r \<Longrightarrow> P;
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   184
    \<And>y. \<lbrakk><a,y> : r^+; <y,b> : r\<rbrakk> \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   185
  apply (subgoal_tac "<a,b> : r | (EX y. <a,y> : r^+ \<and> <y,b> : r)")
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   186
   apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   187
  apply (unfold trancl_def)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   188
  apply (erule compEpair)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   189
  apply (erule rtranclE)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   190
   apply blast
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   191
  apply (blast intro!: rtrancl_into_trancl1)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   192
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   193
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   194
(*Transitivity of r^+.
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   195
  Proved by unfolding since it uses transitivity of rtrancl. *)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   196
lemma trans_trancl: "trans(r^+)"
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   197
  apply (unfold trancl_def)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   198
  apply (rule transI)
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   199
  apply (erule compEpair)+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   200
  apply (erule rtrancl_into_rtrancl [THEN trans_rtrancl [THEN transD, THEN compI]])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   201
    apply assumption+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   202
  done
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   203
58977
9576b510f6a2 more symbols;
wenzelm
parents: 58889
diff changeset
   204
lemma trancl_into_trancl2: "\<lbrakk><a,b> : r; <b,c> : r^+\<rbrakk> \<Longrightarrow> <a,c> : r^+"
20140
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   205
  apply (rule r_into_trancl [THEN trans_trancl [THEN transD]])
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   206
   apply assumption+
98acc6d0fab6 removed obsolete ML files;
wenzelm
parents: 17456
diff changeset
   207
  done
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   208
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   209
end