src/ZF/Resid/Redex.thy
author wenzelm
Fri, 19 May 2017 18:10:19 +0200
changeset 65875 12c90c0c4b32
parent 65449 c82e63b11b8b
child 69587 53982d5ec0bb
permissions -rw-r--r--
suppress ANSI control sequences in Scala console;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
     1
(*  Title:      ZF/Resid/Redex.thy
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 22808
diff changeset
     2
    Author:     Ole Rasmussen, University of Cambridge
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     3
*)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     4
65449
c82e63b11b8b clarified main ZF.thy / ZFC.thy, and avoid name clash with global HOL/Main.thy;
wenzelm
parents: 61398
diff changeset
     5
theory Redex imports ZF begin
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     6
consts
1401
0c439768f45c removed quotes from consts and syntax sections
clasohm
parents: 1155
diff changeset
     7
  redexes     :: i
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     8
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     9
datatype
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    10
  "redexes" = Var ("n \<in> nat")            
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    11
            | Fun ("t \<in> redexes")
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 12610
diff changeset
    12
            | App ("b \<in> bool","f \<in> redexes", "a \<in> redexes")
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    13
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    14
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    15
consts
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    16
  Ssub  :: "i"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    17
  Scomp :: "i"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    18
  Sreg  :: "i"
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    19
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    20
abbreviation
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    21
  Ssub_rel  (infixl "\<Longleftarrow>" 70) where
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    22
  "a \<Longleftarrow> b == <a,b> \<in> Ssub"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    23
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    24
abbreviation
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    25
  Scomp_rel  (infixl "\<sim>" 70) where
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    26
  "a \<sim> b == <a,b> \<in> Scomp"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    27
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    28
abbreviation
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    29
  "regular(a) == a \<in> Sreg"
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    30
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    31
consts union_aux        :: "i=>i"
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    32
primrec (*explicit lambda is required because both arguments of "\<squnion>" vary*)
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    33
  "union_aux(Var(n)) =
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    34
     (\<lambda>t \<in> redexes. redexes_case(%j. Var(n), %x. 0, %b x y.0, t))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    35
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    36
  "union_aux(Fun(u)) =
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    37
     (\<lambda>t \<in> redexes. redexes_case(%j. 0, %y. Fun(union_aux(u)`y),
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 22808
diff changeset
    38
                                  %b y z. 0, t))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    39
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    40
  "union_aux(App(b,f,a)) =
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    41
     (\<lambda>t \<in> redexes.
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    42
        redexes_case(%j. 0, %y. 0,
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 22808
diff changeset
    43
                     %c z u. App(b or c, union_aux(f)`z, union_aux(a)`u), t))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    44
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    45
definition
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    46
  union  (infixl "\<squnion>" 70) where
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    47
  "u \<squnion> v == union_aux(u)`v"
22808
a7daa74e2980 eliminated unnamed infixes, tuned syntax;
wenzelm
parents: 16417
diff changeset
    48
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    49
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    50
inductive
46823
57bf0cecb366 More mathematical symbols for ZF examples
paulson
parents: 32960
diff changeset
    51
  domains       "Ssub" \<subseteq> "redexes*redexes"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    52
  intros
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    53
    Sub_Var:     "n \<in> nat ==> Var(n) \<Longleftarrow> Var(n)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    54
    Sub_Fun:     "[|u \<Longleftarrow> v|]==> Fun(u) \<Longleftarrow> Fun(v)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    55
    Sub_App1:    "[|u1 \<Longleftarrow> v1; u2 \<Longleftarrow> v2; b \<in> bool|]==>   
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    56
                     App(0,u1,u2) \<Longleftarrow> App(b,v1,v2)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    57
    Sub_App2:    "[|u1 \<Longleftarrow> v1; u2 \<Longleftarrow> v2|]==> App(1,u1,u2) \<Longleftarrow> App(1,v1,v2)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    58
  type_intros    redexes.intros bool_typechecks
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    59
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    60
inductive
46823
57bf0cecb366 More mathematical symbols for ZF examples
paulson
parents: 32960
diff changeset
    61
  domains       "Scomp" \<subseteq> "redexes*redexes"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    62
  intros
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    63
    Comp_Var:    "n \<in> nat ==> Var(n) \<sim> Var(n)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    64
    Comp_Fun:    "[|u \<sim> v|]==> Fun(u) \<sim> Fun(v)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    65
    Comp_App:    "[|u1 \<sim> v1; u2 \<sim> v2; b1 \<in> bool; b2 \<in> bool|]
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    66
                  ==> App(b1,u1,u2) \<sim> App(b2,v1,v2)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    67
  type_intros    redexes.intros bool_typechecks
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    68
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    69
inductive
46823
57bf0cecb366 More mathematical symbols for ZF examples
paulson
parents: 32960
diff changeset
    70
  domains       "Sreg" \<subseteq> redexes
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    71
  intros
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    72
    Reg_Var:     "n \<in> nat ==> regular(Var(n))"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    73
    Reg_Fun:     "[|regular(u)|]==> regular(Fun(u))"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    74
    Reg_App1:    "[|regular(Fun(u)); regular(v) |]==>regular(App(1,Fun(u),v))"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    75
    Reg_App2:    "[|regular(u); regular(v) |]==>regular(App(0,u,v))"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    76
  type_intros    redexes.intros bool_typechecks
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    77
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    78
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    79
declare redexes.intros [simp]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    80
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    81
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    82
(*    Specialisation of comp-rules                                           *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    83
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    84
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    85
lemmas compD1 [simp] = Scomp.dom_subset [THEN subsetD, THEN SigmaD1]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    86
lemmas compD2 [simp] = Scomp.dom_subset [THEN subsetD, THEN SigmaD2]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    87
lemmas regD [simp] = Sreg.dom_subset [THEN subsetD]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    88
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    89
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    90
(*    Equality rules for union                                               *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    91
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    92
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    93
lemma union_Var [simp]: "n \<in> nat ==> Var(n) \<squnion> Var(n)=Var(n)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    94
by (simp add: union_def)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    95
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
    96
lemma union_Fun [simp]: "v \<in> redexes ==> Fun(u) \<squnion> Fun(v) = Fun(u \<squnion> v)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    97
by (simp add: union_def)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    98
 
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
    99
lemma union_App [simp]:
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   100
     "[|b2 \<in> bool; u2 \<in> redexes; v2 \<in> redexes|]
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   101
      ==> App(b1,u1,v1) \<squnion> App(b2,u2,v2)=App(b1 or b2,u1 \<squnion> u2,v1 \<squnion> v2)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   102
by (simp add: union_def)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   103
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   104
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   105
lemma or_1_right [simp]: "a or 1 = 1"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   106
by (simp add: or_def cond_def) 
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   107
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   108
lemma or_0_right [simp]: "a \<in> bool \<Longrightarrow> a or 0 = a"
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   109
by (simp add: or_def cond_def bool_def, auto) 
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   110
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   111
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   112
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   113
declare Ssub.intros [simp]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   114
declare bool_typechecks [simp]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   115
declare Sreg.intros [simp]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   116
declare Scomp.intros [simp]
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   117
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   118
declare Scomp.intros [intro]
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
   119
12610
8b9845807f77 tuned document sources;
wenzelm
parents: 12593
diff changeset
   120
inductive_cases [elim!]:
8b9845807f77 tuned document sources;
wenzelm
parents: 12593
diff changeset
   121
  "regular(App(b,f,a))"
8b9845807f77 tuned document sources;
wenzelm
parents: 12593
diff changeset
   122
  "regular(Fun(b))"
8b9845807f77 tuned document sources;
wenzelm
parents: 12593
diff changeset
   123
  "regular(Var(b))"
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   124
  "Fun(u) \<sim> Fun(t)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   125
  "u \<sim> Fun(t)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   126
  "u \<sim> Var(n)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   127
  "u \<sim> App(b,t,a)"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   128
  "Fun(t) \<sim> v"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   129
  "App(b,f,a) \<sim> v"
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   130
  "Var(n) \<sim> u"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   131
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   132
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   133
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   134
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   135
(*    comp proofs                                                            *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   136
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   137
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   138
lemma comp_refl [simp]: "u \<in> redexes ==> u \<sim> u"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   139
by (erule redexes.induct, blast+)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   140
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   141
lemma comp_sym: "u \<sim> v ==> v \<sim> u"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   142
by (erule Scomp.induct, blast+)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   143
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   144
lemma comp_sym_iff: "u \<sim> v \<longleftrightarrow> v \<sim> u"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   145
by (blast intro: comp_sym)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   146
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   147
lemma comp_trans [rule_format]: "u \<sim> v ==> \<forall>w. v \<sim> w\<longrightarrow>u \<sim> w"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   148
by (erule Scomp.induct, blast+)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   149
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   150
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   151
(*   union proofs                                                            *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   152
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   153
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   154
lemma union_l: "u \<sim> v \<Longrightarrow> u \<Longleftarrow> (u \<squnion> v)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   155
apply (erule Scomp.induct)
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 12610
diff changeset
   156
apply (erule_tac [3] boolE, simp_all)
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   157
done
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   158
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   159
lemma union_r: "u \<sim> v \<Longrightarrow> v \<Longleftarrow> (u \<squnion> v)"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   160
apply (erule Scomp.induct)
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 12610
diff changeset
   161
apply (erule_tac [3] c = b2 in boolE, simp_all)
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   162
done
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   163
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   164
lemma union_sym: "u \<sim> v \<Longrightarrow> u \<squnion> v = v \<squnion> u"
12593
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   165
by (erule Scomp.induct, simp_all add: or_commute)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   166
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   167
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   168
(*      regular proofs                                                       *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   169
(* ------------------------------------------------------------------------- *)
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   170
cd35fe5947d4 Resid converted to Isar/ZF
paulson
parents: 11319
diff changeset
   171
lemma union_preserve_regular [rule_format]:
61398
6794de675568 tuned syntax -- more symbols;
wenzelm
parents: 46823
diff changeset
   172
     "u \<sim> v \<Longrightarrow> regular(u) \<longrightarrow> regular(v) \<longrightarrow> regular(u \<squnion> v)"
13612
55d32e76ef4e Adapted to new simplifier.
berghofe
parents: 13339
diff changeset
   173
  by (erule Scomp.induct, auto)
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
   174
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
   175
end
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
   176