src/ZF/Resid/Substitution.thy
author paulson
Mon, 21 May 2001 14:51:46 +0200
changeset 11319 8b84ee2cc79c
parent 9284 85a5355faa91
child 12593 cd35fe5947d4
permissions -rw-r--r--
X-symbols for ZF
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6068
diff changeset
     1
(*  Title:      ZF/Resid/Substitution.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
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
     8
Substitution = Redex +
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     9
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    10
consts
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    11
  lift_aux  :: i=> i
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    12
  lift          :: i=> i
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    13
  subst_aux :: i=> i
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    14
  "'/"          :: [i,i]=>i  (infixl 70)  (*subst*)
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    15
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    16
constdefs
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    17
  lift_rec      :: [i,i]=> i
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    18
    "lift_rec(r,k) == lift_aux(r)`k"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    19
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    20
  subst_rec     :: [i,i,i]=> i	(**NOTE THE ARGUMENT ORDER BELOW**)
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    21
    "subst_rec(u,r,k) == subst_aux(r)`u`k"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    22
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    23
translations
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    24
  "lift(r)"  == "lift_rec(r,0)"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    25
  "u/v"      == "subst_rec(u,v,0)"
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    26
  
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    27
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    28
(** The clumsy _aux functions are required because other arguments vary
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    29
    in the recursive calls ***)
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    30
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    31
primrec
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    32
  "lift_aux(Var(i)) = (\\<lambda>k \\<in> nat. if i<k then Var(i) else Var(succ(i)))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    33
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    34
  "lift_aux(Fun(t)) = (\\<lambda>k \\<in> nat. Fun(lift_aux(t) ` succ(k)))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    35
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    36
  "lift_aux(App(b,f,a)) = (\\<lambda>k \\<in> nat. App(b, lift_aux(f)`k, lift_aux(a)`k))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    37
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    38
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    39
  
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    40
primrec
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    41
  "subst_aux(Var(i)) =
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    42
     (\\<lambda>r \\<in> redexes. \\<lambda>k \\<in> nat. if k<i then Var(i #- 1) 
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    43
				else if k=i then r else Var(i))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    44
  "subst_aux(Fun(t)) =
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    45
     (\\<lambda>r \\<in> redexes. \\<lambda>k \\<in> nat. Fun(subst_aux(t) ` lift(r) ` succ(k)))"
6046
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    46
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    47
  "subst_aux(App(b,f,a)) = 
11319
8b84ee2cc79c X-symbols for ZF
paulson
parents: 9284
diff changeset
    48
     (\\<lambda>r \\<in> redexes. \\<lambda>k \\<in> nat. App(b, subst_aux(f)`r`k, subst_aux(a)`r`k))"
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    49
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    50
end
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    51
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    52