Subst/Unifier.thy
author clasohm
Wed, 02 Mar 1994 12:26:55 +0100
changeset 48 21291189b51e
parent 0 7949f97df77a
child 249 492493334e0f
permissions -rw-r--r--
changed "." to "$" and Cons to infix "#" to eliminate ambiguity
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	Subst/unifier.thy
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     2
    Author: 	Martin Coen, Cambridge University Computer Laboratory
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     3
    Copyright   1993  University of Cambridge
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     4
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     5
Definition of most general idempotent unifier
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     6
*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     7
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     8
Unifier = Subst +
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     9
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    10
consts
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    11
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    12
  Idem       :: "('a*('a uterm))list=> bool"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    13
  Unifier    :: "[('a*('a uterm))list,'a uterm,'a uterm] => bool"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    14
  ">>"       :: "[('a*('a uterm))list,('a*('a uterm))list] => bool" (infixr 52)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    15
  MGUnifier  :: "[('a*('a uterm))list,'a uterm,'a uterm] => bool"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    16
  MGIUnifier :: "[('a*('a uterm))list,'a uterm,'a uterm] => bool"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    17
  UWFD       :: "['a uterm,'a uterm,'a uterm,'a uterm] => bool"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    18
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    19
rules  (*Definitions*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    20
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    21
  Idem_def         "Idem(s) == s <> s =s= s"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    22
  Unifier_def      "Unifier(s,t,u) == t <| s = u <| s"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    23
  MoreGeneral_def  "r >> s == ? q.s =s= r <> q"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    24
  MGUnifier_def    "MGUnifier(s,t,u) == Unifier(s,t,u) & \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    25
\		    (! r.Unifier(r,t,u) --> s >> r)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    26
  MGIUnifier_def   "MGIUnifier(s,t,u) == MGUnifier(s,t,u) & Idem(s)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    27
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    28
  UWFD_def
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    29
  "UWFD(x,y,x',y') == \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    30
\    (vars_of(x) Un vars_of(y) < vars_of(x') Un vars_of(y')) |  \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    31
\    (vars_of(x) Un vars_of(y) = vars_of(x') Un vars_of(y') & x <: x')"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    32
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    33
end