src/HOL/Lambda/ParRed.thy
changeset 2159 e650a3f6f600
parent 1900 c7a869229091
child 3001 8f89a99d2b00
equal deleted inserted replaced
2158:77dfe65b5bb3 2159:e650a3f6f600
     6 Parallel reduction and a complete developments function "cd".
     6 Parallel reduction and a complete developments function "cd".
     7 *)
     7 *)
     8 
     8 
     9 ParRed = Lambda + Commutation +
     9 ParRed = Lambda + Commutation +
    10 
    10 
    11 consts  par_beta :: "(db * db) set"
    11 consts  par_beta :: "(dB * dB) set"
    12 
    12 
    13 syntax  "=>" :: [db,db] => bool (infixl 50)
    13 syntax  "=>" :: [dB,dB] => bool (infixl 50)
    14 
    14 
    15 translations
    15 translations
    16   "s => t" == "(s,t) : par_beta"
    16   "s => t" == "(s,t) : par_beta"
    17 
    17 
    18 inductive par_beta
    18 inductive par_beta
    19   intrs
    19   intrs
    20     var   "Var n => Var n"
    20     var   "Var n => Var n"
    21     abs   "s => t ==> Fun s => Fun t"
    21     abs   "s => t ==> Abs s => Abs t"
    22     app   "[| s => s'; t => t' |] ==> s @ t => s' @ t'"
    22     app   "[| s => s'; t => t' |] ==> s @ t => s' @ t'"
    23     beta  "[| s => s'; t => t' |] ==> (Fun s) @ t => s'[t'/0]"
    23     beta  "[| s => s'; t => t' |] ==> (Abs s) @ t => s'[t'/0]"
    24 
    24 
    25 consts
    25 consts
    26   cd  :: db => db
    26   cd  :: dB => dB
    27   deFun :: db => db
    27   deAbs :: dB => dB
    28 
    28 
    29 primrec cd db
    29 primrec cd dB
    30   "cd(Var n) = Var n"
    30   "cd(Var n) = Var n"
    31   "cd(s @ t) = (case s of
    31   "cd(s @ t) = (case s of
    32             Var n => s @ (cd t) |
    32             Var n => s @ (cd t) |
    33             s1 @ s2 => (cd s) @ (cd t) |
    33             s1 @ s2 => (cd s) @ (cd t) |
    34             Fun u => deFun(cd s)[cd t/0])"
    34             Abs u => deAbs(cd s)[cd t/0])"
    35   "cd(Fun s) = Fun(cd s)"
    35   "cd(Abs s) = Abs(cd s)"
    36 
    36 
    37 primrec deFun db
    37 primrec deAbs dB
    38   "deFun(Var n) = Var n"
    38   "deAbs(Var n) = Var n"
    39   "deFun(s @ t) = s @ t"
    39   "deAbs(s @ t) = s @ t"
    40   "deFun(Fun s) = s"
    40   "deAbs(Abs s) = s"
    41 end
    41 end