src/HOL/Lambda/ParRed.thy
author paulson
Mon, 23 Sep 1996 17:42:56 +0200
changeset 2003 b48f066d52dc
parent 1900 c7a869229091
child 2159 e650a3f6f600
permissions -rw-r--r--
Addition of gensym
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/Lambda/ParRed.thy
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     4
    Copyright   1995 TU Muenchen
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     5
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     6
Parallel reduction and a complete developments function "cd".
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     7
*)
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
     8
1269
ee011b365770 New version with eta reduction.
nipkow
parents: 1126
diff changeset
     9
ParRed = Lambda + Commutation +
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    10
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    11
consts  par_beta :: "(db * db) set"
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    12
1376
92f83b9d17e1 removed quotes from consts and syntax sections
clasohm
parents: 1269
diff changeset
    13
syntax  "=>" :: [db,db] => bool (infixl 50)
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    14
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    15
translations
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    16
  "s => t" == "(s,t) : par_beta"
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    17
1789
aade046ec6d5 Quotes now optional around inductive set
paulson
parents: 1376
diff changeset
    18
inductive par_beta
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    19
  intrs
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    20
    var   "Var n => Var n"
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    21
    abs   "s => t ==> Fun s => Fun t"
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    22
    app   "[| s => s'; t => t' |] ==> s @ t => s' @ t'"
1124
a6233ea105a4 Polished the presentation making it completely definitional.
nipkow
parents: 1120
diff changeset
    23
    beta  "[| s => s'; t => t' |] ==> (Fun s) @ t => s'[t'/0]"
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    24
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    25
consts
1376
92f83b9d17e1 removed quotes from consts and syntax sections
clasohm
parents: 1269
diff changeset
    26
  cd  :: db => db
92f83b9d17e1 removed quotes from consts and syntax sections
clasohm
parents: 1269
diff changeset
    27
  deFun :: db => db
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    28
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    29
primrec cd db
1900
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    30
  "cd(Var n) = Var n"
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    31
  "cd(s @ t) = (case s of
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    32
            Var n => s @ (cd t) |
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    33
            s1 @ s2 => (cd s) @ (cd t) |
1124
a6233ea105a4 Polished the presentation making it completely definitional.
nipkow
parents: 1120
diff changeset
    34
            Fun u => deFun(cd s)[cd t/0])"
1900
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    35
  "cd(Fun s) = Fun(cd s)"
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    36
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    37
primrec deFun db
1900
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    38
  "deFun(Var n) = Var n"
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    39
  "deFun(s @ t) = s @ t"
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    40
  "deFun(Fun s) = s"
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    41
end