Subst/uterm.thy
changeset 0 7949f97df77a
child 48 21291189b51e
equal deleted inserted replaced
-1:000000000000 0:7949f97df77a
       
     1 (*  Title: 	Substitutions/uterm.thy
       
     2     Author: 	Martin Coen, Cambridge University Computer Laboratory
       
     3     Copyright   1993  University of Cambridge
       
     4 
       
     5 Simple term structure for unifiation.
       
     6 Binary trees with leaves that are constants or variables.
       
     7 *)
       
     8 
       
     9 UTerm = Sexp +
       
    10 
       
    11 types uterm 1
       
    12 
       
    13 arities 
       
    14   uterm     :: (term)term
       
    15 
       
    16 consts
       
    17   UTerm     :: "'a node set set => 'a node set set"
       
    18   Rep_UTerm :: "'a uterm => 'a node set"
       
    19   Abs_UTerm :: "'a node set => 'a uterm"
       
    20   VAR       :: "'a node set => 'a node set"
       
    21   CONST     :: "'a node set => 'a node set"
       
    22   COMB      :: "['a node set, 'a node set] => 'a node set"
       
    23   Var       :: "'a => 'a uterm"
       
    24   Const     :: "'a => 'a uterm"
       
    25   Comb      :: "['a uterm, 'a uterm] => 'a uterm"
       
    26   UTerm_rec :: "['a node set, 'a node set => 'b, 'a node set => 'b, \
       
    27 \                ['a node set , 'a node set, 'b, 'b]=>'b] => 'b"
       
    28   uterm_rec :: "['a uterm, 'a => 'b, 'a => 'b, \
       
    29 \                ['a uterm, 'a uterm,'b,'b]=>'b] => 'b"
       
    30 
       
    31 rules
       
    32   UTerm_def	"UTerm(A) == lfp(%Z. A <+> A <+> Z <*> Z)"
       
    33     (*faking a type definition...*)
       
    34   Rep_UTerm 		"Rep_UTerm(xs): UTerm(range(Leaf))"
       
    35   Rep_UTerm_inverse 	"Abs_UTerm(Rep_UTerm(xs)) = xs"
       
    36   Abs_UTerm_inverse 	"M: UTerm(range(Leaf)) ==> Rep_UTerm(Abs_UTerm(M)) = M"
       
    37      (*defining the concrete constructors*)
       
    38   VAR_def  	"VAR(v) == In0(v)"
       
    39   CONST_def  	"CONST(v) == In1(In0(v))"
       
    40   COMB_def 	"COMB(t,u) == In1(In1(t . u))"
       
    41      (*defining the abstract constructors*)
       
    42   Var_def  	"Var(v) == Abs_UTerm(VAR(Leaf(v)))"
       
    43   Const_def  	"Const(c) == Abs_UTerm(CONST(Leaf(c)))"
       
    44   Comb_def 	"Comb(t,u) == Abs_UTerm(COMB(Rep_UTerm(t),Rep_UTerm(u)))"
       
    45 
       
    46      (*uterm recursion*)
       
    47   UTerm_rec_def	
       
    48    "UTerm_rec(M,b,c,d) == wfrec(trancl(pred_Sexp), M, \
       
    49 \          %z g. Case(z, %x. b(x), \
       
    50 \                        %w. Case(w, %x. c(x), \
       
    51 \                                 %v. Split(v, %x y. d(x,y,g(x),g(y))))))"
       
    52 
       
    53   uterm_rec_def
       
    54    "uterm_rec(t,b,c,d) == \
       
    55 \   UTerm_rec(Rep_UTerm(t), %x.b(Inv(Leaf,x)), %x.c(Inv(Leaf,x)), \
       
    56 \                           %x y q r.d(Abs_UTerm(x),Abs_UTerm(y),q,r))"
       
    57 
       
    58 end