(*  Title: 	ZF/ex/contract.thy
    ID:         $Id$
    Author: 	Lawrence C Paulson
    Copyright   1993  University of Cambridge
Inductive definition of (1-step) contractions and (mult-step) reductions
*)
Contract0 = Comb +
consts
  diamond   :: "i => o"
  I         :: "i"
  contract  :: "i"
  "-1->"    :: "[i,i] => o"    			(infixl 50)
  "--->"    :: "[i,i] => o"    			(infixl 50)
  parcontract :: "i"
  "=1=>"    :: "[i,i] => o"    			(infixl 50)
  "===>"    :: "[i,i] => o"    			(infixl 50)
translations
  "p -1-> q" == "<p,q> : contract"
  "p ---> q" == "<p,q> : contract^*"
  "p =1=> q" == "<p,q> : parcontract"
  "p ===> q" == "<p,q> : parcontract^+"
rules
  diamond_def "diamond(r) == ALL x y. <x,y>:r --> \
\                            (ALL y'. <x,y'>:r --> \
\                                 (EX z. <y,z>:r & <y',z> : r))"
  I_def       "I == S#K#K"
end