src/HOL/Library/Nat_Infinity.thy
changeset 25594 43c718438f9f
parent 25134 3d4953e88449
child 25691 8f8d83af100a
equal deleted inserted replaced
25593:0b0df6c8646a 25594:43c718438f9f
     4 *)
     4 *)
     5 
     5 
     6 header {* Natural numbers with infinity *}
     6 header {* Natural numbers with infinity *}
     7 
     7 
     8 theory Nat_Infinity
     8 theory Nat_Infinity
     9 imports Main
     9 imports PreList
    10 begin
    10 begin
    11 
    11 
    12 subsection "Definitions"
    12 subsection "Definitions"
    13 
    13 
    14 text {*
    14 text {*
    23   Infty  ("\<infinity>")
    23   Infty  ("\<infinity>")
    24 
    24 
    25 notation (HTML output)
    25 notation (HTML output)
    26   Infty  ("\<infinity>")
    26   Infty  ("\<infinity>")
    27 
    27 
    28 instance inat :: "{ord, zero}" ..
       
    29 
       
    30 definition
    28 definition
    31   iSuc :: "inat => inat" where
    29   iSuc :: "inat => inat" where
    32   "iSuc i = (case i of Fin n => Fin (Suc n) | \<infinity> => \<infinity>)"
    30   "iSuc i = (case i of Fin n => Fin (Suc n) | \<infinity> => \<infinity>)"
    33 
    31 
    34 defs (overloaded)
    32 instantiation inat :: "{ord, zero}"
       
    33 begin
       
    34 
       
    35 definition
    35   Zero_inat_def: "0 == Fin 0"
    36   Zero_inat_def: "0 == Fin 0"
       
    37 
       
    38 definition
    36   iless_def: "m < n ==
    39   iless_def: "m < n ==
    37     case m of Fin m1 => (case n of Fin n1 => m1 < n1 | \<infinity> => True)
    40     case m of Fin m1 => (case n of Fin n1 => m1 < n1 | \<infinity> => True)
    38     | \<infinity>  => False"
    41     | \<infinity>  => False"
       
    42 
       
    43 definition
    39   ile_def: "(m::inat) \<le> n == \<not> (n < m)"
    44   ile_def: "(m::inat) \<le> n == \<not> (n < m)"
       
    45 
       
    46 instance ..
       
    47 
       
    48 end
    40 
    49 
    41 lemmas inat_defs = Zero_inat_def iSuc_def iless_def ile_def
    50 lemmas inat_defs = Zero_inat_def iSuc_def iless_def ile_def
    42 lemmas inat_splits = inat.split inat.split_asm
    51 lemmas inat_splits = inat.split inat.split_asm
    43 
    52 
    44 text {*
    53 text {*