Structure numeral_bitTheory


Source File Identifier index Theory binding index

signature numeral_bitTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val BIT_MODF_def : thm
    val BIT_REV_def : thm
    val FDUB_def : thm
    val SFUNPOW_def : thm
    val iBITWISE_def : thm
    val iDIV2 : thm
    val iLOG2_def : thm
    val iMOD_2EXP : thm
    val iSUC : thm
  
  (*  Theorems  *)
    val BIT_MODIFY_EVAL : thm
    val BIT_REVERSE_EVAL : thm
    val DIV_2EXP : thm
    val FDUB_FDUB : thm
    val FDUB_iDIV2 : thm
    val FDUB_iDUB : thm
    val LOG_compute : thm
    val LOWEST_SET_BIT : thm
    val LOWEST_SET_BIT_compute : thm
    val MOD_2EXP : thm
    val MOD_2EXP_EQ : thm
    val MOD_2EXP_MAX : thm
    val NUMERAL_BITWISE : thm
    val NUMERAL_BIT_MODF : thm
    val NUMERAL_BIT_MODIFY : thm
    val NUMERAL_BIT_REV : thm
    val NUMERAL_BIT_REVERSE : thm
    val NUMERAL_DIV_2EXP : thm
    val NUMERAL_SFUNPOW_FDUB : thm
    val NUMERAL_SFUNPOW_iDIV2 : thm
    val NUMERAL_SFUNPOW_iDUB : thm
    val NUMERAL_TIMES_2EXP : thm
    val NUMERAL_iDIV2 : thm
    val iBITWISE : thm
    val iDUB_NUMERAL : thm
    val numeral_ilog2 : thm
    val numeral_imod_2exp : thm
    val numeral_log2 : thm
    val numeral_mod2 : thm
