TFL/examples/Subst/Subst.thy
author wenzelm
Tue, 10 Dec 1996 13:03:44 +0100
changeset 2367 eba760ebe315
parent 2113 21266526ac42
permissions -rw-r--r--
fixed pris of binder syntax;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2113
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     1
(*  Title:      Substitutions/subst.thy
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     2
    Author:     Martin Coen, Cambridge University Computer Laboratory
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     3
    Copyright   1993  University of Cambridge
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     4
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     5
Substitutions on uterms
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     6
*)
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     7
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     8
Subst = Setplus + AList + UTerm +
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
     9
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    10
consts
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    11
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    12
  "=s="  ::  "[('a*('a uterm)) list,('a*('a uterm)) list] => bool" (infixr 52)
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    13
  "<|"   ::  "'a uterm => ('a * 'a uterm) list => 'a uterm"        (infixl 55)
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    14
  "<>"   ::  "[('a*('a uterm)) list, ('a*('a uterm)) list] 
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    15
                 => ('a*('a uterm)) list"                          (infixl 56)
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    16
  sdom   ::  "('a*('a uterm)) list => 'a set"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    17
  srange ::  "('a*('a uterm)) list => 'a set"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    18
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    19
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    20
primrec "op <|"   uterm
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    21
  subst_Var      "(Var v <| s) = assoc v (Var v) s"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    22
  subst_Const  "(Const c <| s) = Const c"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    23
  subst_Comb  "(Comb M N <| s) = Comb (M <| s) (N <| s)"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    24
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    25
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    26
rules 
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    27
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    28
  subst_eq_def  "r =s= s == ALL t.t <| r = t <| s"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    29
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    30
  comp_def    "al <> bl == alist_rec al bl (%x y xs g. (x,y <| bl)#g)"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    31
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    32
  sdom_def
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    33
  "sdom(al) == alist_rec al {}  
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    34
                (%x y xs g. if Var(x)=y then g - {x} else g Un {x})"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    35
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    36
  srange_def   
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    37
   "srange(al) == Union({y. EX x:sdom(al). y=vars_of(Var(x) <| al)})"
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    38
21266526ac42 Subst as modified by Konrad Slind
paulson
parents:
diff changeset
    39
end