src/HOL/Lambda/ParRed.thy
author paulson
Wed, 15 Jul 1998 10:15:13 +0200
changeset 5143 b94cd208f073
parent 5134 51f81581e3d9
child 5146 1ea751ae62b2
permissions -rw-r--r--
Removal of leading "\!\!..." from most Goal commands
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
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
     9
ParRed = Lambda + Commutation + Recdef +
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    10
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    11
consts  par_beta :: "(dB * dB) set"
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    12
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
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"
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    21
    abs   "s => t ==> Abs s => Abs t"
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    22
    app   "[| s => s'; t => t' |] ==> s @ t => s' @ t'"
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    23
    beta  "[| s => s'; t => t' |] ==> (Abs 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
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    26
  cd  :: dB => dB
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    27
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    28
recdef cd "measure size"
1900
c7a869229091 Simplified primrec definitions.
berghofe
parents: 1789
diff changeset
    29
  "cd(Var n) = Var n"
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    30
  "cd(Var n @ t) = Var n @ cd t"
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    31
  "cd((s1 @ s2) @ t) = cd(s1 @ s2) @ cd t"
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    32
  "cd(Abs u @ t) = (cd u)[cd t/0]"
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    33
(*
3001
8f89a99d2b00 Tidied up the indentation
paulson
parents: 2159
diff changeset
    34
  "cd(s @ t) = (case s of Var n   => (s @ cd t)
8f89a99d2b00 Tidied up the indentation
paulson
parents: 2159
diff changeset
    35
                        | s1 @ s2 => (cd s @ cd t) 
8f89a99d2b00 Tidied up the indentation
paulson
parents: 2159
diff changeset
    36
                        | Abs u   => deAbs(cd s)[cd t/0])"
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    37
*)
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    38
  "cd(Abs s) = Abs(cd s)"
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    39
(*
2159
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    40
primrec deAbs dB
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    41
  "deAbs(Var n) = Var n"
e650a3f6f600 Used nat_trans_tac. New Eta. various smaller changes.
nipkow
parents: 1900
diff changeset
    42
  "deAbs(s @ t) = s @ t"
5134
51f81581e3d9 Replace awkward primrec by recdef.
nipkow
parents: 3001
diff changeset
    43
  "deAbs(Abs s) = s"*)
1120
ff7dd80513e6 Lambda calculus in de Bruijn notation.
nipkow
parents:
diff changeset
    44
end