src/ZF/Resid/Redex.thy
author paulson
Fri, 14 Jul 2000 13:57:00 +0200
changeset 9334 f0c2b71db81b
parent 9284 85a5355faa91
child 11319 8b84ee2cc79c
permissions -rw-r--r--
parent should be Main
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
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     2
    ID:         $Id$
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     3
    Author:     Ole Rasmussen
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     4
    Copyright   1995  University of Cambridge
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     5
    Logic Image: ZF
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     6
*)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     7
9334
f0c2b71db81b parent should be Main
paulson
parents: 9284
diff changeset
     8
Redex = Main +
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     9
consts
1401
0c439768f45c removed quotes from consts and syntax sections
clasohm
parents: 1155
diff changeset
    10
  redexes     :: i
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    11
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    12
datatype
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    13
  "redexes" = Var ("n: nat")            
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    14
            | Fun ("t: redexes")
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    15
            | App ("b:bool" ,"f:redexes" , "a:redexes")
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    16
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    17
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    18
consts
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    19
  Ssub,Scomp,Sreg  :: i
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    20
  "<==","~"        :: [i,i]=>o (infixl 70)
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    21
  un               :: [i,i]=>i (infixl 70)
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    22
  union_aux        :: i=>i
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    23
  regular          :: i=>o
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    24
  
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    25
translations
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    26
  "a<==b"        == "<a,b>:Ssub"
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    27
  "a ~ b"        == "<a,b>:Scomp"
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    28
  "regular(a)"   == "a:Sreg"
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    29
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    30
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    31
primrec (*explicit lambda is required because both arguments of "un" vary*)
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    32
  "union_aux(Var(n)) =
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    33
     (lam t:redexes. redexes_case(%j. Var(n), %x. 0, %b x y.0, t))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    34
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    35
  "union_aux(Fun(u)) =
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    36
     (lam t:redexes. redexes_case(%j. 0, %y. Fun(union_aux(u)`y),
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    37
	 			  %b y z. 0, t))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    38
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    39
  "union_aux(App(b,f,a)) =
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    40
     (lam t:redexes.
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    41
        redexes_case(%j. 0, %y. 0,
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6112
diff changeset
    42
		     %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
    43
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    44
defs
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    45
  union_def  "u un v == union_aux(u)`v"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    46
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    47
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    48
inductive
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    49
  domains       "Ssub" <= "redexes*redexes"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    50
  intrs
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    51
    Sub_Var     "n:nat ==> Var(n)<== Var(n)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    52
    Sub_Fun     "[|u<== v|]==> Fun(u)<== Fun(v)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    53
    Sub_App1    "[|u1<== v1; u2<== v2; b:bool|]==>   
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    54
                     App(0,u1,u2)<== App(b,v1,v2)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    55
    Sub_App2    "[|u1<== v1; u2<== v2|]==>   
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    56
                     App(1,u1,u2)<== App(1,v1,v2)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    57
  type_intrs    "redexes.intrs@bool_typechecks"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    58
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    59
inductive
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    60
  domains       "Scomp" <= "redexes*redexes"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    61
  intrs
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    62
    Comp_Var    "n:nat ==> Var(n) ~ Var(n)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    63
    Comp_Fun    "[|u ~ v|]==> Fun(u) ~ Fun(v)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    64
    Comp_App    "[|u1 ~ v1; u2 ~ v2; b1:bool; b2:bool|]==>   
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    65
                     App(b1,u1,u2) ~ App(b2,v1,v2)"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    66
  type_intrs    "redexes.intrs@bool_typechecks"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    67
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    68
inductive
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    69
  domains       "Sreg" <= "redexes"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    70
  intrs
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    71
    Reg_Var     "n:nat ==> regular(Var(n))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    72
    Reg_Fun     "[|regular(u)|]==> regular(Fun(u))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    73
    Reg_App1    "[|regular(Fun(u)); regular(v) 
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    74
                     |]==>regular(App(1,Fun(u),v))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    75
    Reg_App2    "[|regular(u); regular(v) 
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    76
                     |]==>regular(App(0,u,v))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    77
  type_intrs    "redexes.intrs@bool_typechecks"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    78
2c8a8be36c94 converted to use new primrec section
paulson
parents: 3840
diff changeset
    79
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    80
end
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    81