src/ZF/Resid/Substitution.thy
author wenzelm
Thu, 15 Feb 2001 17:18:54 +0100
changeset 11145 3e47692e3a3e
parent 9284 85a5355faa91
child 11319 8b84ee2cc79c
permissions -rw-r--r--
eliminate get_def;
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
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    32
  "lift_aux(Var(i)) = (lam k: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
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    34
  "lift_aux(Fun(t)) = (lam k:nat. Fun(lift_aux(t) ` succ(k)))"
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    35
2c8a8be36c94 converted to use new primrec section
paulson
parents: 5514
diff changeset
    36
  "lift_aux(App(b,f,a)) = (lam k:nat. App(b, lift_aux(f)`k, lift_aux(a)`k))"
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)) =
6068
2d8f3e1f1151 if-then-else syntax for ZF
paulson
parents: 6046
diff changeset
    42
     (lam r:redexes. lam k:nat. if k<i then Var(i #- 1) 
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)) =
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6068
diff changeset
    45
     (lam r:redexes. lam k: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)) = 
9284
85a5355faa91 removal of (harmless) circular definitions
paulson
parents: 6068
diff changeset
    48
     (lam r:redexes. lam k: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