src/HOL/Lambda/Eta.thy
author nipkow
Fri, 06 Oct 1995 10:45:11 +0100
changeset 1269 ee011b365770
child 1376 92f83b9d17e1
permissions -rw-r--r--
New version with eta reduction.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1269
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/Lambda/Eta.thy
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     4
    Copyright   1995 TU Muenchen
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     5
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     6
Eta-reduction and relatives.
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     7
*)
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     8
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
     9
Eta = ParRed + Commutation +
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    10
consts free :: "db => nat => bool"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    11
       decr :: "[db,nat] => db"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    12
       eta  :: "(db * db) set"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    13
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    14
syntax  "-e>", "-e>>", "-e>=" , "->=" :: "[db,db] => bool" (infixl 50)
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    15
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    16
translations
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    17
  "s -e>  t" == "(s,t) : eta"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    18
  "s -e>> t" == "(s,t) : eta^*"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    19
  "s -e>= t" == "(s,t) : eta^="
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    20
  "s ->=  t" == "(s,t) : beta^="
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    21
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    22
primrec free Lambda.db
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    23
  free_Var "free (Var j) i = (j=i)"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    24
  free_App "free (s @ t) i = (free s i | free t i)"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    25
  free_Fun "free (Fun s) i = free s (Suc i)"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    26
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    27
defs
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    28
  decr_def "decr t i == t[Var i/i]"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    29
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    30
inductive "eta"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    31
intrs
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    32
   eta  "~free s 0 ==> Fun(s @ Var 0) -e> decr s 0"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    33
   appL  "s -e> t ==> s@u -e> t@u"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    34
   appR  "s -e> t ==> u@s -e> u@t"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    35
   abs   "s -e> t ==> Fun s -e> Fun t"
ee011b365770 New version with eta reduction.
nipkow
parents:
diff changeset
    36
end