]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/library/freescale/exadecim.ma
freescale moved under contribs. contribs made relocatable
[helm.git] / helm / software / matita / library / freescale / exadecim.ma
diff --git a/helm/software/matita/library/freescale/exadecim.ma b/helm/software/matita/library/freescale/exadecim.ma
deleted file mode 100644 (file)
index 246ab98..0000000
+++ /dev/null
@@ -1,1823 +0,0 @@
-(**************************************************************************)
-(*       ___                                                              *)
-(*      ||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:                                                         *)
-(*   Cosimo Oliboni, oliboni@cs.unibo.it                                  *)
-(*                                                                        *)
-(* Questo materiale fa parte della tesi:                                  *)
-(*   "Formalizzazione Interattiva dei Microcontroller a 8bit FreeScale"   *)
-(*                                                                        *)
-(*                    data ultima modifica 15/11/2007                     *)
-(* ********************************************************************** *)
-
-include "freescale/extra.ma".
-
-(* ***************************** *)
-(* DEFINIZIONE DEGLI ESADECIMALI *)
-(* ***************************** *)
-
-inductive exadecim : Type ≝
-  x0: exadecim
-| x1: exadecim
-| x2: exadecim
-| x3: exadecim
-| x4: exadecim
-| x5: exadecim
-| x6: exadecim
-| x7: exadecim
-| x8: exadecim
-| x9: exadecim
-| xA: exadecim
-| xB: exadecim
-| xC: exadecim
-| xD: exadecim
-| xE: exadecim
-| xF: exadecim.
-
-(* operatore = *)
-definition eq_ex ≝
-λe1,e2:exadecim.
- match e1 with
-  [ x0 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x1 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ true  | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x2 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ true  | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x3 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ true
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x4 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ true  | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x5 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ true  | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x6 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ true  | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x7 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ true 
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x8 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ true  | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x9 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ true  | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | xA ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ true  | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | xB ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ true 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | xC ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ true  | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | xD ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ true  | xE ⇒ false | xF ⇒ false ] 
-  | xE ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ true  | xF ⇒ false ] 
-  | xF ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ true ]
-  ].
-
-(* operatore < *)
-definition lt_ex ≝
-λe1,e2:exadecim.
- match e1 with
-  [ x0 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ true | x2 ⇒ true | x3 ⇒ true
-   | x4 ⇒ true  | x5 ⇒ true | x6 ⇒ true | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true | xA ⇒ true | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true | xE ⇒ true | xF ⇒ true ] 
-  | x1 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ true | x3 ⇒ true
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true | xF ⇒ true ] 
-  | x2 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ true
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x3 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x4 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x5 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x6 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x7 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false 
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x8 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x9 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xA ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ true
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xB ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xC ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xD ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ true  | xF ⇒ true ] 
-  | xE ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ true ] 
-  | xF ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  ].
-
-(* operatore ≤ *)
-definition le_ex ≝
-λe1,e2:exadecim.
- match e1 with
-  [ x0 ⇒ match e2 with
-   [ x0 ⇒ true | x1 ⇒ true | x2 ⇒ true | x3 ⇒ true 
-   | x4 ⇒ true | x5 ⇒ true | x6 ⇒ true | x7 ⇒ true
-   | x8 ⇒ true | x9 ⇒ true | xA ⇒ true | xB ⇒ true 
-   | xC ⇒ true | xD ⇒ true | xE ⇒ true | xF ⇒ true ] 
-  | x1 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ true | x2 ⇒ true | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true | x6 ⇒ true | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true | xA ⇒ true | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true | xE ⇒ true | xF ⇒ true ] 
-  | x2 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ true | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true | xF ⇒ true ] 
-  | x3 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x4 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x5 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x6 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x7 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ true 
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x8 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | x9 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xA ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xB ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xC ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xD ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ] 
-  | xE ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ true  | xF ⇒ true ] 
-  | xF ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ true ]
-  ].
-
-(* operatore > *)
-definition gt_ex ≝
-λe1,e2:exadecim.
- match e1 with
-  [ x0 ⇒ match e2 with
-   [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x1 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x2 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x3 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x4 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x5 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x6 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x7 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | x8 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | x9 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xA ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xB ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xC ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xD ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xE ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ false | xF ⇒ false ]
-  | xF ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ false ]
-  ].
-
-(* operatore ≥ *)
-definition ge_ex ≝
-λe1,e2:exadecim.
- match e1 with
-  [ x0 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x1 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ false | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x2 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ false 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x3 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x4 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x5 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ false | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x6 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ false
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ] 
-  | x7 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ false | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | x8 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ false | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | x9 ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ false | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xA ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ false 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xB ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ false | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xC ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ false | xE ⇒ false | xF ⇒ false ]
-  | xD ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ false | xF ⇒ false ]
-  | xE ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ false ]
-  | xF ⇒ match e2 with
-   [ x0 ⇒ true  | x1 ⇒ true  | x2 ⇒ true  | x3 ⇒ true 
-   | x4 ⇒ true  | x5 ⇒ true  | x6 ⇒ true  | x7 ⇒ true
-   | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true 
-   | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ]
-  ].
-
-(* operatore and *)
-definition and_ex ≝
-λe1,e2:exadecim.match e1 with
- [ x0 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x0 | x3 ⇒ x0 
-  | x4 ⇒ x0 | x5 ⇒ x0 | x6 ⇒ x0 | x7 ⇒ x0
-  | x8 ⇒ x0 | x9 ⇒ x0 | xA ⇒ x0 | xB ⇒ x0 
-  | xC ⇒ x0 | xD ⇒ x0 | xE ⇒ x0 | xF ⇒ x0 ]
- | x1 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x0 | x3 ⇒ x1 
-  | x4 ⇒ x0 | x5 ⇒ x1 | x6 ⇒ x0 | x7 ⇒ x1
-  | x8 ⇒ x0 | x9 ⇒ x1 | xA ⇒ x0 | xB ⇒ x1 
-  | xC ⇒ x0 | xD ⇒ x1 | xE ⇒ x0 | xF ⇒ x1 ]
- | x2 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x2 | x3 ⇒ x2 
-  | x4 ⇒ x0 | x5 ⇒ x0 | x6 ⇒ x2 | x7 ⇒ x2
-  | x8 ⇒ x0 | x9 ⇒ x0 | xA ⇒ x2 | xB ⇒ x2 
-  | xC ⇒ x0 | xD ⇒ x0 | xE ⇒ x2 | xF ⇒ x2 ]
- | x3 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x0 | x5 ⇒ x1 | x6 ⇒ x2 | x7 ⇒ x3
-  | x8 ⇒ x0 | x9 ⇒ x1 | xA ⇒ x2 | xB ⇒ x3 
-  | xC ⇒ x0 | xD ⇒ x1 | xE ⇒ x2 | xF ⇒ x3 ]
- | x4 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x0 | x3 ⇒ x0 
-  | x4 ⇒ x4 | x5 ⇒ x4 | x6 ⇒ x4 | x7 ⇒ x4
-  | x8 ⇒ x0 | x9 ⇒ x0 | xA ⇒ x0 | xB ⇒ x0 
-  | xC ⇒ x4 | xD ⇒ x4 | xE ⇒ x4 | xF ⇒ x4 ]
- | x5 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x0 | x3 ⇒ x1 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x4 | x7 ⇒ x5
-  | x8 ⇒ x0 | x9 ⇒ x1 | xA ⇒ x0 | xB ⇒ x1 
-  | xC ⇒ x4 | xD ⇒ x5 | xE ⇒ x4 | xF ⇒ x5 ]
- | x6 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x2 | x3 ⇒ x2 
-  | x4 ⇒ x4 | x5 ⇒ x4 | x6 ⇒ x6 | x7 ⇒ x6
-  | x8 ⇒ x0 | x9 ⇒ x0 | xA ⇒ x2 | xB ⇒ x2 
-  | xC ⇒ x4 | xD ⇒ x4 | xE ⇒ x6 | xF ⇒ x6 ]
- | x7 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ x0 | x9 ⇒ x1 | xA ⇒ x2 | xB ⇒ x3 
-  | xC ⇒ x4 | xD ⇒ x5 | xE ⇒ x6 | xF ⇒ x7 ]
- | x8 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x0 | x3 ⇒ x0 
-  | x4 ⇒ x0 | x5 ⇒ x0 | x6 ⇒ x0 | x7 ⇒ x0
-  | x8 ⇒ x8 | x9 ⇒ x8 | xA ⇒ x8 | xB ⇒ x8 
-  | xC ⇒ x8 | xD ⇒ x8 | xE ⇒ x8 | xF ⇒ x8 ]
- | x9 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x0 | x3 ⇒ x1 
-  | x4 ⇒ x0 | x5 ⇒ x1 | x6 ⇒ x0 | x7 ⇒ x1
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ x8 | xB ⇒ x9 
-  | xC ⇒ x8 | xD ⇒ x9 | xE ⇒ x8 | xF ⇒ x9 ]
- | xA ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x2 | x3 ⇒ x2 
-  | x4 ⇒ x0 | x5 ⇒ x0 | x6 ⇒ x2 | x7 ⇒ x2
-  | x8 ⇒ x8 | x9 ⇒ x8 | xA ⇒ xA | xB ⇒ xA 
-  | xC ⇒ x8 | xD ⇒ x8 | xE ⇒ xA | xF ⇒ xA ]
- | xB ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x0 | x5 ⇒ x1 | x6 ⇒ x2 | x7 ⇒ x3
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ x8 | xD ⇒ x9 | xE ⇒ xA | xF ⇒ xB ]
- | xC ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x0 | x3 ⇒ x0 
-  | x4 ⇒ x4 | x5 ⇒ x4 | x6 ⇒ x4 | x7 ⇒ x4
-  | x8 ⇒ x8 | x9 ⇒ x8 | xA ⇒ x8 | xB ⇒ x8 
-  | xC ⇒ xC | xD ⇒ xC | xE ⇒ xC | xF ⇒ xC ] 
- | xD ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x0 | x3 ⇒ x1 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x4 | x7 ⇒ x5
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ x8 | xB ⇒ x9 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xC | xF ⇒ xD ] 
- | xE ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x0 | x2 ⇒ x2 | x3 ⇒ x2 
-  | x4 ⇒ x4 | x5 ⇒ x4 | x6 ⇒ x6 | x7 ⇒ x6
-  | x8 ⇒ x8 | x9 ⇒ x8 | xA ⇒ xA | xB ⇒ xA 
-  | xC ⇒ xC | xD ⇒ xC | xE ⇒ xE | xF ⇒ xE ] 
- | xF ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ]
- ]. 
-
-(* operatore or *)
-definition or_ex ≝
-λe1,e2:exadecim.match e1 with
- [ x0 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ]
- | x1 ⇒ match e2 with
-  [ x0 ⇒ x1 | x1 ⇒ x1 | x2 ⇒ x3 | x3 ⇒ x3 
-  | x4 ⇒ x5 | x5 ⇒ x5 | x6 ⇒ x7 | x7 ⇒ x7
-  | x8 ⇒ x9 | x9 ⇒ x9 | xA ⇒ xB | xB ⇒ xB 
-  | xC ⇒ xD | xD ⇒ xD | xE ⇒ xF | xF ⇒ xF ]
- | x2 ⇒ match e2 with
-  [ x0 ⇒ x2 | x1 ⇒ x3 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x6 | x5 ⇒ x7 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ xA | x9 ⇒ xB | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xE | xD ⇒ xF | xE ⇒ xE | xF ⇒ xF ]
- | x3 ⇒ match e2 with
-  [ x0 ⇒ x3 | x1 ⇒ x3 | x2 ⇒ x3 | x3 ⇒ x3 
-  | x4 ⇒ x7 | x5 ⇒ x7 | x6 ⇒ x7 | x7 ⇒ x7
-  | x8 ⇒ xB | x9 ⇒ xB | xA ⇒ xB | xB ⇒ xB 
-  | xC ⇒ xF | xD ⇒ xF | xE ⇒ xF | xF ⇒ xF ]
- | x4 ⇒ match e2 with
-  [ x0 ⇒ x4 | x1 ⇒ x5 | x2 ⇒ x6 | x3 ⇒ x7 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ xC | x9 ⇒ xD | xA ⇒ xE | xB ⇒ xF 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ]
- | x5 ⇒ match e2 with
-  [ x0 ⇒ x5 | x1 ⇒ x5 | x2 ⇒ x7 | x3 ⇒ x7 
-  | x4 ⇒ x5 | x5 ⇒ x5 | x6 ⇒ x7 | x7 ⇒ x7
-  | x8 ⇒ xD | x9 ⇒ xD | xA ⇒ xF | xB ⇒ xF 
-  | xC ⇒ xD | xD ⇒ xD | xE ⇒ xF | xF ⇒ xF ]
- | x6 ⇒ match e2 with
-  [ x0 ⇒ x6 | x1 ⇒ x7 | x2 ⇒ x6 | x3 ⇒ x7 
-  | x4 ⇒ x6 | x5 ⇒ x7 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ xE | x9 ⇒ xF | xA ⇒ xE | xB ⇒ xF 
-  | xC ⇒ xE | xD ⇒ xF | xE ⇒ xE | xF ⇒ xF ]
- | x7 ⇒ match e2 with
-  [ x0 ⇒ x7 | x1 ⇒ x7 | x2 ⇒ x7 | x3 ⇒ x7 
-  | x4 ⇒ x7 | x5 ⇒ x7 | x6 ⇒ x7 | x7 ⇒ x7
-  | x8 ⇒ xF | x9 ⇒ xF | xA ⇒ xF | xB ⇒ xF 
-  | xC ⇒ xF | xD ⇒ xF | xE ⇒ xF | xF ⇒ xF ]
- | x8 ⇒ match e2 with
-  [ x0 ⇒ x8 | x1 ⇒ x9 | x2 ⇒ xA | x3 ⇒ xB 
-  | x4 ⇒ xC | x5 ⇒ xD | x6 ⇒ xE | x7 ⇒ xF
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ]
- | x9 ⇒ match e2 with
-  [ x0 ⇒ x9 | x1 ⇒ x9 | x2 ⇒ xB | x3 ⇒ xB 
-  | x4 ⇒ xD | x5 ⇒ xD | x6 ⇒ xF | x7 ⇒ xF
-  | x8 ⇒ x9 | x9 ⇒ x9 | xA ⇒ xB | xB ⇒ xB 
-  | xC ⇒ xD | xD ⇒ xD | xE ⇒ xF | xF ⇒ xF ]
- | xA ⇒ match e2 with
-  [ x0 ⇒ xA | x1 ⇒ xB | x2 ⇒ xA | x3 ⇒ xB 
-  | x4 ⇒ xE | x5 ⇒ xF | x6 ⇒ xE | x7 ⇒ xF
-  | x8 ⇒ xA | x9 ⇒ xB | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xE | xD ⇒ xF | xE ⇒ xE | xF ⇒ xF ]
- | xB ⇒ match e2 with
-  [ x0 ⇒ xB | x1 ⇒ xB | x2 ⇒ xB | x3 ⇒ xB 
-  | x4 ⇒ xF | x5 ⇒ xF | x6 ⇒ xF | x7 ⇒ xF
-  | x8 ⇒ xB | x9 ⇒ xB | xA ⇒ xB | xB ⇒ xB 
-  | xC ⇒ xF | xD ⇒ xF | xE ⇒ xF | xF ⇒ xF ]
- | xC ⇒ match e2 with
-  [ x0 ⇒ xC | x1 ⇒ xD | x2 ⇒ xE | x3 ⇒ xF 
-  | x4 ⇒ xC | x5 ⇒ xD | x6 ⇒ xE | x7 ⇒ xF
-  | x8 ⇒ xC | x9 ⇒ xD | xA ⇒ xE | xB ⇒ xF 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ]
- | xD ⇒ match e2 with
-  [ x0 ⇒ xD | x1 ⇒ xD | x2 ⇒ xF | x3 ⇒ xF 
-  | x4 ⇒ xD | x5 ⇒ xD | x6 ⇒ xF | x7 ⇒ xF
-  | x8 ⇒ xD | x9 ⇒ xD | xA ⇒ xF | xB ⇒ xF 
-  | xC ⇒ xD | xD ⇒ xD | xE ⇒ xF | xF ⇒ xF ]
- | xE ⇒ match e2 with
-  [ x0 ⇒ xE | x1 ⇒ xF | x2 ⇒ xE | x3 ⇒ xF 
-  | x4 ⇒ xE | x5 ⇒ xF | x6 ⇒ xE | x7 ⇒ xF
-  | x8 ⇒ xE | x9 ⇒ xF | xA ⇒ xE | xB ⇒ xF 
-  | xC ⇒ xE | xD ⇒ xF | xE ⇒ xE | xF ⇒ xF ]
- | xF ⇒ match e2 with
-  [ x0 ⇒ xF | x1 ⇒ xF | x2 ⇒ xF | x3 ⇒ xF 
-  | x4 ⇒ xF | x5 ⇒ xF | x6 ⇒ xF | x7 ⇒ xF
-  | x8 ⇒ xF | x9 ⇒ xF | xA ⇒ xF | xB ⇒ xF 
-  | xC ⇒ xF | xD ⇒ xF | xE ⇒ xF | xF ⇒ xF ]
- ].
-
-(* operatore xor *)
-definition xor_ex ≝
-λe1,e2:exadecim.match e1 with
- [ x0 ⇒ match e2 with
-  [ x0 ⇒ x0 | x1 ⇒ x1 | x2 ⇒ x2 | x3 ⇒ x3 
-  | x4 ⇒ x4 | x5 ⇒ x5 | x6 ⇒ x6 | x7 ⇒ x7
-  | x8 ⇒ x8 | x9 ⇒ x9 | xA ⇒ xA | xB ⇒ xB 
-  | xC ⇒ xC | xD ⇒ xD | xE ⇒ xE | xF ⇒ xF ] 
- | x1 ⇒ match e2 with
-  [ x0 ⇒ x1 | x1 ⇒ x0 | x2 ⇒ x3 | x3 ⇒ x2 
-  | x4 ⇒ x5 | x5 ⇒ x4 | x6 ⇒ x7 | x7 ⇒ x6
-  | x8 ⇒ x9 | x9 ⇒ x8 | xA ⇒ xB | xB ⇒ xA 
-  | xC ⇒ xD | xD ⇒ xC | xE ⇒ xF | xF ⇒ xE ] 
- | x2 ⇒ match e2 with
-  [ x0 ⇒ x2 | x1 ⇒ x3 | x2 ⇒ x0 | x3 ⇒ x1 
-  | x4 ⇒ x6 | x5 ⇒ x7 | x6 ⇒ x4 | x7 ⇒ x5
-  | x8 ⇒ xA | x9 ⇒ xB | xA ⇒ x8 | xB ⇒ x9 
-  | xC ⇒ xE | xD ⇒ xF | xE ⇒ xC | xF ⇒ xD ] 
- | x3 ⇒ match e2 with
-  [ x0 ⇒ x3 | x1 ⇒ x2 | x2 ⇒ x1 | x3 ⇒ x0 
-  | x4 ⇒ x7 | x5 ⇒ x6 | x6 ⇒ x5 | x7 ⇒ x4
-  | x8 ⇒ xB | x9 ⇒ xA | xA ⇒ x9 | xB ⇒ x8 
-  | xC ⇒ xF | xD ⇒ xE | xE ⇒ xD | xF ⇒ xC ] 
- | x4 ⇒ match e2 with
-  [ x0 ⇒ x4 | x1 ⇒ x5 | x2 ⇒ x6 | x3 ⇒ x7 
-  | x4 ⇒ x0 | x5 ⇒ x1 | x6 ⇒ x2 | x7 ⇒ x3
-  | x8 ⇒ xC | x9 ⇒ xD | xA ⇒ xE | xB ⇒ xF 
-  | xC ⇒ x8 | xD ⇒ x9 | xE ⇒ xA | xF ⇒ xB ] 
- | x5 ⇒ match e2 with
-  [ x0 ⇒ x5 | x1 ⇒ x4 | x2 ⇒ x7 | x3 ⇒ x6 
-  | x4 ⇒ x1 | x5 ⇒ x0 | x6 ⇒ x3 | x7 ⇒ x2
-  | x8 ⇒ xD | x9 ⇒ xC | xA ⇒ xF | xB ⇒ xE 
-  | xC ⇒ x9 | xD ⇒ x8 | xE ⇒ xB | xF ⇒ xA ] 
- | x6 ⇒ match e2 with
-  [ x0 ⇒ x6 | x1 ⇒ x7 | x2 ⇒ x4 | x3 ⇒ x5 
-  | x4 ⇒ x2 | x5 ⇒ x3 | x6 ⇒ x0 | x7 ⇒ x1
-  | x8 ⇒ xE | x9 ⇒ xF | xA ⇒ xC | xB ⇒ xD 
-  | xC ⇒ xA | xD ⇒ xB | xE ⇒ x8 | xF ⇒ x9 ] 
- | x7 ⇒ match e2 with
-  [ x0 ⇒ x7 | x1 ⇒ x6 | x2 ⇒ x5 | x3 ⇒ x4 
-  | x4 ⇒ x3 | x5 ⇒ x2 | x6 ⇒ x1 | x7 ⇒ x0
-  | x8 ⇒ xF | x9 ⇒ xE | xA ⇒ xD | xB ⇒ xC 
-  | xC ⇒ xB | xD ⇒ xA | xE ⇒ x9 | xF ⇒ x8 ] 
- | x8 ⇒ match e2 with
-  [ x0 ⇒ x8 | x1 ⇒ x9 | x2 ⇒ xA | x3 ⇒ xB 
-  | x4 ⇒ xC | x5 ⇒ xD | x6 ⇒ xE | x7 ⇒ xF
-  | x8 ⇒ x0 | x9 ⇒ x1 | xA ⇒ x2 | xB ⇒ x3 
-  | xC ⇒ x4 | xD ⇒ x5 | xE ⇒ x6 | xF ⇒ x7 ] 
- | x9 ⇒ match e2 with
-  [ x0 ⇒ x9 | x1 ⇒ x8 | x2 ⇒ xB | x3 ⇒ xA 
-  | x4 ⇒ xD | x5 ⇒ xC | x6 ⇒ xF | x7 ⇒ xE
-  | x8 ⇒ x1 | x9 ⇒ x0 | xA ⇒ x3 | xB ⇒ x2 
-  | xC ⇒ x5 | xD ⇒ x4 | xE ⇒ x7 | xF ⇒ x6 ] 
- | xA ⇒ match e2 with
-  [ x0 ⇒ xA | x1 ⇒ xB | x2 ⇒ x8 | x3 ⇒ x9 
-  | x4 ⇒ xE | x5 ⇒ xF | x6 ⇒ xC | x7 ⇒ xD
-  | x8 ⇒ x2 | x9 ⇒ x3 | xA ⇒ x0 | xB ⇒ x1 
-  | xC ⇒ x6 | xD ⇒ x7 | xE ⇒ x4 | xF ⇒ x5 ] 
- | xB ⇒ match e2 with
-  [ x0 ⇒ xB | x1 ⇒ xA | x2 ⇒ x9 | x3 ⇒ x8 
-  | x4 ⇒ xF | x5 ⇒ xE | x6 ⇒ xD | x7 ⇒ xC
-  | x8 ⇒ x3 | x9 ⇒ x2 | xA ⇒ x1 | xB ⇒ x0 
-  | xC ⇒ x7 | xD ⇒ x6 | xE ⇒ x5 | xF ⇒ x4 ]
- | xC ⇒ match e2 with
-  [ x0 ⇒ xC | x1 ⇒ xD | x2 ⇒ xE | x3 ⇒ xF 
-  | x4 ⇒ x8 | x5 ⇒ x9 | x6 ⇒ xA | x7 ⇒ xB
-  | x8 ⇒ x4 | x9 ⇒ x5 | xA ⇒ x6 | xB ⇒ x7 
-  | xC ⇒ x0 | xD ⇒ x1 | xE ⇒ x2 | xF ⇒ x3 ] 
- | xD ⇒ match e2 with
-  [ x0 ⇒ xD | x1 ⇒ xC | x2 ⇒ xF | x3 ⇒ xE 
-  | x4 ⇒ x9 | x5 ⇒ x8 | x6 ⇒ xB | x7 ⇒ xA
-  | x8 ⇒ x5 | x9 ⇒ x4 | xA ⇒ x7 | xB ⇒ x6 
-  | xC ⇒ x1 | xD ⇒ x0 | xE ⇒ x3 | xF ⇒ x2 ]
- | xE ⇒ match e2 with
-  [ x0 ⇒ xE | x1 ⇒ xF | x2 ⇒ xC | x3 ⇒ xD 
-  | x4 ⇒ xA | x5 ⇒ xB | x6 ⇒ x8 | x7 ⇒ x9
-  | x8 ⇒ x6 | x9 ⇒ x7 | xA ⇒ x4 | xB ⇒ x5 
-  | xC ⇒ x2 | xD ⇒ x3 | xE ⇒ x0 | xF ⇒ x1 ] 
- | xF ⇒ match e2 with
-  [ x0 ⇒ xF | x1 ⇒ xE | x2 ⇒ xD | x3 ⇒ xC 
-  | x4 ⇒ xB | x5 ⇒ xA | x6 ⇒ x9 | x7 ⇒ x8
-  | x8 ⇒ x7 | x9 ⇒ x6 | xA ⇒ x5 | xB ⇒ x4 
-  | xC ⇒ x3 | xD ⇒ x2 | xE ⇒ x1 | xF ⇒ x0 ] 
- ].
-
-(* operatore rotazione destra con carry *)
-definition rcr_ex ≝
-λe:exadecim.λc:bool.match c with
- [ true ⇒ match e with
-  [ x0 ⇒ pair exadecim bool x8 false | x1 ⇒ pair exadecim bool x8 true
-  | x2 ⇒ pair exadecim bool x9 false | x3 ⇒ pair exadecim bool x9 true
-  | x4 ⇒ pair exadecim bool xA false | x5 ⇒ pair exadecim bool xA true
-  | x6 ⇒ pair exadecim bool xB false | x7 ⇒ pair exadecim bool xB true
-  | x8 ⇒ pair exadecim bool xC false | x9 ⇒ pair exadecim bool xC true
-  | xA ⇒ pair exadecim bool xD false | xB ⇒ pair exadecim bool xD true
-  | xC ⇒ pair exadecim bool xE false | xD ⇒ pair exadecim bool xE true
-  | xE ⇒ pair exadecim bool xF false | xF ⇒ pair exadecim bool xF true ]
- | false ⇒ match e with 
-  [ x0 ⇒ pair exadecim bool x0 false | x1 ⇒ pair exadecim bool x0 true
-  | x2 ⇒ pair exadecim bool x1 false | x3 ⇒ pair exadecim bool x1 true
-  | x4 ⇒ pair exadecim bool x2 false | x5 ⇒ pair exadecim bool x2 true
-  | x6 ⇒ pair exadecim bool x3 false | x7 ⇒ pair exadecim bool x3 true
-  | x8 ⇒ pair exadecim bool x4 false | x9 ⇒ pair exadecim bool x4 true
-  | xA ⇒ pair exadecim bool x5 false | xB ⇒ pair exadecim bool x5 true
-  | xC ⇒ pair exadecim bool x6 false | xD ⇒ pair exadecim bool x6 true
-  | xE ⇒ pair exadecim bool x7 false | xF ⇒ pair exadecim bool x7 true ]
- ].
-
-(* operatore shift destro *)
-definition shr_ex ≝
-λe:exadecim.match e with 
- [ x0 ⇒ pair exadecim bool x0 false | x1 ⇒ pair exadecim bool x0 true
- | x2 ⇒ pair exadecim bool x1 false | x3 ⇒ pair exadecim bool x1 true
- | x4 ⇒ pair exadecim bool x2 false | x5 ⇒ pair exadecim bool x2 true
- | x6 ⇒ pair exadecim bool x3 false | x7 ⇒ pair exadecim bool x3 true
- | x8 ⇒ pair exadecim bool x4 false | x9 ⇒ pair exadecim bool x4 true
- | xA ⇒ pair exadecim bool x5 false | xB ⇒ pair exadecim bool x5 true
- | xC ⇒ pair exadecim bool x6 false | xD ⇒ pair exadecim bool x6 true
- | xE ⇒ pair exadecim bool x7 false | xF ⇒ pair exadecim bool x7 true ].
-
-(* operatore rotazione destra *)
-definition ror_ex ≝
-λe:exadecim.match e with 
- [ x0 ⇒ x0 | x1 ⇒ x8 | x2 ⇒ x1 | x3 ⇒ x9
- | x4 ⇒ x2 | x5 ⇒ xA | x6 ⇒ x3 | x7 ⇒ xB 
- | x8 ⇒ x4 | x9 ⇒ xC | xA ⇒ x5 | xB ⇒ xD 
- | xC ⇒ x6 | xD ⇒ xE | xE ⇒ x7 | xF ⇒ xF ].
-
-(* operatore rotazione destra n-volte *)
-let rec ror_ex_n (e:exadecim) (n:nat) on n ≝
- match n with
-  [ O ⇒ e
-  | S n' ⇒ ror_ex_n (ror_ex e) n' ].
-
-(* operatore rotazione sinistra con carry *)
-definition rcl_ex ≝
-λe:exadecim.λc:bool.match c with
- [ true ⇒ match e with
-  [ x0 ⇒ pair exadecim bool x1 false | x1 ⇒ pair exadecim bool x3 false
-  | x2 ⇒ pair exadecim bool x5 false | x3 ⇒ pair exadecim bool x7 false
-  | x4 ⇒ pair exadecim bool x9 false | x5 ⇒ pair exadecim bool xB false
-  | x6 ⇒ pair exadecim bool xD false | x7 ⇒ pair exadecim bool xF false
-  | x8 ⇒ pair exadecim bool x1 true  | x9 ⇒ pair exadecim bool x3 true
-  | xA ⇒ pair exadecim bool x5 true  | xB ⇒ pair exadecim bool x7 true
-  | xC ⇒ pair exadecim bool x9 true  | xD ⇒ pair exadecim bool xB true
-  | xE ⇒ pair exadecim bool xD true  | xF ⇒ pair exadecim bool xF true ]
- | false ⇒ match e with
-  [ x0 ⇒ pair exadecim bool x0 false | x1 ⇒ pair exadecim bool x2 false
-  | x2 ⇒ pair exadecim bool x4 false | x3 ⇒ pair exadecim bool x6 false
-  | x4 ⇒ pair exadecim bool x8 false | x5 ⇒ pair exadecim bool xA false
-  | x6 ⇒ pair exadecim bool xC false | x7 ⇒ pair exadecim bool xE false
-  | x8 ⇒ pair exadecim bool x0 true  | x9 ⇒ pair exadecim bool x2 true
-  | xA ⇒ pair exadecim bool x4 true  | xB ⇒ pair exadecim bool x6 true
-  | xC ⇒ pair exadecim bool x8 true  | xD ⇒ pair exadecim bool xA true
-  | xE ⇒ pair exadecim bool xC true  | xF ⇒ pair exadecim bool xE true ]
- ].
-
-(* operatore shift sinistro *)
-definition shl_ex ≝
-λe:exadecim.match e with
- [ x0 ⇒ pair exadecim bool x0 false | x1 ⇒ pair exadecim bool x2 false
- | x2 ⇒ pair exadecim bool x4 false | x3 ⇒ pair exadecim bool x6 false
- | x4 ⇒ pair exadecim bool x8 false | x5 ⇒ pair exadecim bool xA false
- | x6 ⇒ pair exadecim bool xC false | x7 ⇒ pair exadecim bool xE false
- | x8 ⇒ pair exadecim bool x0 true  | x9 ⇒ pair exadecim bool x2 true
- | xA ⇒ pair exadecim bool x4 true  | xB ⇒ pair exadecim bool x6 true
- | xC ⇒ pair exadecim bool x8 true  | xD ⇒ pair exadecim bool xA true
- | xE ⇒ pair exadecim bool xC true  | xF ⇒ pair exadecim bool xE true ].
-
-(* operatore rotazione sinistra *)
-definition rol_ex ≝
-λe:exadecim.match e with
- [ x0 ⇒ x0 | x1 ⇒ x2 | x2 ⇒ x4 | x3 ⇒ x6
- | x4 ⇒ x8 | x5 ⇒ xA | x6 ⇒ xC | x7 ⇒ xE
- | x8 ⇒ x1 | x9 ⇒ x3 | xA ⇒ x5 | xB ⇒ x7
- | xC ⇒ x9 | xD ⇒ xB | xE ⇒ xD | xF ⇒ xF ].
-
-(* operatore rotazione sinistra n-volte *)
-let rec rol_ex_n (e:exadecim) (n:nat) on n ≝
- match n with
-  [ O ⇒ e
-  | S n' ⇒ rol_ex_n (rol_ex e) n' ].
-
-(* operatore not/complemento a 1 *)
-definition not_ex ≝
-λe:exadecim.match e with
- [ x0 ⇒ xF | x1 ⇒ xE | x2 ⇒ xD | x3 ⇒ xC
- | x4 ⇒ xB | x5 ⇒ xA | x6 ⇒ x9 | x7 ⇒ x8
- | x8 ⇒ x7 | x9 ⇒ x6 | xA ⇒ x5 | xB ⇒ x4
- | xC ⇒ x3 | xD ⇒ x2 | xE ⇒ x1 | xF ⇒ x0 ].
-
-(* operatore somma con carry *)
-definition plus_ex ≝
-λe1,e2:exadecim.λc:bool.
-  match c with
-   [ true ⇒
-      match e1 with
-       [ x0 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x1 false
-            | x1 ⇒ pair exadecim bool x2 false
-            | x2 ⇒ pair exadecim bool x3 false
-            | x3 ⇒ pair exadecim bool x4 false
-            | x4 ⇒ pair exadecim bool x5 false
-            | x5 ⇒ pair exadecim bool x6 false
-            | x6 ⇒ pair exadecim bool x7 false
-            | x7 ⇒ pair exadecim bool x8 false
-            | x8 ⇒ pair exadecim bool x9 false
-            | x9 ⇒ pair exadecim bool xA false
-            | xA ⇒ pair exadecim bool xB false
-            | xB ⇒ pair exadecim bool xC false
-            | xC ⇒ pair exadecim bool xD false
-            | xD ⇒ pair exadecim bool xE false
-            | xE ⇒ pair exadecim bool xF false
-            | xF ⇒ pair exadecim bool x0 true ] 
-       | x1 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x2 false
-            | x1 ⇒ pair exadecim bool x3 false
-            | x2 ⇒ pair exadecim bool x4 false
-            | x3 ⇒ pair exadecim bool x5 false
-            | x4 ⇒ pair exadecim bool x6 false
-            | x5 ⇒ pair exadecim bool x7 false
-            | x6 ⇒ pair exadecim bool x8 false
-            | x7 ⇒ pair exadecim bool x9 false
-            | x8 ⇒ pair exadecim bool xA false
-            | x9 ⇒ pair exadecim bool xB false
-            | xA ⇒ pair exadecim bool xC false
-            | xB ⇒ pair exadecim bool xD false
-            | xC ⇒ pair exadecim bool xE false
-            | xD ⇒ pair exadecim bool xF false
-            | xE ⇒ pair exadecim bool x0 true
-            | xF ⇒ pair exadecim bool x1 true ] 
-       | x2 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x3 false
-            | x1 ⇒ pair exadecim bool x4 false
-            | x2 ⇒ pair exadecim bool x5 false
-            | x3 ⇒ pair exadecim bool x6 false
-            | x4 ⇒ pair exadecim bool x7 false
-            | x5 ⇒ pair exadecim bool x8 false
-            | x6 ⇒ pair exadecim bool x9 false
-            | x7 ⇒ pair exadecim bool xA false
-            | x8 ⇒ pair exadecim bool xB false
-            | x9 ⇒ pair exadecim bool xC false
-            | xA ⇒ pair exadecim bool xD false
-            | xB ⇒ pair exadecim bool xE false
-            | xC ⇒ pair exadecim bool xF false
-            | xD ⇒ pair exadecim bool x0 true
-            | xE ⇒ pair exadecim bool x1 true
-            | xF ⇒ pair exadecim bool x2 true ] 
-       | x3 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x4 false
-            | x1 ⇒ pair exadecim bool x5 false
-            | x2 ⇒ pair exadecim bool x6 false
-            | x3 ⇒ pair exadecim bool x7 false
-            | x4 ⇒ pair exadecim bool x8 false
-            | x5 ⇒ pair exadecim bool x9 false
-            | x6 ⇒ pair exadecim bool xA false
-            | x7 ⇒ pair exadecim bool xB false
-            | x8 ⇒ pair exadecim bool xC false
-            | x9 ⇒ pair exadecim bool xD false
-            | xA ⇒ pair exadecim bool xE false
-            | xB ⇒ pair exadecim bool xF false
-            | xC ⇒ pair exadecim bool x0 true
-            | xD ⇒ pair exadecim bool x1 true
-            | xE ⇒ pair exadecim bool x2 true
-            | xF ⇒ pair exadecim bool x3 true ] 
-       | x4 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x5 false
-            | x1 ⇒ pair exadecim bool x6 false
-            | x2 ⇒ pair exadecim bool x7 false
-            | x3 ⇒ pair exadecim bool x8 false
-            | x4 ⇒ pair exadecim bool x9 false
-            | x5 ⇒ pair exadecim bool xA false
-            | x6 ⇒ pair exadecim bool xB false
-            | x7 ⇒ pair exadecim bool xC false
-            | x8 ⇒ pair exadecim bool xD false
-            | x9 ⇒ pair exadecim bool xE false
-            | xA ⇒ pair exadecim bool xF false
-            | xB ⇒ pair exadecim bool x0 true
-            | xC ⇒ pair exadecim bool x1 true
-            | xD ⇒ pair exadecim bool x2 true
-            | xE ⇒ pair exadecim bool x3 true
-            | xF ⇒ pair exadecim bool x4 true ] 
-       | x5 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x6 false
-            | x1 ⇒ pair exadecim bool x7 false
-            | x2 ⇒ pair exadecim bool x8 false
-            | x3 ⇒ pair exadecim bool x9 false
-            | x4 ⇒ pair exadecim bool xA false
-            | x5 ⇒ pair exadecim bool xB false
-            | x6 ⇒ pair exadecim bool xC false
-            | x7 ⇒ pair exadecim bool xD false
-            | x8 ⇒ pair exadecim bool xE false
-            | x9 ⇒ pair exadecim bool xF false
-            | xA ⇒ pair exadecim bool x0 true
-            | xB ⇒ pair exadecim bool x1 true
-            | xC ⇒ pair exadecim bool x2 true
-            | xD ⇒ pair exadecim bool x3 true
-            | xE ⇒ pair exadecim bool x4 true
-            | xF ⇒ pair exadecim bool x5 true ] 
-       | x6 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x7 false
-            | x1 ⇒ pair exadecim bool x8 false
-            | x2 ⇒ pair exadecim bool x9 false
-            | x3 ⇒ pair exadecim bool xA false
-            | x4 ⇒ pair exadecim bool xB false
-            | x5 ⇒ pair exadecim bool xC false
-            | x6 ⇒ pair exadecim bool xD false
-            | x7 ⇒ pair exadecim bool xE false
-            | x8 ⇒ pair exadecim bool xF false
-            | x9 ⇒ pair exadecim bool x0 true
-            | xA ⇒ pair exadecim bool x1 true
-            | xB ⇒ pair exadecim bool x2 true
-            | xC ⇒ pair exadecim bool x3 true
-            | xD ⇒ pair exadecim bool x4 true
-            | xE ⇒ pair exadecim bool x5 true
-            | xF ⇒ pair exadecim bool x6 true ] 
-       | x7 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x8 false
-            | x1 ⇒ pair exadecim bool x9 false
-            | x2 ⇒ pair exadecim bool xA false
-            | x3 ⇒ pair exadecim bool xB false
-            | x4 ⇒ pair exadecim bool xC false
-            | x5 ⇒ pair exadecim bool xD false
-            | x6 ⇒ pair exadecim bool xE false
-            | x7 ⇒ pair exadecim bool xF false
-            | x8 ⇒ pair exadecim bool x0 true
-            | x9 ⇒ pair exadecim bool x1 true
-            | xA ⇒ pair exadecim bool x2 true
-            | xB ⇒ pair exadecim bool x3 true
-            | xC ⇒ pair exadecim bool x4 true
-            | xD ⇒ pair exadecim bool x5 true
-            | xE ⇒ pair exadecim bool x6 true
-            | xF ⇒ pair exadecim bool x7 true ] 
-       | x8 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x9 false
-            | x1 ⇒ pair exadecim bool xA false
-            | x2 ⇒ pair exadecim bool xB false
-            | x3 ⇒ pair exadecim bool xC false
-            | x4 ⇒ pair exadecim bool xD false
-            | x5 ⇒ pair exadecim bool xE false
-            | x6 ⇒ pair exadecim bool xF false
-            | x7 ⇒ pair exadecim bool x0 true
-            | x8 ⇒ pair exadecim bool x1 true
-            | x9 ⇒ pair exadecim bool x2 true
-            | xA ⇒ pair exadecim bool x3 true
-            | xB ⇒ pair exadecim bool x4 true
-            | xC ⇒ pair exadecim bool x5 true
-            | xD ⇒ pair exadecim bool x6 true
-            | xE ⇒ pair exadecim bool x7 true
-            | xF ⇒ pair exadecim bool x8 true ] 
-       | x9 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xA false
-            | x1 ⇒ pair exadecim bool xB false
-            | x2 ⇒ pair exadecim bool xC false
-            | x3 ⇒ pair exadecim bool xD false
-            | x4 ⇒ pair exadecim bool xE false
-            | x5 ⇒ pair exadecim bool xF false
-            | x6 ⇒ pair exadecim bool x0 true
-            | x7 ⇒ pair exadecim bool x1 true
-            | x8 ⇒ pair exadecim bool x2 true
-            | x9 ⇒ pair exadecim bool x3 true
-            | xA ⇒ pair exadecim bool x4 true
-            | xB ⇒ pair exadecim bool x5 true
-            | xC ⇒ pair exadecim bool x6 true
-            | xD ⇒ pair exadecim bool x7 true
-            | xE ⇒ pair exadecim bool x8 true
-            | xF ⇒ pair exadecim bool x9 true ] 
-       | xA ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xB false
-            | x1 ⇒ pair exadecim bool xC false
-            | x2 ⇒ pair exadecim bool xD false
-            | x3 ⇒ pair exadecim bool xE false
-            | x4 ⇒ pair exadecim bool xF false
-            | x5 ⇒ pair exadecim bool x0 true
-            | x6 ⇒ pair exadecim bool x1 true
-            | x7 ⇒ pair exadecim bool x2 true
-            | x8 ⇒ pair exadecim bool x3 true
-            | x9 ⇒ pair exadecim bool x4 true
-            | xA ⇒ pair exadecim bool x5 true
-            | xB ⇒ pair exadecim bool x6 true
-            | xC ⇒ pair exadecim bool x7 true
-            | xD ⇒ pair exadecim bool x8 true
-            | xE ⇒ pair exadecim bool x9 true
-            | xF ⇒ pair exadecim bool xA true ] 
-       | xB ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xC false
-            | x1 ⇒ pair exadecim bool xD false
-            | x2 ⇒ pair exadecim bool xE false
-            | x3 ⇒ pair exadecim bool xF false
-            | x4 ⇒ pair exadecim bool x0 true
-            | x5 ⇒ pair exadecim bool x1 true
-            | x6 ⇒ pair exadecim bool x2 true
-            | x7 ⇒ pair exadecim bool x3 true
-            | x8 ⇒ pair exadecim bool x4 true
-            | x9 ⇒ pair exadecim bool x5 true
-            | xA ⇒ pair exadecim bool x6 true
-            | xB ⇒ pair exadecim bool x7 true
-            | xC ⇒ pair exadecim bool x8 true
-            | xD ⇒ pair exadecim bool x9 true
-            | xE ⇒ pair exadecim bool xA true
-            | xF ⇒ pair exadecim bool xB true ] 
-       | xC ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xD false
-            | x1 ⇒ pair exadecim bool xE false
-            | x2 ⇒ pair exadecim bool xF false
-            | x3 ⇒ pair exadecim bool x0 true
-            | x4 ⇒ pair exadecim bool x1 true
-            | x5 ⇒ pair exadecim bool x2 true
-            | x6 ⇒ pair exadecim bool x3 true
-            | x7 ⇒ pair exadecim bool x4 true
-            | x8 ⇒ pair exadecim bool x5 true
-            | x9 ⇒ pair exadecim bool x6 true
-            | xA ⇒ pair exadecim bool x7 true
-            | xB ⇒ pair exadecim bool x8 true
-            | xC ⇒ pair exadecim bool x9 true
-            | xD ⇒ pair exadecim bool xA true
-            | xE ⇒ pair exadecim bool xB true
-            | xF ⇒ pair exadecim bool xC true ] 
-       | xD ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xE false
-            | x1 ⇒ pair exadecim bool xF false
-            | x2 ⇒ pair exadecim bool x0 true
-            | x3 ⇒ pair exadecim bool x1 true
-            | x4 ⇒ pair exadecim bool x2 true
-            | x5 ⇒ pair exadecim bool x3 true
-            | x6 ⇒ pair exadecim bool x4 true
-            | x7 ⇒ pair exadecim bool x5 true
-            | x8 ⇒ pair exadecim bool x6 true
-            | x9 ⇒ pair exadecim bool x7 true
-            | xA ⇒ pair exadecim bool x8 true
-            | xB ⇒ pair exadecim bool x9 true
-            | xC ⇒ pair exadecim bool xA true
-            | xD ⇒ pair exadecim bool xB true
-            | xE ⇒ pair exadecim bool xC true
-            | xF ⇒ pair exadecim bool xD true ] 
-       | xE ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xF false
-            | x1 ⇒ pair exadecim bool x0 true
-            | x2 ⇒ pair exadecim bool x1 true
-            | x3 ⇒ pair exadecim bool x2 true
-            | x4 ⇒ pair exadecim bool x3 true
-            | x5 ⇒ pair exadecim bool x4 true
-            | x6 ⇒ pair exadecim bool x5 true
-            | x7 ⇒ pair exadecim bool x6 true
-            | x8 ⇒ pair exadecim bool x7 true
-            | x9 ⇒ pair exadecim bool x8 true
-            | xA ⇒ pair exadecim bool x9 true
-            | xB ⇒ pair exadecim bool xA true
-            | xC ⇒ pair exadecim bool xB true
-            | xD ⇒ pair exadecim bool xC true
-            | xE ⇒ pair exadecim bool xD true
-            | xF ⇒ pair exadecim bool xE true ]
-       | xF ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x0 true
-            | x1 ⇒ pair exadecim bool x1 true
-            | x2 ⇒ pair exadecim bool x2 true
-            | x3 ⇒ pair exadecim bool x3 true
-            | x4 ⇒ pair exadecim bool x4 true
-            | x5 ⇒ pair exadecim bool x5 true
-            | x6 ⇒ pair exadecim bool x6 true
-            | x7 ⇒ pair exadecim bool x7 true
-            | x8 ⇒ pair exadecim bool x8 true
-            | x9 ⇒ pair exadecim bool x9 true
-            | xA ⇒ pair exadecim bool xA true
-            | xB ⇒ pair exadecim bool xB true
-            | xC ⇒ pair exadecim bool xC true
-            | xD ⇒ pair exadecim bool xD true
-            | xE ⇒ pair exadecim bool xE true
-            | xF ⇒ pair exadecim bool xF true ] 
-       ]
-   | false ⇒
-      match e1 with
-       [ x0 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x0 false
-            | x1 ⇒ pair exadecim bool x1 false
-            | x2 ⇒ pair exadecim bool x2 false
-            | x3 ⇒ pair exadecim bool x3 false
-            | x4 ⇒ pair exadecim bool x4 false
-            | x5 ⇒ pair exadecim bool x5 false
-            | x6 ⇒ pair exadecim bool x6 false
-            | x7 ⇒ pair exadecim bool x7 false
-            | x8 ⇒ pair exadecim bool x8 false
-            | x9 ⇒ pair exadecim bool x9 false
-            | xA ⇒ pair exadecim bool xA false
-            | xB ⇒ pair exadecim bool xB false
-            | xC ⇒ pair exadecim bool xC false
-            | xD ⇒ pair exadecim bool xD false
-            | xE ⇒ pair exadecim bool xE false
-            | xF ⇒ pair exadecim bool xF false ] 
-       | x1 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x1 false
-            | x1 ⇒ pair exadecim bool x2 false
-            | x2 ⇒ pair exadecim bool x3 false
-            | x3 ⇒ pair exadecim bool x4 false
-            | x4 ⇒ pair exadecim bool x5 false
-            | x5 ⇒ pair exadecim bool x6 false
-            | x6 ⇒ pair exadecim bool x7 false
-            | x7 ⇒ pair exadecim bool x8 false
-            | x8 ⇒ pair exadecim bool x9 false
-            | x9 ⇒ pair exadecim bool xA false
-            | xA ⇒ pair exadecim bool xB false
-            | xB ⇒ pair exadecim bool xC false
-            | xC ⇒ pair exadecim bool xD false
-            | xD ⇒ pair exadecim bool xE false
-            | xE ⇒ pair exadecim bool xF false
-            | xF ⇒ pair exadecim bool x0 true ] 
-       | x2 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x2 false
-            | x1 ⇒ pair exadecim bool x3 false
-            | x2 ⇒ pair exadecim bool x4 false
-            | x3 ⇒ pair exadecim bool x5 false
-            | x4 ⇒ pair exadecim bool x6 false
-            | x5 ⇒ pair exadecim bool x7 false
-            | x6 ⇒ pair exadecim bool x8 false
-            | x7 ⇒ pair exadecim bool x9 false
-            | x8 ⇒ pair exadecim bool xA false
-            | x9 ⇒ pair exadecim bool xB false
-            | xA ⇒ pair exadecim bool xC false
-            | xB ⇒ pair exadecim bool xD false
-            | xC ⇒ pair exadecim bool xE false
-            | xD ⇒ pair exadecim bool xF false
-            | xE ⇒ pair exadecim bool x0 true
-            | xF ⇒ pair exadecim bool x1 true ] 
-       | x3 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x3 false
-            | x1 ⇒ pair exadecim bool x4 false
-            | x2 ⇒ pair exadecim bool x5 false
-            | x3 ⇒ pair exadecim bool x6 false
-            | x4 ⇒ pair exadecim bool x7 false
-            | x5 ⇒ pair exadecim bool x8 false
-            | x6 ⇒ pair exadecim bool x9 false
-            | x7 ⇒ pair exadecim bool xA false
-            | x8 ⇒ pair exadecim bool xB false
-            | x9 ⇒ pair exadecim bool xC false
-            | xA ⇒ pair exadecim bool xD false
-            | xB ⇒ pair exadecim bool xE false
-            | xC ⇒ pair exadecim bool xF false
-            | xD ⇒ pair exadecim bool x0 true
-            | xE ⇒ pair exadecim bool x1 true
-            | xF ⇒ pair exadecim bool x2 true ] 
-       | x4 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x4 false
-            | x1 ⇒ pair exadecim bool x5 false
-            | x2 ⇒ pair exadecim bool x6 false
-            | x3 ⇒ pair exadecim bool x7 false
-            | x4 ⇒ pair exadecim bool x8 false
-            | x5 ⇒ pair exadecim bool x9 false
-            | x6 ⇒ pair exadecim bool xA false
-            | x7 ⇒ pair exadecim bool xB false
-            | x8 ⇒ pair exadecim bool xC false
-            | x9 ⇒ pair exadecim bool xD false
-            | xA ⇒ pair exadecim bool xE false
-            | xB ⇒ pair exadecim bool xF false
-            | xC ⇒ pair exadecim bool x0 true
-            | xD ⇒ pair exadecim bool x1 true
-            | xE ⇒ pair exadecim bool x2 true
-            | xF ⇒ pair exadecim bool x3 true ] 
-       | x5 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x5 false
-            | x1 ⇒ pair exadecim bool x6 false
-            | x2 ⇒ pair exadecim bool x7 false
-            | x3 ⇒ pair exadecim bool x8 false
-            | x4 ⇒ pair exadecim bool x9 false
-            | x5 ⇒ pair exadecim bool xA false
-            | x6 ⇒ pair exadecim bool xB false
-            | x7 ⇒ pair exadecim bool xC false
-            | x8 ⇒ pair exadecim bool xD false
-            | x9 ⇒ pair exadecim bool xE false
-            | xA ⇒ pair exadecim bool xF false
-            | xB ⇒ pair exadecim bool x0 true
-            | xC ⇒ pair exadecim bool x1 true
-            | xD ⇒ pair exadecim bool x2 true
-            | xE ⇒ pair exadecim bool x3 true
-            | xF ⇒ pair exadecim bool x4 true ] 
-       | x6 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x6 false
-            | x1 ⇒ pair exadecim bool x7 false
-            | x2 ⇒ pair exadecim bool x8 false
-            | x3 ⇒ pair exadecim bool x9 false
-            | x4 ⇒ pair exadecim bool xA false
-            | x5 ⇒ pair exadecim bool xB false
-            | x6 ⇒ pair exadecim bool xC false
-            | x7 ⇒ pair exadecim bool xD false
-            | x8 ⇒ pair exadecim bool xE false
-            | x9 ⇒ pair exadecim bool xF false
-            | xA ⇒ pair exadecim bool x0 true
-            | xB ⇒ pair exadecim bool x1 true
-            | xC ⇒ pair exadecim bool x2 true
-            | xD ⇒ pair exadecim bool x3 true
-            | xE ⇒ pair exadecim bool x4 true
-            | xF ⇒ pair exadecim bool x5 true ] 
-       | x7 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x7 false
-            | x1 ⇒ pair exadecim bool x8 false
-            | x2 ⇒ pair exadecim bool x9 false
-            | x3 ⇒ pair exadecim bool xA false
-            | x4 ⇒ pair exadecim bool xB false
-            | x5 ⇒ pair exadecim bool xC false
-            | x6 ⇒ pair exadecim bool xD false
-            | x7 ⇒ pair exadecim bool xE false
-            | x8 ⇒ pair exadecim bool xF false
-            | x9 ⇒ pair exadecim bool x0 true
-            | xA ⇒ pair exadecim bool x1 true
-            | xB ⇒ pair exadecim bool x2 true
-            | xC ⇒ pair exadecim bool x3 true
-            | xD ⇒ pair exadecim bool x4 true
-            | xE ⇒ pair exadecim bool x5 true
-            | xF ⇒ pair exadecim bool x6 true ] 
-       | x8 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x8 false
-            | x1 ⇒ pair exadecim bool x9 false
-            | x2 ⇒ pair exadecim bool xA false
-            | x3 ⇒ pair exadecim bool xB false
-            | x4 ⇒ pair exadecim bool xC false
-            | x5 ⇒ pair exadecim bool xD false
-            | x6 ⇒ pair exadecim bool xE false
-            | x7 ⇒ pair exadecim bool xF false
-            | x8 ⇒ pair exadecim bool x0 true
-            | x9 ⇒ pair exadecim bool x1 true
-            | xA ⇒ pair exadecim bool x2 true
-            | xB ⇒ pair exadecim bool x3 true
-            | xC ⇒ pair exadecim bool x4 true
-            | xD ⇒ pair exadecim bool x5 true
-            | xE ⇒ pair exadecim bool x6 true
-            | xF ⇒ pair exadecim bool x7 true ] 
-       | x9 ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool x9 false
-            | x1 ⇒ pair exadecim bool xA false
-            | x2 ⇒ pair exadecim bool xB false
-            | x3 ⇒ pair exadecim bool xC false
-            | x4 ⇒ pair exadecim bool xD false
-            | x5 ⇒ pair exadecim bool xE false
-            | x6 ⇒ pair exadecim bool xF false
-            | x7 ⇒ pair exadecim bool x0 true
-            | x8 ⇒ pair exadecim bool x1 true
-            | x9 ⇒ pair exadecim bool x2 true
-            | xA ⇒ pair exadecim bool x3 true
-            | xB ⇒ pair exadecim bool x4 true
-            | xC ⇒ pair exadecim bool x5 true
-            | xD ⇒ pair exadecim bool x6 true
-            | xE ⇒ pair exadecim bool x7 true
-            | xF ⇒ pair exadecim bool x8 true ] 
-       | xA ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xA false
-            | x1 ⇒ pair exadecim bool xB false
-            | x2 ⇒ pair exadecim bool xC false
-            | x3 ⇒ pair exadecim bool xD false
-            | x4 ⇒ pair exadecim bool xE false
-            | x5 ⇒ pair exadecim bool xF false
-            | x6 ⇒ pair exadecim bool x0 true
-            | x7 ⇒ pair exadecim bool x1 true
-            | x8 ⇒ pair exadecim bool x2 true
-            | x9 ⇒ pair exadecim bool x3 true
-            | xA ⇒ pair exadecim bool x4 true
-            | xB ⇒ pair exadecim bool x5 true
-            | xC ⇒ pair exadecim bool x6 true
-            | xD ⇒ pair exadecim bool x7 true
-            | xE ⇒ pair exadecim bool x8 true
-            | xF ⇒ pair exadecim bool x9 true ] 
-       | xB ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xB false
-            | x1 ⇒ pair exadecim bool xC false
-            | x2 ⇒ pair exadecim bool xD false
-            | x3 ⇒ pair exadecim bool xE false
-            | x4 ⇒ pair exadecim bool xF false
-            | x5 ⇒ pair exadecim bool x0 true
-            | x6 ⇒ pair exadecim bool x1 true
-            | x7 ⇒ pair exadecim bool x2 true
-            | x8 ⇒ pair exadecim bool x3 true
-            | x9 ⇒ pair exadecim bool x4 true
-            | xA ⇒ pair exadecim bool x5 true
-            | xB ⇒ pair exadecim bool x6 true
-            | xC ⇒ pair exadecim bool x7 true
-            | xD ⇒ pair exadecim bool x8 true
-            | xE ⇒ pair exadecim bool x9 true
-            | xF ⇒ pair exadecim bool xA true ] 
-       | xC ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xC false
-            | x1 ⇒ pair exadecim bool xD false
-            | x2 ⇒ pair exadecim bool xE false
-            | x3 ⇒ pair exadecim bool xF false
-            | x4 ⇒ pair exadecim bool x0 true
-            | x5 ⇒ pair exadecim bool x1 true
-            | x6 ⇒ pair exadecim bool x2 true
-            | x7 ⇒ pair exadecim bool x3 true
-            | x8 ⇒ pair exadecim bool x4 true
-            | x9 ⇒ pair exadecim bool x5 true
-            | xA ⇒ pair exadecim bool x6 true
-            | xB ⇒ pair exadecim bool x7 true
-            | xC ⇒ pair exadecim bool x8 true
-            | xD ⇒ pair exadecim bool x9 true
-            | xE ⇒ pair exadecim bool xA true
-            | xF ⇒ pair exadecim bool xB true ] 
-       | xD ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xD false
-            | x1 ⇒ pair exadecim bool xE false
-            | x2 ⇒ pair exadecim bool xF false
-            | x3 ⇒ pair exadecim bool x0 true
-            | x4 ⇒ pair exadecim bool x1 true
-            | x5 ⇒ pair exadecim bool x2 true
-            | x6 ⇒ pair exadecim bool x3 true
-            | x7 ⇒ pair exadecim bool x4 true
-            | x8 ⇒ pair exadecim bool x5 true
-            | x9 ⇒ pair exadecim bool x6 true
-            | xA ⇒ pair exadecim bool x7 true
-            | xB ⇒ pair exadecim bool x8 true
-            | xC ⇒ pair exadecim bool x9 true
-            | xD ⇒ pair exadecim bool xA true
-            | xE ⇒ pair exadecim bool xB true
-            | xF ⇒ pair exadecim bool xC true ] 
-       | xE ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xE false
-            | x1 ⇒ pair exadecim bool xF false
-            | x2 ⇒ pair exadecim bool x0 true
-            | x3 ⇒ pair exadecim bool x1 true
-            | x4 ⇒ pair exadecim bool x2 true
-            | x5 ⇒ pair exadecim bool x3 true
-            | x6 ⇒ pair exadecim bool x4 true
-            | x7 ⇒ pair exadecim bool x5 true
-            | x8 ⇒ pair exadecim bool x6 true
-            | x9 ⇒ pair exadecim bool x7 true
-            | xA ⇒ pair exadecim bool x8 true
-            | xB ⇒ pair exadecim bool x9 true
-            | xC ⇒ pair exadecim bool xA true
-            | xD ⇒ pair exadecim bool xB true
-            | xE ⇒ pair exadecim bool xC true
-            | xF ⇒ pair exadecim bool xD true ] 
-       | xF ⇒
-           match e2 with
-            [ x0 ⇒ pair exadecim bool xF false
-            | x1 ⇒ pair exadecim bool x0 true
-            | x2 ⇒ pair exadecim bool x1 true
-            | x3 ⇒ pair exadecim bool x2 true
-            | x4 ⇒ pair exadecim bool x3 true
-            | x5 ⇒ pair exadecim bool x4 true
-            | x6 ⇒ pair exadecim bool x5 true
-            | x7 ⇒ pair exadecim bool x6 true
-            | x8 ⇒ pair exadecim bool x7 true
-            | x9 ⇒ pair exadecim bool x8 true
-            | xA ⇒ pair exadecim bool x9 true
-            | xB ⇒ pair exadecim bool xA true
-            | xC ⇒ pair exadecim bool xB true
-            | xD ⇒ pair exadecim bool xC true
-            | xE ⇒ pair exadecim bool xD true
-            | xF ⇒ pair exadecim bool xE true ]
-       ]
-   ].
-
-(* operatore somma senza carry *)
-definition plus_exnc ≝
-λe1,e2:exadecim.fst ?? (plus_ex e1 e2 false).
-
-(* operatore carry della somma *)
-definition plus_exc ≝
-λe1,e2:exadecim.snd ?? (plus_ex e1 e2 false).
-
-(* operatore Most Significant Bit *)
-definition MSB_ex ≝
-λe:exadecim.match e with
- [ x0 ⇒ false | x1 ⇒ false | x2 ⇒ false | x3 ⇒ false
- | x4 ⇒ false | x5 ⇒ false | x6 ⇒ false | x7 ⇒ false
- | x8 ⇒ true  | x9 ⇒ true  | xA ⇒ true  | xB ⇒ true
- | xC ⇒ true  | xD ⇒ true  | xE ⇒ true  | xF ⇒ true ].
-
-(* esadecimali → naturali *)
-definition nat_of_exadecim ≝
-λe:exadecim.
- match e with
-  [ x0 ⇒ 0 | x1 ⇒ 1 | x2 ⇒ 2  | x3 ⇒ 3  | x4 ⇒ 4  | x5 ⇒ 5  | x6 ⇒ 6  | x7 ⇒ 7
-  | x8 ⇒ 8 | x9 ⇒ 9 | xA ⇒ 10 | xB ⇒ 11 | xC ⇒ 12 | xD ⇒ 13 | xE ⇒ 14 | xF ⇒ 15 ].
-
-coercion cic:/matita/freescale/exadecim/nat_of_exadecim.con.
-
-(* naturali → esadecimali *)
-let rec exadecim_of_nat n ≝
- match n with [ O ⇒ x0 | S n ⇒
-  match n with [ O ⇒ x1 | S n ⇒
-   match n with [ O ⇒ x2 | S n ⇒ 
-    match n with [ O ⇒ x3 | S n ⇒ 
-     match n with [ O ⇒ x4 | S n ⇒ 
-      match n with [ O ⇒ x5 | S n ⇒ 
-       match n with [ O ⇒ x6 | S n ⇒ 
-        match n with [ O ⇒ x7 | S n ⇒ 
-         match n with [ O ⇒ x8 | S n ⇒ 
-          match n with [ O ⇒ x9 | S n ⇒ 
-           match n with [ O ⇒ xA | S n ⇒ 
-            match n with [ O ⇒ xB | S n ⇒ 
-             match n with [ O ⇒ xC | S n ⇒ 
-              match n with [ O ⇒ xD | S n ⇒ 
-               match n with [ O ⇒ xE | S n ⇒ 
-                match n with [ O ⇒ xF | S n ⇒ exadecim_of_nat n ]]]]]]]]]]]]]]]]. 
-
-(* operatore predecessore *)
-definition pred_ex ≝
-λe:exadecim.
- match e with
-  [ x0 ⇒ xF | x1 ⇒ x0 | x2 ⇒ x1 | x3 ⇒ x2 | x4 ⇒ x3 | x5 ⇒ x4 | x6 ⇒ x5 | x7 ⇒ x6
-  | x8 ⇒ x7 | x9 ⇒ x8 | xA ⇒ x9 | xB ⇒ xA | xC ⇒ xB | xD ⇒ xC | xE ⇒ xD | xF ⇒ xE ].
-
-(* operatore successore *)
-definition succ_ex ≝
-λe:exadecim.
- match e with
-  [ x0 ⇒ x1 | x1 ⇒ x2 | x2 ⇒ x3 | x3 ⇒ x4 | x4 ⇒ x5 | x5 ⇒ x6 | x6 ⇒ x7 | x7 ⇒ x8
-  | x8 ⇒ x9 | x9 ⇒ xA | xA ⇒ xB | xB ⇒ xC | xC ⇒ xD | xD ⇒ xE | xE ⇒ xF | xF ⇒ x0 ].
-
-(* operatore neg/complemento a 2 *)
-definition compl_ex ≝
-λe:exadecim.match e with
- [ x0 ⇒ x0 | x1 ⇒ xF | x2 ⇒ xE | x3 ⇒ xD
- | x4 ⇒ xC | x5 ⇒ xB | x6 ⇒ xA | x7 ⇒ x9
- | x8 ⇒ x8 | x9 ⇒ x7 | xA ⇒ x6 | xB ⇒ x5
- | xC ⇒ x4 | xD ⇒ x3 | xE ⇒ x2 | xF ⇒ x1 ].
-
-(* iteratore sugli esadecimali *)
-definition forall_exadecim ≝ λP.
- P x0 ⊗ P x1 ⊗ P x2 ⊗ P x3 ⊗ P x4 ⊗ P x5 ⊗ P x6 ⊗ P x7 ⊗
- P x8 ⊗ P x9 ⊗ P xA ⊗ P xB ⊗ P xC ⊗ P xD ⊗ P xE ⊗ P xF.
-
-(* ********************** *)
-(* TEOREMI/LEMMMI/ASSIOMI *)
-(* ********************** *)
-
-(* ESPERIMENTO UTILIZZO DELL'ITERATORE *)
-
-(*
-lemma forall_exadecim_eqProp_left_aux :
- ∀P.(∀e:exadecim.P e = true) →
- ((P x0 ⊗ P x1 ⊗ P x2 ⊗ P x3 ⊗ P x4 ⊗ P x5 ⊗ P x6 ⊗ P x7 ⊗
-   P x8 ⊗ P x9 ⊗ P xA ⊗ P xB ⊗ P xC ⊗ P xD ⊗ P xE ⊗ P xF) = true).
- intros;
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- elim H; elim P; [ 2: reflexivity; ] elim H; elim P; [ 2: reflexivity; ]
- reflexivity.
-qed.
-
-lemma forall_exadecim_eqProp_left :
- ∀P.(∀e:exadecim. P e = true) → (forall_exadecim (λe.P e) = true).
- intro;
- elim P 0;
- [ simplify; intro; apply forall_exadecim_eqProp_left_aux; apply H; |
-   simplify; intro; apply forall_exadecim_eqProp_left_aux; apply H; |
-   autobatch; ].
-qed.
-
-lemma forall_exadecim_eqProp_right_aux :
- ∀P.((P x0 ⊗ P x1 ⊗ P x2 ⊗ P x3 ⊗ P x4 ⊗ P x5 ⊗ P x6 ⊗ P x7 ⊗
-      P x8 ⊗ P x9 ⊗ P xA ⊗ P xB ⊗ P xC ⊗ P xD ⊗ P xE ⊗ P xF) = true) →
-    (∀e:exadecim.P e = true).
- elim daemon.
-qed.
-
-lemma forall_exadecim_eqProp_right :
- ∀P.(forall_exadecim (λe.P e) = true) → (∀e:exadecim.P e = true).
- intro;
- elim P 0;
- [ simplify; intro; apply forall_exadecim_eqProp_right_aux; apply H; |
-   simplify; intro; apply forall_exadecim_eqProp_right_aux; apply H; |
-   autobatch; ].
-qed.
-
-lemma lt_nat_of_exadecim_16_forall: ∀e.ltb (nat_of_exadecim e) 16 = true.
- apply forall_exadecim_eqProp_right;
- reflexivity;
-qed.
-*)
-
-(* FINE DELL'ESPERIMENTO *)
-
-lemma lt_nat_of_exadecim_16: ∀e.nat_of_exadecim e < 16.
- intro;
- elim e;
- simplify;
- autobatch depth=17.
-qed.
-
-lemma exadecim_of_nat_mod:
- ∀n.exadecim_of_nat n = exadecim_of_nat (n \mod 16).
- intros;
- apply (nat_elim1 n); intro;
- cases m; [ intro; reflexivity | ];
- cases n1; [ intro; reflexivity | ];
- cases n2; [ intro; reflexivity | ];
- cases n3; [ intro; reflexivity | ];
- cases n4; [ intro; reflexivity | ];
- cases n5; [ intro; reflexivity | ];
- cases n6; [ intro; reflexivity | ];
- cases n7; [ intro; reflexivity | ];
- cases n8; [ intro; reflexivity | ];
- cases n9; [ intro; reflexivity | ];
- cases n10; [ intro; reflexivity | ];
- cases n11; [ intro; reflexivity | ];
- cases n12; [ intro; reflexivity | ];
- cases n13; [ intro; reflexivity | ];
- cases n14; [ intro; reflexivity | ];
- cases n15; [ intro; reflexivity | ];
- intros;
- change in ⊢ (? ? % ?) with (exadecim_of_nat n16);
- change in ⊢ (? ? ? (? (? % ?))) with (16 + n16);
- rewrite > mod_plus;
- change in ⊢ (? ? ? (? (? % ?))) with (n16 \mod 16);
- rewrite < mod_mod;
-  [ apply H;
-    unfold lt;
-    autobatch.
-  | autobatch
-  ]
-qed.
-
-lemma nat_of_exadecim_exadecim_of_nat:
- ∀n. nat_of_exadecim (exadecim_of_nat n) = n \mod 16.
- intro;
- rewrite > exadecim_of_nat_mod;
- generalize in match (lt_mod_m_m n 16 ?); [2: autobatch | ]
- generalize in match (n \mod 16); intro;
- cases n1; [ intro; reflexivity | ];
- cases n2; [ intro; reflexivity | ];
- cases n3; [ intro; reflexivity | ];
- cases n4; [ intro; reflexivity | ];
- cases n5; [ intro; reflexivity | ]; 
- cases n6; [ intro; reflexivity | ]; 
- cases n7; [ intro; reflexivity | ];
- cases n8; [ intro; reflexivity | ];
- cases n9; [ intro; reflexivity | ];
- cases n10; [ intro; reflexivity | ];
- cases n11 [ intro; reflexivity | ];
- cases n12; [ intro; reflexivity | ];
- cases n13; [ intro; reflexivity | ];
- cases n14; [ intro; reflexivity | ];
- cases n15; [ intro; reflexivity | ];
- cases n16; [ intro; reflexivity | ];
- intro;
- unfold lt in H;
- cut False;
-  [ elim Hcut
-  | autobatch
-  ]
-qed.
-
-lemma exadecim_of_nat_nat_of_exadecim:
- ∀e.exadecim_of_nat (nat_of_exadecim e) = e.
- intro;
- elim e;
- reflexivity.
-qed.
-
-lemma plusex_ok:
- ∀b1,b2,c.
-  match plus_ex b1 b2 c with
-   [ pair r c' ⇒ b1 + b2 + nat_of_bool c = nat_of_exadecim r + nat_of_bool c' * 16 ].
- intros;
- elim b1; (elim b2; (elim c; normalize; reflexivity)).
-qed.
-
-lemma eq_eqex_S_x0_false:
- ∀n. n < 15 → eq_ex x0 (exadecim_of_nat (S n)) = false.
- intro;
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- cases n1 0; [ intro; simplify; reflexivity | clear n1];
- cases n 0; [ intro; simplify; reflexivity | clear n];
- intro;
- unfold lt in H;
- cut (S n1 ≤ 0);
-  [ elim (not_le_Sn_O ? Hcut)
-  | do 15 (apply le_S_S_to_le);
-    assumption
-  ]
-qed.
-
-lemma eqex_true_to_eq: ∀b,b'. eq_ex b b' = true → b=b'.
- intros 2;
- elim b 0;
- elim b' 0;
- simplify;
- intro;
- first [ reflexivity | destruct H ].
-qed.
-
-lemma eqex_false_to_not_eq: ∀b,b'. eq_ex b b' = false → b ≠ b'.
- intros 2;
- elim b 0;
- elim b' 0;
- simplify;
- intro;
- try (destruct H);
- intro K;
- destruct K.
-qed.
-
-(* nuovi *)
-
-lemma ok_lt_ex : ∀e1,e2:exadecim.
- lt_ex e1 e2 = ltb e1 e2.
- intros;
- elim e1;
- elim e2;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_le_ex : ∀e1,e2:exadecim.
- le_ex e1 e2 = leb e1 e2.
- intros;
- elim e1;
- elim e2;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_gt_ex : ∀e1,e2:exadecim.
- gt_ex e1 e2 = notb (leb e1 e2).
- intros;
- elim e1;
- elim e2;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_ge_ex : ∀e1,e2:exadecim.
- ge_ex e1 e2 = notb (ltb e1 e2).
- intros;
- elim e1;
- elim e2;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_pred_ex : ∀e:exadecim.
- pred_ex e = plus_exnc e xF.
- intros;
- elim e;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_succ_ex : ∀e:exadecim.
- succ_ex e = plus_exnc e x1.
- intros;
- elim e;
- simplify;
- reflexivity.
- qed.
-
-lemma ok_rcr_ex : ∀e:exadecim.∀b:bool.
- rcr_ex e b = 
- pair exadecim bool
-  (exadecim_of_nat ((e/2)+match b with [ true ⇒ 8 | false ⇒ 0]))
-  (eqb (mod e 2) 1).
- intros;
- elim e;
- elim b;
- simplify in ⊢ (? ? ? (? ? ? (? (? ? %)) ?));
- simplify in ⊢ (? ? ? (? ? ? ? %));
- simplify in ⊢ (? ? ? (? ? ? % ?));
- simplify in ⊢ (? ? % ?);
- reflexivity;
-qed.
-
-lemma ok_rcl_ex : ∀e:exadecim.∀b:bool.
- rcl_ex e b =
- pair exadecim bool
-  (exadecim_of_nat ((mod (e*2) 16)+match b with [ true ⇒ 1 | false ⇒ 0]))
-  (notb (ltb e 8)).
- intros;
- elim e;
- elim b;
- simplify in ⊢ (? ? ? (? ? ? (? (? ? %)) ?));
- simplify in ⊢ (? ? ? (? ? ? % ?));
- simplify in ⊢ (? ? ? (? ? ? ? (? %)));
- simplify in ⊢ (? ? ? (? ? ? ? %));
- simplify in ⊢ (? ? % ?);
- reflexivity.
- qed.
-
-lemma ok_shr_ex : ∀e:exadecim.
- shr_ex e =
- pair exadecim bool
-  (exadecim_of_nat (e/2))
-  (eqb (mod e 2) 1).
- intros;
- elim e;
- simplify in ⊢ (? ? ? (? ? ? % ?));
- simplify in ⊢ (? ? ? (? ? ? ? %));
- simplify in ⊢ (? ? % ?);
- reflexivity.
-qed.
-
-lemma ok_shl_ex : ∀e:exadecim.
- shl_ex e =
- pair exadecim bool
-  (exadecim_of_nat (mod (e*2) 16))
-  (notb (ltb e 8)).
- intros;
- elim e;
- simplify in ⊢ (? ? ? (? ? ? % ?));
- simplify in ⊢ (? ? ? (? ? ? ? (? %)));
- simplify in ⊢ (? ? ? (? ? ? ? %));
- simplify in ⊢ (? ? % ?);
- reflexivity.
-qed.
-
-lemma ok_not_ex : ∀e:exadecim.
- e + (not_ex e) = 15.
- intros;
- elim e;
- simplify;
- reflexivity.
-qed.
-
-lemma ok_compl_ex : ∀e:exadecim.
- e + (compl_ex e) = match gt_ex e x0 with [ true ⇒ 16 | false ⇒ 0 ].
- intros;
- elim e;
- simplify;
- reflexivity.
-qed.
-
-lemma ok_MSB_ex : ∀e:exadecim.
- MSB_ex e = notb (ltb e 8).
- intros;
- elim e;
- simplify;
- reflexivity.
-qed.