src/HOL/Datatype.thy
changeset 29609 a010aab5bed0
parent 29580 117b88da143c
child 30235 58d147683393
equal deleted inserted replaced
29608:564ea783ace8 29609:a010aab5bed0
     6 *)
     6 *)
     7 
     7 
     8 header {* Analogues of the Cartesian Product and Disjoint Sum for Datatypes *}
     8 header {* Analogues of the Cartesian Product and Disjoint Sum for Datatypes *}
     9 
     9 
    10 theory Datatype
    10 theory Datatype
    11 imports Nat Relation
    11 imports Nat Product_Type
    12 begin
    12 begin
    13 
    13 
    14 typedef (Node)
    14 typedef (Node)
    15   ('a,'b) node = "{p. EX f x k. p = (f::nat=>'b+nat, x::'a+nat) & f k = Inr 0}"
    15   ('a,'b) node = "{p. EX f x k. p = (f::nat=>'b+nat, x::'a+nat) & f k = Inr 0}"
    16     --{*it is a subtype of @{text "(nat=>'b+nat) * ('a+nat)"}*}
    16     --{*it is a subtype of @{text "(nat=>'b+nat) * ('a+nat)"}*}
   505 
   505 
   506 lemma dsum_Sigma: "(dsum (A <*> B) (C <*> D)) <= (usum A C) <*> (usum B D)"
   506 lemma dsum_Sigma: "(dsum (A <*> B) (C <*> D)) <= (usum A C) <*> (usum B D)"
   507 by blast
   507 by blast
   508 
   508 
   509 lemmas dsum_subset_Sigma = subset_trans [OF dsum_mono dsum_Sigma, standard]
   509 lemmas dsum_subset_Sigma = subset_trans [OF dsum_mono dsum_Sigma, standard]
   510 
       
   511 
       
   512 (*** Domain ***)
       
   513 
       
   514 lemma Domain_dprod [simp]: "Domain (dprod r s) = uprod (Domain r) (Domain s)"
       
   515 by auto
       
   516 
       
   517 lemma Domain_dsum [simp]: "Domain (dsum r s) = usum (Domain r) (Domain s)"
       
   518 by auto
       
   519 
   510 
   520 
   511 
   521 text {* hides popular names *}
   512 text {* hides popular names *}
   522 hide (open) type node item
   513 hide (open) type node item
   523 hide (open) const Push Node Atom Leaf Numb Lim Split Case
   514 hide (open) const Push Node Atom Leaf Numb Lim Split Case