src/HOL/Induct/Comb.thy
changeset 23746 a455e69c31cc
parent 21404 eb85850d3eb7
child 35621 1c084dda4c3c
equal deleted inserted replaced
23745:28df61d931e2 23746:a455e69c31cc
    32 text {*
    32 text {*
    33   Inductive definition of contractions, @{text "-1->"} and
    33   Inductive definition of contractions, @{text "-1->"} and
    34   (multi-step) reductions, @{text "--->"}.
    34   (multi-step) reductions, @{text "--->"}.
    35 *}
    35 *}
    36 
    36 
    37 consts
    37 inductive_set
    38   contract  :: "(comb*comb) set"
    38   contract :: "(comb*comb) set"
    39 
    39   and contract_rel1 :: "[comb,comb] => bool"  (infixl "-1->" 50)
    40 abbreviation
    40   where
    41   contract_rel1 :: "[comb,comb] => bool"   (infixl "-1->" 50) where
    41     "x -1-> y == (x,y) \<in> contract"
    42   "x -1-> y == (x,y) \<in> contract"
    42    | K:     "K##x##y -1-> x"
       
    43    | S:     "S##x##y##z -1-> (x##z)##(y##z)"
       
    44    | Ap1:   "x-1->y ==> x##z -1-> y##z"
       
    45    | Ap2:   "x-1->y ==> z##x -1-> z##y"
    43 
    46 
    44 abbreviation
    47 abbreviation
    45   contract_rel :: "[comb,comb] => bool"   (infixl "--->" 50) where
    48   contract_rel :: "[comb,comb] => bool"   (infixl "--->" 50) where
    46   "x ---> y == (x,y) \<in> contract^*"
    49   "x ---> y == (x,y) \<in> contract^*"
    47 
    50 
    48 inductive contract
       
    49   intros
       
    50     K:     "K##x##y -1-> x"
       
    51     S:     "S##x##y##z -1-> (x##z)##(y##z)"
       
    52     Ap1:   "x-1->y ==> x##z -1-> y##z"
       
    53     Ap2:   "x-1->y ==> z##x -1-> z##y"
       
    54 
       
    55 text {*
    51 text {*
    56   Inductive definition of parallel contractions, @{text "=1=>"} and
    52   Inductive definition of parallel contractions, @{text "=1=>"} and
    57   (multi-step) parallel reductions, @{text "===>"}.
    53   (multi-step) parallel reductions, @{text "===>"}.
    58 *}
    54 *}
    59 
    55 
    60 consts
    56 inductive_set
    61   parcontract :: "(comb*comb) set"
    57   parcontract :: "(comb*comb) set"
    62 
    58   and parcontract_rel1 :: "[comb,comb] => bool"  (infixl "=1=>" 50)
    63 abbreviation
    59   where
    64   parcontract_rel1 :: "[comb,comb] => bool"   (infixl "=1=>" 50) where
    60     "x =1=> y == (x,y) \<in> parcontract"
    65   "x =1=> y == (x,y) \<in> parcontract"
    61   | refl:  "x =1=> x"
       
    62   | K:     "K##x##y =1=> x"
       
    63   | S:     "S##x##y##z =1=> (x##z)##(y##z)"
       
    64   | Ap:    "[| x=1=>y;  z=1=>w |] ==> x##z =1=> y##w"
    66 
    65 
    67 abbreviation
    66 abbreviation
    68   parcontract_rel :: "[comb,comb] => bool"   (infixl "===>" 50) where
    67   parcontract_rel :: "[comb,comb] => bool"   (infixl "===>" 50) where
    69   "x ===> y == (x,y) \<in> parcontract^*"
    68   "x ===> y == (x,y) \<in> parcontract^*"
    70 
       
    71 inductive parcontract
       
    72   intros
       
    73     refl:  "x =1=> x"
       
    74     K:     "K##x##y =1=> x"
       
    75     S:     "S##x##y##z =1=> (x##z)##(y##z)"
       
    76     Ap:    "[| x=1=>y;  z=1=>w |] ==> x##z =1=> y##w"
       
    77 
    69 
    78 text {*
    70 text {*
    79   Misc definitions.
    71   Misc definitions.
    80 *}
    72 *}
    81 
    73