--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* ********************************************************************** *)
+(* Progetto FreeScale *)
+(* *)
+(* Sviluppato da: Ing. Cosimo Oliboni, oliboni@cs.unibo.it *)
+(* Sviluppo: 2008-2010 *)
+(* *)
+(* ********************************************************************** *)
+
+include "common/nat.ma".
+include "num/word32.ma".
+
+(* ************************ *)
+(* NUMERI FINITI → NATURALI *)
+(* ************************ *)
+
+nlet rec nat_of_qu_aux n (r:rec_quatern n) on r ≝
+ match r with
+ [ qu_O ⇒ O
+ | qu_S t n' ⇒ S (nat_of_qu_aux t n')
+ ].
+
+ndefinition nat_of_qu : quatern → nat ≝ λn.nat_of_qu_aux n (qu_to_recqu n).
+
+nlet rec nat_of_oct_aux n (r:rec_oct n) on r ≝
+ match r with
+ [ oc_O ⇒ O
+ | oc_S t n' ⇒ S (nat_of_oct_aux t n')
+ ].
+
+ndefinition nat_of_oct : oct → nat ≝ λn.nat_of_oct_aux n (oct_to_recoct n).
+
+nlet rec nat_of_ex_aux n (r:rec_exadecim n) on r ≝
+ match r with
+ [ ex_O ⇒ O
+ | ex_S t n' ⇒ S (nat_of_ex_aux t n')
+ ].
+
+ndefinition nat_of_ex : exadecim → nat ≝ λn.nat_of_ex_aux n (ex_to_recex n).
+
+nlet rec nat_of_bit_aux n (r:rec_bitrigesim n) on r ≝
+ match r with
+ [ bi_O ⇒ O
+ | bi_S t n' ⇒ S (nat_of_bit_aux t n')
+ ].
+
+ndefinition nat_of_bit : bitrigesim → nat ≝ λn.nat_of_bit_aux n (bit_to_recbit n).
+
+nlet rec nat_of_b8_aux n (r:rec_byte8 n) on r ≝
+ match r with
+ [ b8_O ⇒ O
+ | b8_S t n' ⇒ S (nat_of_b8_aux t n')
+ ].
+
+ndefinition nat_of_b8 : byte8 → nat ≝ λn:byte8.nat_of_b8_aux n (b8_to_recb8 n).
+
+nlet rec nat_of_w16_aux n (r:rec_word16 n) on r : nat ≝
+ match r with
+ [ w16_O ⇒ O
+ | w16_S t n' ⇒ S (nat_of_w16_aux t n')
+ ].
+
+ndefinition nat_of_w16 : word16 → nat ≝ λn:word16.nat_of_w16_aux n (w16_to_recw16 n).
+
+ndefinition nat_of_w32 : word32 → nat ≝ λn:word32.(nat65536 * (nat_of_w16 (w32h n))) + (nat_of_w16 (w32l n)).