src/ZF/ex/Comb.thy
changeset 1478 2b8c2a7547ab
parent 1401 0c439768f45c
child 1702 4aa538e82f76
equal deleted inserted replaced
1477:4c51ab632cda 1478:2b8c2a7547ab
     1 (*  Title: 	ZF/ex/Comb.thy
     1 (*  Title:      ZF/ex/Comb.thy
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author: 	Lawrence C Paulson
     3     Author:     Lawrence C Paulson
     4     Copyright   1994  University of Cambridge
     4     Copyright   1994  University of Cambridge
     5 
     5 
     6 Combinatory Logic example: the Church-Rosser Theorem
     6 Combinatory Logic example: the Church-Rosser Theorem
     7 Curiously, combinators do not include free variables.
     7 Curiously, combinators do not include free variables.
     8 
     8 
    25 (** Inductive definition of contractions, -1->
    25 (** Inductive definition of contractions, -1->
    26              and (multi-step) reductions, --->
    26              and (multi-step) reductions, --->
    27 **)
    27 **)
    28 consts
    28 consts
    29   contract  :: i
    29   contract  :: i
    30   "-1->"    :: [i,i] => o    			(infixl 50)
    30   "-1->"    :: [i,i] => o                       (infixl 50)
    31   "--->"    :: [i,i] => o    			(infixl 50)
    31   "--->"    :: [i,i] => o                       (infixl 50)
    32 
    32 
    33 translations
    33 translations
    34   "p -1-> q" == "<p,q> : contract"
    34   "p -1-> q" == "<p,q> : contract"
    35   "p ---> q" == "<p,q> : contract^*"
    35   "p ---> q" == "<p,q> : contract^*"
    36 
    36 
    47 (** Inductive definition of parallel contractions, =1=>
    47 (** Inductive definition of parallel contractions, =1=>
    48              and (multi-step) parallel reductions, ===>
    48              and (multi-step) parallel reductions, ===>
    49 **)
    49 **)
    50 consts
    50 consts
    51   parcontract :: i
    51   parcontract :: i
    52   "=1=>"    :: [i,i] => o    			(infixl 50)
    52   "=1=>"    :: [i,i] => o                       (infixl 50)
    53   "===>"    :: [i,i] => o    			(infixl 50)
    53   "===>"    :: [i,i] => o                       (infixl 50)
    54 
    54 
    55 translations
    55 translations
    56   "p =1=> q" == "<p,q> : parcontract"
    56   "p =1=> q" == "<p,q> : parcontract"
    57   "p ===> q" == "<p,q> : parcontract^+"
    57   "p ===> q" == "<p,q> : parcontract^+"
    58 
    58