(*
   [bit] Parent theory of "numeral_bit"
   
   [BIT_MODF_def]  Definition
      
      ⊢ (∀f x b e y. BIT_MODF 0 f x b e y = y) ∧
        ∀n f x b e y.
          BIT_MODF (SUC n) f x b e y =
          BIT_MODF n f (x DIV 2) (b + 1) (2 * e)
            (if f b (ODD x) then e + y else y)
   
   [BIT_REV_def]  Definition
      
      ⊢ (∀x y. BIT_REV 0 x y = y) ∧
        ∀n x y.
          BIT_REV (SUC n) x y =
          BIT_REV n (x DIV 2) (2 * y + SBIT (ODD x) 0)
   
   [FDUB_def]  Definition
      
      ⊢ (∀f. FDUB f 0 = 0) ∧ ∀f n. FDUB f (SUC n) = f (f (SUC n))
   
   [SFUNPOW_def]  Definition
      
      ⊢ (∀f x. SFUNPOW f 0 x = x) ∧
        ∀f n x.
          SFUNPOW f (SUC n) x = if x = 0 then 0 else SFUNPOW f n (f x)
   
   [iBITWISE_def]  Definition
      
      ⊢ numeral_bit$iBITWISE = BITWISE
   
   [iDIV2]  Definition
      
      ⊢ numeral_bit$iDIV2 = DIV2
   
   [iLOG2_def]  Definition
      
      ⊢ ∀n. numeral_bit$iLOG2 n = LOG2 (n + 1)
   
   [iMOD_2EXP]  Definition
      
      ⊢ numeral_bit$iMOD_2EXP = MOD_2EXP
   
   [iSUC]  Definition
      
      ⊢ numeral_bit$iSUC = SUC
   
   [BIT_MODIFY_EVAL]  Theorem
      
      ⊢ ∀m f n. BIT_MODIFY m f n = BIT_MODF m f n 0 1 0
   
   [BIT_REVERSE_EVAL]  Theorem
      
      ⊢ ∀m n. BIT_REVERSE m n = BIT_REV m n 0
   
   [DIV_2EXP]  Theorem
      
      ⊢ ∀n x. DIV_2EXP n x = FUNPOW DIV2 n x
   
   [FDUB_FDUB]  Theorem
      
      ⊢ FDUB (FDUB f) ZERO = ZERO ∧
        (∀x. FDUB (FDUB f) (numeral_bit$iSUC x) =
             FDUB f (FDUB f (numeral_bit$iSUC x))) ∧
        (∀x. FDUB (FDUB f) <..num comp'n..> =
             FDUB f (FDUB f <..num comp'n..> )) ∧
        ∀x. FDUB (FDUB f) <..num comp'n..> =
            FDUB f (FDUB f <..num comp'n..> )
   
   [FDUB_iDIV2]  Theorem
      
      ⊢ ∀x. FDUB numeral_bit$iDIV2 x =
            numeral_bit$iDIV2 (numeral_bit$iDIV2 x)
   
   [FDUB_iDUB]  Theorem
      
      ⊢ ∀x. FDUB numeral$iDUB x = <..num comp'n..>
   
   [LOG_compute]  Theorem
      
      ⊢ ∀m n.
          LOG m n =
          if m < 2 ∨ n = 0 then FAIL LOG $var$(base < 2 or n = 0) m n
          else if n < m then 0
          else SUC (LOG m (n DIV m))
   
   [LOWEST_SET_BIT]  Theorem
      
      ⊢ ∀n. n ≠ 0 ⇒
            LOWEST_SET_BIT n =
            if ODD n then 0 else 1 + LOWEST_SET_BIT (DIV2 n)
   
   [LOWEST_SET_BIT_compute]  Theorem
      
      ⊢ (∀n. LOWEST_SET_BIT <..num comp'n..> =
             SUC (LOWEST_SET_BIT <..num comp'n..> )) ∧
        ∀n. LOWEST_SET_BIT <..num comp'n..> = 0
   
   [MOD_2EXP]  Theorem
      
      ⊢ (∀x. MOD_2EXP x 0 = 0) ∧
        ∀x n. MOD_2EXP x <..num comp'n..> = <..num comp'n..>
   
   [MOD_2EXP_EQ]  Theorem
      
      ⊢ (∀a b. MOD_2EXP_EQ 0 a b ⇔ T) ∧
        (∀n a b.
           MOD_2EXP_EQ (SUC n) a b ⇔
           (ODD a ⇔ ODD b) ∧ MOD_2EXP_EQ n (DIV2 a) (DIV2 b)) ∧
        ∀n a. MOD_2EXP_EQ n a a ⇔ T
   
   [MOD_2EXP_MAX]  Theorem
      
      ⊢ (∀a. MOD_2EXP_MAX 0 a ⇔ T) ∧
        ∀n a. MOD_2EXP_MAX (SUC n) a ⇔ ODD a ∧ MOD_2EXP_MAX n (DIV2 a)
   
   [NUMERAL_BITWISE]  Theorem
      
      ⊢ (∀x f a. BITWISE x f 0 0 = <..num comp'n..> ) ∧
        (∀x f a. BITWISE x f <..num comp'n..> 0 = <..num comp'n..> ) ∧
        (∀x f b. BITWISE x f 0 <..num comp'n..> = <..num comp'n..> ) ∧
        ∀x f a b.
          BITWISE x f <..num comp'n..> <..num comp'n..> = <..num comp'n..>
   
   [NUMERAL_BIT_MODF]  Theorem
      
      ⊢ (∀f x b e y. BIT_MODF 0 f x b e y = y) ∧
        (∀n f b e y.
           BIT_MODF <..num comp'n..> f 0 b <..num comp'n..> y =
           BIT_MODF (<..num comp'n..> − 1) f 0 (b + 1) <..num comp'n..>
             (if f b F then <..num comp'n..> + y else y)) ∧
        (∀n f b e y.
           BIT_MODF <..num comp'n..> f 0 b <..num comp'n..> y =
           BIT_MODF <..num comp'n..> f 0 (b + 1) <..num comp'n..>
             (if f b F then <..num comp'n..> + y else y)) ∧
        (∀n f x b e y.
           BIT_MODF <..num comp'n..> f <..num comp'n..> b <..num comp'n..>
             y =
           BIT_MODF (<..num comp'n..> − 1) f (DIV2 <..num comp'n..> )
             (b + 1) <..num comp'n..>
             (if f b (ODD x) then <..num comp'n..> + y else y)) ∧
        ∀n f x b e y.
          BIT_MODF <..num comp'n..> f <..num comp'n..> b <..num comp'n..> y =
          BIT_MODF <..num comp'n..> f (DIV2 <..num comp'n..> ) (b + 1)
            <..num comp'n..>
            (if f b (ODD x) then <..num comp'n..> + y else y)
   
   [NUMERAL_BIT_MODIFY]  Theorem
      
      ⊢ (∀m f.
           BIT_MODIFY <..num comp'n..> f 0 =
           BIT_MODF <..num comp'n..> f 0 0 1 0) ∧
        ∀m f n.
          BIT_MODIFY <..num comp'n..> f <..num comp'n..> =
          BIT_MODF <..num comp'n..> f <..num comp'n..> 0 1 0
   
   [NUMERAL_BIT_REV]  Theorem
      
      ⊢ (∀x y. BIT_REV 0 x y = y) ∧
        (∀n y.
           BIT_REV <..num comp'n..> 0 y =
           BIT_REV (<..num comp'n..> − 1) 0 <..num comp'n..> ) ∧
        (∀n y.
           BIT_REV <..num comp'n..> 0 y =
           BIT_REV <..num comp'n..> 0 <..num comp'n..> ) ∧
        (∀n x y.
           BIT_REV <..num comp'n..> <..num comp'n..> y =
           BIT_REV (<..num comp'n..> − 1) (DIV2 <..num comp'n..> )
             (if ODD x then <..num comp'n..> else <..num comp'n..> )) ∧
        ∀n x y.
          BIT_REV <..num comp'n..> <..num comp'n..> y =
          BIT_REV <..num comp'n..> (DIV2 <..num comp'n..> )
            (if ODD x then <..num comp'n..> else <..num comp'n..> )
   
   [NUMERAL_BIT_REVERSE]  Theorem
      
      ⊢ (∀m. BIT_REVERSE <..num comp'n..> 0 = <..num comp'n..> ) ∧
        ∀n m.
          BIT_REVERSE <..num comp'n..> <..num comp'n..> = <..num comp'n..>
   
   [NUMERAL_DIV_2EXP]  Theorem
      
      ⊢ (∀n. DIV_2EXP n 0 = 0) ∧
        ∀n x. DIV_2EXP n <..num comp'n..> = <..num comp'n..>
   
   [NUMERAL_SFUNPOW_FDUB]  Theorem
      
      ⊢ ∀f. (∀x. SFUNPOW (FDUB f) 0 x = x) ∧
            (∀y. SFUNPOW (FDUB f) y 0 = 0) ∧
            (∀n x.
               SFUNPOW (FDUB f) <..num comp'n..> x =
               SFUNPOW (FDUB (FDUB f)) <..num comp'n..> (FDUB f x)) ∧
            ∀n x.
              SFUNPOW (FDUB f) <..num comp'n..> x =
              SFUNPOW (FDUB (FDUB f)) <..num comp'n..> (FDUB f (FDUB f x))
   
   [NUMERAL_SFUNPOW_iDIV2]  Theorem
      
      ⊢ (∀x. SFUNPOW numeral_bit$iDIV2 0 x = x) ∧
        (∀y. SFUNPOW numeral_bit$iDIV2 y 0 = 0) ∧
        (∀n x.
           SFUNPOW numeral_bit$iDIV2 <..num comp'n..> x =
           SFUNPOW (FDUB numeral_bit$iDIV2) <..num comp'n..>
             (numeral_bit$iDIV2 x)) ∧
        ∀n x.
          SFUNPOW numeral_bit$iDIV2 <..num comp'n..> x =
          SFUNPOW (FDUB numeral_bit$iDIV2) <..num comp'n..>
            (numeral_bit$iDIV2 (numeral_bit$iDIV2 x))
   
   [NUMERAL_SFUNPOW_iDUB]  Theorem
      
      ⊢ (∀x. SFUNPOW numeral$iDUB 0 x = x) ∧
        (∀y. SFUNPOW numeral$iDUB y 0 = 0) ∧
        (∀n x.
           SFUNPOW numeral$iDUB <..num comp'n..> x =
           SFUNPOW (FDUB numeral$iDUB) <..num comp'n..> <..num comp'n..> ) ∧
        ∀n x.
          SFUNPOW numeral$iDUB <..num comp'n..> x =
          SFUNPOW (FDUB numeral$iDUB) <..num comp'n..> <..num comp'n..>
   
   [NUMERAL_TIMES_2EXP]  Theorem
      
      ⊢ (∀n. TIMES_2EXP n 0 = 0) ∧
        ∀n x. TIMES_2EXP n <..num comp'n..> = <..num comp'n..>
   
   [NUMERAL_iDIV2]  Theorem
      
      ⊢ numeral_bit$iDIV2 ZERO = ZERO ∧
        numeral_bit$iDIV2 (numeral_bit$iSUC ZERO) = ZERO ∧
        numeral_bit$iDIV2 <..num comp'n..> = n ∧
        numeral_bit$iDIV2 (numeral_bit$iSUC <..num comp'n..> ) =
        numeral_bit$iSUC n ∧
        numeral_bit$iDIV2 <..num comp'n..> = numeral_bit$iSUC n ∧
        numeral_bit$iDIV2 (numeral_bit$iSUC <..num comp'n..> ) =
        numeral_bit$iSUC n ∧ <..num comp'n..> = <..num comp'n..>
   
   [iBITWISE]  Theorem
      
      ⊢ (∀opr a b. numeral_bit$iBITWISE 0 opr a b = ZERO) ∧
        (∀x opr a b.
           numeral_bit$iBITWISE <..num comp'n..> opr a b =
           (let
              w =
                numeral_bit$iBITWISE (<..num comp'n..> − 1) opr (DIV2 a)
                  (DIV2 b)
            in
              if opr (ODD a) (ODD b) then <..num comp'n..>
              else <..num comp'n..> )) ∧
        ∀x opr a b.
          numeral_bit$iBITWISE <..num comp'n..> opr a b =
          (let
             w =
               numeral_bit$iBITWISE <..num comp'n..> opr (DIV2 a) (DIV2 b)
           in
             if opr (ODD a) (ODD b) then <..num comp'n..>
             else <..num comp'n..> )
   
   [iDUB_NUMERAL]  Theorem
      
      ⊢ <..num comp'n..> = <..num comp'n..>
   
   [numeral_ilog2]  Theorem
      
      ⊢ numeral_bit$iLOG2 ZERO = 0 ∧
        (∀n. numeral_bit$iLOG2 <..num comp'n..> = 1 + numeral_bit$iLOG2 n) ∧
        ∀n. numeral_bit$iLOG2 <..num comp'n..> = 1 + numeral_bit$iLOG2 n
   
   [numeral_imod_2exp]  Theorem
      
      ⊢ (∀n. numeral_bit$iMOD_2EXP 0 n = ZERO) ∧
        (∀x n. numeral_bit$iMOD_2EXP x ZERO = ZERO) ∧
        (∀x n.
           numeral_bit$iMOD_2EXP <..num comp'n..> <..num comp'n..> =
           <..num comp'n..> ) ∧
        (∀x n.
           numeral_bit$iMOD_2EXP <..num comp'n..> <..num comp'n..> =
           <..num comp'n..> ) ∧
        (∀x n.
           numeral_bit$iMOD_2EXP <..num comp'n..> <..num comp'n..> =
           <..num comp'n..> ) ∧
        ∀x n.
          numeral_bit$iMOD_2EXP <..num comp'n..> <..num comp'n..> =
          <..num comp'n..>
   
   [numeral_log2]  Theorem
      
      ⊢ (∀n. LOG2 <..num comp'n..> = numeral_bit$iLOG2 <..num comp'n..> ) ∧
        ∀n. LOG2 <..num comp'n..> = numeral_bit$iLOG2 <..num comp'n..>
   
   [numeral_mod2]  Theorem
      
      ⊢ 0 MOD 2 = 0 ∧ (∀n. <..num comp'n..> MOD 2 = 1) ∧
        ∀n. <..num comp'n..> MOD 2 = 0
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Trindemossen-2