src/ZF/Resid/Substitution.thy
author wenzelm
Tue, 20 Oct 1998 16:26:20 +0200
changeset 5686 1f053d05f571
parent 5514 324e1560a5c9
child 6046 2c8a8be36c94
permissions -rw-r--r--
Symtab.foldl;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     1
(*  Title:      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
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     8
Substitution = SubUnion +
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
     9
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    10
consts
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    11
  lift_rec      :: [i,i]=> i
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    12
  lift          :: i=>i
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    13
  subst_rec     :: [i,i,i]=> i
1401
0c439768f45c removed quotes from consts and syntax sections
clasohm
parents: 1155
diff changeset
    14
  "'/"          :: [i,i]=>i  (infixl 70)  (*subst*)
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    15
translations
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    16
  "lift(r)"  == "lift_rec(r,0)"
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    17
  "u/v" == "subst_rec(u,v,0)"
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    18
  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    19
defs
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    20
  lift_rec_def  "lift_rec(r,kg) ==   
3840
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    21
                     redex_rec(r,%i.(lam k:nat. if(i<k,Var(i),Var(succ(i)))), 
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    22
                                 %x m.(lam k:nat. Fun(m`(succ(k)))),   
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    23
                                 %b x y m p. lam k:nat. App(b,m`k,p`k))`kg"
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    24
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    25
  
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    26
(* subst_rec(u,Var(i),k)     = if k<i then Var(i-1)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    27
                               else if k=i then u
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    28
                                    else Var(i)
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    29
   subst_rec(u,Fun(t),k)     = Fun(subst_rec(lift(u),t,succ(k)))
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    30
   subst_rec(u,App(b,f,a),k) = App(b,subst_rec(u,f,p),subst_rec(u,a,p))
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    31
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    32
*)
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    33
  subst_rec_def "subst_rec(u,t,kg) ==   
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    34
                     redex_rec(t,   
3840
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    35
                       %i.(lam r:redexes. lam k:nat.   
5514
324e1560a5c9 inserted space in #-1 to prevent confusion with an integer constant
paulson
parents: 3840
diff changeset
    36
                              if(k<i,Var(i #- 1),   
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    37
                                if(k=i,r,Var(i)))),   
3840
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    38
                       %x m.(lam r:redexes. lam k:nat.   
1155
928a16e02f9f removed \...\ inside strings
clasohm
parents: 1048
diff changeset
    39
                             Fun(m`(lift(r))`(succ(k)))),   
3840
e0baea4d485a fixed dots;
wenzelm
parents: 1478
diff changeset
    40
                       %b x y m p. lam r:redexes. lam k:nat.   
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
    41
                              App(b,m`r`k,p`r`k))`u`kg"
1048
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    42
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    43
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    44
end
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    45
5ba0314f8214 New example by Ole Rasmussen
lcp
parents:
diff changeset
    46