src/HOLCF/Sprod3.thy
changeset 2394 91d8abf108be
parent 2291 fbd14a05fb88
child 2420 cb21eef65704
equal deleted inserted replaced
2393:651fce76c86c 2394:91d8abf108be
     9 Sprod3 = Sprod2 +
     9 Sprod3 = Sprod2 +
    10 
    10 
    11 arities "**" :: (pcpo,pcpo)pcpo                 (* Witness sprod2.ML *)
    11 arities "**" :: (pcpo,pcpo)pcpo                 (* Witness sprod2.ML *)
    12 
    12 
    13 consts  
    13 consts  
    14         spair        :: "'a -> 'b -> ('a**'b)" (* continuous strict pairing *)
    14   spair		:: "'a -> 'b -> ('a**'b)" (* continuous strict pairing *)
    15         sfst         :: "('a**'b)->'a"
    15   sfst		:: "('a**'b)->'a"
    16         ssnd         :: "('a**'b)->'b"
    16   ssnd		:: "('a**'b)->'b"
    17         ssplit       :: "('a->'b->'c)->('a**'b)->'c"
    17   ssplit	:: "('a->'b->'c)->('a**'b)->'c"
    18 
    18 
    19 syntax  
    19 syntax  
    20         "@stuple"    :: "['a, args] => 'a ** 'b"        ("(1'(|_,/ _|'))")
    20   "@stuple"	:: "['a, args] => 'a ** 'b"		("(1'(|_,/ _|'))")
    21 
    21 
    22 translations
    22 translations
    23         "(|x, y, z|)"   == "(|x, (|y, z|)|)"
    23         "(|x, y, z|)"   == "(|x, (|y, z|)|)"
    24         "(|x, y|)"      == "spair`x`y"
    24         "(|x, y|)"      == "spair`x`y"
       
    25 
       
    26 syntax (symbols)
       
    27   "@stuple"	:: "['a, args] => 'a ** 'b"		("(1É_,/ _Ê)")
    25 
    28 
    26 rules 
    29 rules 
    27 
    30 
    28 inst_sprod_pcpo "(UU::'a**'b) = Ispair UU UU"
    31 inst_sprod_pcpo "(UU::'a**'b) = Ispair UU UU"
    29 
    32 
    31 spair_def       "spair  == (LAM x y.Ispair x y)"
    34 spair_def       "spair  == (LAM x y.Ispair x y)"
    32 sfst_def        "sfst   == (LAM p.Isfst p)"
    35 sfst_def        "sfst   == (LAM p.Isfst p)"
    33 ssnd_def        "ssnd   == (LAM p.Issnd p)"     
    36 ssnd_def        "ssnd   == (LAM p.Issnd p)"     
    34 ssplit_def      "ssplit == (LAM f. strictify`(LAM p.f`(sfst`p)`(ssnd`p)))"
    37 ssplit_def      "ssplit == (LAM f. strictify`(LAM p.f`(sfst`p)`(ssnd`p)))"
    35 
    38 
    36 (* start 8bit 1 *)
       
    37 (* end 8bit 1 *)
       
    38 
    39 
    39 end
    40 end
    40 
    41 
    41 
    42 
    42 
    43