]> matita.cs.unibo.it Git - helm.git/commitdiff
freescale porting, work in progress
authorCosimo Oliboni <??>
Sat, 8 Aug 2009 15:18:05 +0000 (15:18 +0000)
committerCosimo Oliboni <??>
Sat, 8 Aug 2009 15:18:05 +0000 (15:18 +0000)
21 files changed:
helm/software/matita/contribs/ng_assembly/common/ascii_lemmas1.ma
helm/software/matita/contribs/ng_assembly/common/list_utility_lemmas.ma
helm/software/matita/contribs/ng_assembly/common/meta_type.ma [new file with mode: 0755]
helm/software/matita/contribs/ng_assembly/common/string_lemmas.ma
helm/software/matita/contribs/ng_assembly/depends
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas.ma
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas1.ma
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas_instrmode1.ma
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas_instrmode2.ma
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas_opcode1.ma
helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas_opcode2.ma
helm/software/matita/contribs/ng_assembly/freescale/translation.ma
helm/software/matita/contribs/ng_assembly/freescale/translation_lemmas.ma [new file with mode: 0755]
helm/software/matita/contribs/ng_assembly/num/bitrigesim_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/bool_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/byte8_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/exadecim_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/oct_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/quatern_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/word16_lemmas.ma
helm/software/matita/contribs/ng_assembly/num/word32_lemmas.ma

index 89cafaf0ade2a2dd5b3c99f1cd9bff91452dd4d7..3a5c00ab2a86977714f0c543e822bdfa173f6a3a 100755 (executable)
@@ -26,515 +26,14 @@ include "common/ascii.ma".
 (* DEFINIZIONE ASCII MINIMALE *)
 (* ************************** *)
 
-ndefinition ascii_destruct1 : Πc2.ΠP:Prop.ch_0 = c2 → match c2 with [ ch_0 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##1: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_0 with [ ch_0 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct2 : Πc2.ΠP:Prop.ch_1 = c2 → match c2 with [ ch_1 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##2: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_1 with [ ch_1 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct3 : Πc2.ΠP:Prop.ch_2 = c2 → match c2 with [ ch_2 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##3: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_2 with [ ch_2 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct4 : Πc2.ΠP:Prop.ch_3 = c2 → match c2 with [ ch_3 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##4: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_3 with [ ch_3 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct5 : Πc2.ΠP:Prop.ch_4 = c2 → match c2 with [ ch_4 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##5: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_4 with [ ch_4 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct6 : Πc2.ΠP:Prop.ch_5 = c2 → match c2 with [ ch_5 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##6: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_5 with [ ch_5 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct7 : Πc2.ΠP:Prop.ch_6 = c2 → match c2 with [ ch_6 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##7: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_6 with [ ch_6 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct8 : Πc2.ΠP:Prop.ch_7 = c2 → match c2 with [ ch_7 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##8: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_7 with [ ch_7 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct9 : Πc2.ΠP:Prop.ch_8 = c2 → match c2 with [ ch_8 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##9: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_8 with [ ch_8 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct10 : Πc2.ΠP:Prop.ch_9 = c2 → match c2 with [ ch_9 ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##10: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_9 with [ ch_9 ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct11 : Πc2.ΠP:Prop.ch__ = c2 → match c2 with [ ch__ ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##11: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch__ with [ ch__ ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct12 : Πc2.ΠP:Prop.ch_A = c2 → match c2 with [ ch_A ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##12: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_A with [ ch_A ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct13 : Πc2.ΠP:Prop.ch_B = c2 → match c2 with [ ch_B ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##13: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_B with [ ch_B ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct14 : Πc2.ΠP:Prop.ch_C = c2 → match c2 with [ ch_C ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##14: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_C with [ ch_C ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct15 : Πc2.ΠP:Prop.ch_D = c2 → match c2 with [ ch_D ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##15: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_D with [ ch_D ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct16 : Πc2.ΠP:Prop.ch_E = c2 → match c2 with [ ch_E ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##16: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_E with [ ch_E ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct17 : Πc2.ΠP:Prop.ch_F = c2 → match c2 with [ ch_F ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##17: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_F with [ ch_F ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct18 : Πc2.ΠP:Prop.ch_G = c2 → match c2 with [ ch_G ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##18: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_G with [ ch_G ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct19 : Πc2.ΠP:Prop.ch_H = c2 → match c2 with [ ch_H ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##19: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_H with [ ch_H ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct20 : Πc2.ΠP:Prop.ch_I = c2 → match c2 with [ ch_I ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##20: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_I with [ ch_I ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct21 : Πc2.ΠP:Prop.ch_J = c2 → match c2 with [ ch_J ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##21: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_J with [ ch_J ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct22 : Πc2.ΠP:Prop.ch_K = c2 → match c2 with [ ch_K ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##22: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_K with [ ch_K ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct23 : Πc2.ΠP:Prop.ch_L = c2 → match c2 with [ ch_L ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##23: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_L with [ ch_L ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct24 : Πc2.ΠP:Prop.ch_M = c2 → match c2 with [ ch_M ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##24: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_M with [ ch_M ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct25 : Πc2.ΠP:Prop.ch_N = c2 → match c2 with [ ch_N ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##25: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_N with [ ch_N ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct26 : Πc2.ΠP:Prop.ch_O = c2 → match c2 with [ ch_O ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##26: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_O with [ ch_O ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct27 : Πc2.ΠP:Prop.ch_P = c2 → match c2 with [ ch_P ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##27: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_P with [ ch_P ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct28 : Πc2.ΠP:Prop.ch_Q = c2 → match c2 with [ ch_Q ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##28: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_Q with [ ch_Q ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct29 : Πc2.ΠP:Prop.ch_R = c2 → match c2 with [ ch_R ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##29: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_R with [ ch_R ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct30 : Πc2.ΠP:Prop.ch_S = c2 → match c2 with [ ch_S ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##30: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_S with [ ch_S ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct31 : Πc2.ΠP:Prop.ch_T = c2 → match c2 with [ ch_T ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##31: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_T with [ ch_T ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct32 : Πc2.ΠP:Prop.ch_U = c2 → match c2 with [ ch_U ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##32: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_U with [ ch_U ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct33 : Πc2.ΠP:Prop.ch_V = c2 → match c2 with [ ch_V ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##33: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_V with [ ch_V ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct34 : Πc2.ΠP:Prop.ch_W = c2 → match c2 with [ ch_W ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##34: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_W with [ ch_W ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct35 : Πc2.ΠP:Prop.ch_X = c2 → match c2 with [ ch_X ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##35: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_X with [ ch_X ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct36 : Πc2.ΠP:Prop.ch_Y = c2 → match c2 with [ ch_Y ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##36: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_Y with [ ch_Y ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct37 : Πc2.ΠP:Prop.ch_Z = c2 → match c2 with [ ch_Z ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##37: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_Z with [ ch_Z ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct38 : Πc2.ΠP:Prop.ch_a = c2 → match c2 with [ ch_a ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##38: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_a with [ ch_a ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct39 : Πc2.ΠP:Prop.ch_b = c2 → match c2 with [ ch_b ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##39: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_b with [ ch_b ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct40 : Πc2.ΠP:Prop.ch_c = c2 → match c2 with [ ch_c ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##40: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_c with [ ch_c ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct41 : Πc2.ΠP:Prop.ch_d = c2 → match c2 with [ ch_d ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##41: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_d with [ ch_d ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct42 : Πc2.ΠP:Prop.ch_e = c2 → match c2 with [ ch_e ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##42: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_e with [ ch_e ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct43 : Πc2.ΠP:Prop.ch_f = c2 → match c2 with [ ch_f ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##43: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_f with [ ch_f ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct44 : Πc2.ΠP:Prop.ch_g = c2 → match c2 with [ ch_g ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##44: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_g with [ ch_g ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct45 : Πc2.ΠP:Prop.ch_h = c2 → match c2 with [ ch_h ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##45: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_h with [ ch_h ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct46 : Πc2.ΠP:Prop.ch_i = c2 → match c2 with [ ch_i ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##46: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_i with [ ch_i ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct47 : Πc2.ΠP:Prop.ch_j = c2 → match c2 with [ ch_j ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##47: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_j with [ ch_j ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct48 : Πc2.ΠP:Prop.ch_k = c2 → match c2 with [ ch_k ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##48: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_k with [ ch_k ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct49 : Πc2.ΠP:Prop.ch_l = c2 → match c2 with [ ch_l ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##49: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_l with [ ch_l ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct50 : Πc2.ΠP:Prop.ch_m = c2 → match c2 with [ ch_m ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##50: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_m with [ ch_m ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct51 : Πc2.ΠP:Prop.ch_n = c2 → match c2 with [ ch_n ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##51: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_n with [ ch_n ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct52 : Πc2.ΠP:Prop.ch_o = c2 → match c2 with [ ch_o ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##52: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_o with [ ch_o ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct53 : Πc2.ΠP:Prop.ch_p = c2 → match c2 with [ ch_p ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##53: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_p with [ ch_p ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct54 : Πc2.ΠP:Prop.ch_q = c2 → match c2 with [ ch_q ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##54: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_q with [ ch_q ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct55 : Πc2.ΠP:Prop.ch_r = c2 → match c2 with [ ch_r ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##55: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_r with [ ch_r ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct56 : Πc2.ΠP:Prop.ch_s = c2 → match c2 with [ ch_s ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##56: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_s with [ ch_s ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct57 : Πc2.ΠP:Prop.ch_t = c2 → match c2 with [ ch_t ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##57: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_t with [ ch_t ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct58 : Πc2.ΠP:Prop.ch_u = c2 → match c2 with [ ch_u ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##58: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_u with [ ch_u ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct59 : Πc2.ΠP:Prop.ch_v = c2 → match c2 with [ ch_v ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##59: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_v with [ ch_v ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct60 : Πc2.ΠP:Prop.ch_w = c2 → match c2 with [ ch_w ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##60: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_w with [ ch_w ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct61 : Πc2.ΠP:Prop.ch_x = c2 → match c2 with [ ch_x ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##61: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_x with [ ch_x ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct62 : Πc2.ΠP:Prop.ch_y = c2 → match c2 with [ ch_y ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##62: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_y with [ ch_y ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition ascii_destruct63 : Πc2.ΠP:Prop.ch_z = c2 → match c2 with [ ch_z ⇒ P → P | _ ⇒ P ].
- #c2; #P; ncases c2; nnormalize;
- ##[ ##63: #H; napply (λx:P.x)
- ##| ##*: #H; napply (False_ind (λ_.?) ?); nchange with (match ch_z with [ ch_z ⇒ False | _ ⇒ True ]); nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
 ndefinition ascii_destruct_aux ≝
 Πc1,c2.ΠP:Prop.c1 = c2 →
- match c1 with
-  [ ch_0 ⇒ match c2 with [ ch_0 ⇒ P → P | _ ⇒ P ] | ch_1 ⇒ match c2 with [ ch_1 ⇒ P → P | _ ⇒ P ]
-  | ch_2 ⇒ match c2 with [ ch_2 ⇒ P → P | _ ⇒ P ] | ch_3 ⇒ match c2 with [ ch_3 ⇒ P → P | _ ⇒ P ]
-  | ch_4 ⇒ match c2 with [ ch_4 ⇒ P → P | _ ⇒ P ] | ch_5 ⇒ match c2 with [ ch_5 ⇒ P → P | _ ⇒ P ]
-  | ch_6 ⇒ match c2 with [ ch_6 ⇒ P → P | _ ⇒ P ] | ch_7 ⇒ match c2 with [ ch_7 ⇒ P → P | _ ⇒ P ]
-  | ch_8 ⇒ match c2 with [ ch_8 ⇒ P → P | _ ⇒ P ] | ch_9 ⇒ match c2 with [ ch_9 ⇒ P → P | _ ⇒ P ]
-  | ch__ ⇒ match c2 with [ ch__ ⇒ P → P | _ ⇒ P ] | ch_A ⇒ match c2 with [ ch_A ⇒ P → P | _ ⇒ P ]
-  | ch_B ⇒ match c2 with [ ch_B ⇒ P → P | _ ⇒ P ] | ch_C ⇒ match c2 with [ ch_C ⇒ P → P | _ ⇒ P ]
-  | ch_D ⇒ match c2 with [ ch_D ⇒ P → P | _ ⇒ P ] | ch_E ⇒ match c2 with [ ch_E ⇒ P → P | _ ⇒ P ]
-  | ch_F ⇒ match c2 with [ ch_F ⇒ P → P | _ ⇒ P ] | ch_G ⇒ match c2 with [ ch_G ⇒ P → P | _ ⇒ P ]
-  | ch_H ⇒ match c2 with [ ch_H ⇒ P → P | _ ⇒ P ] | ch_I ⇒ match c2 with [ ch_I ⇒ P → P | _ ⇒ P ]
-  | ch_J ⇒ match c2 with [ ch_J ⇒ P → P | _ ⇒ P ] | ch_K ⇒ match c2 with [ ch_K ⇒ P → P | _ ⇒ P ]
-  | ch_L ⇒ match c2 with [ ch_L ⇒ P → P | _ ⇒ P ] | ch_M ⇒ match c2 with [ ch_M ⇒ P → P | _ ⇒ P ]
-  | ch_N ⇒ match c2 with [ ch_N ⇒ P → P | _ ⇒ P ] | ch_O ⇒ match c2 with [ ch_O ⇒ P → P | _ ⇒ P ]
-  | ch_P ⇒ match c2 with [ ch_P ⇒ P → P | _ ⇒ P ] | ch_Q ⇒ match c2 with [ ch_Q ⇒ P → P | _ ⇒ P ]
-  | ch_R ⇒ match c2 with [ ch_R ⇒ P → P | _ ⇒ P ] | ch_S ⇒ match c2 with [ ch_S ⇒ P → P | _ ⇒ P ]
-  | ch_T ⇒ match c2 with [ ch_T ⇒ P → P | _ ⇒ P ] | ch_U ⇒ match c2 with [ ch_U ⇒ P → P | _ ⇒ P ]
-  | ch_V ⇒ match c2 with [ ch_V ⇒ P → P | _ ⇒ P ] | ch_W ⇒ match c2 with [ ch_W ⇒ P → P | _ ⇒ P ]
-  | ch_X ⇒ match c2 with [ ch_X ⇒ P → P | _ ⇒ P ] | ch_Y ⇒ match c2 with [ ch_Y ⇒ P → P | _ ⇒ P ]
-  | ch_Z ⇒ match c2 with [ ch_Z ⇒ P → P | _ ⇒ P ] | ch_a ⇒ match c2 with [ ch_a ⇒ P → P | _ ⇒ P ]
-  | ch_b ⇒ match c2 with [ ch_b ⇒ P → P | _ ⇒ P ] | ch_c ⇒ match c2 with [ ch_c ⇒ P → P | _ ⇒ P ]
-  | ch_d ⇒ match c2 with [ ch_d ⇒ P → P | _ ⇒ P ] | ch_e ⇒ match c2 with [ ch_e ⇒ P → P | _ ⇒ P ]
-  | ch_f ⇒ match c2 with [ ch_f ⇒ P → P | _ ⇒ P ] | ch_g ⇒ match c2 with [ ch_g ⇒ P → P | _ ⇒ P ]
-  | ch_h ⇒ match c2 with [ ch_h ⇒ P → P | _ ⇒ P ] | ch_i ⇒ match c2 with [ ch_i ⇒ P → P | _ ⇒ P ]
-  | ch_j ⇒ match c2 with [ ch_j ⇒ P → P | _ ⇒ P ] | ch_k ⇒ match c2 with [ ch_k ⇒ P → P | _ ⇒ P ]
-  | ch_l ⇒ match c2 with [ ch_l ⇒ P → P | _ ⇒ P ] | ch_m ⇒ match c2 with [ ch_m ⇒ P → P | _ ⇒ P ]
-  | ch_n ⇒ match c2 with [ ch_n ⇒ P → P | _ ⇒ P ] | ch_o ⇒ match c2 with [ ch_o ⇒ P → P | _ ⇒ P ]
-  | ch_p ⇒ match c2 with [ ch_p ⇒ P → P | _ ⇒ P ] | ch_q ⇒ match c2 with [ ch_q ⇒ P → P | _ ⇒ P ]
-  | ch_r ⇒ match c2 with [ ch_r ⇒ P → P | _ ⇒ P ] | ch_s ⇒ match c2 with [ ch_s ⇒ P → P | _ ⇒ P ]
-  | ch_t ⇒ match c2 with [ ch_t ⇒ P → P | _ ⇒ P ] | ch_u ⇒ match c2 with [ ch_u ⇒ P → P | _ ⇒ P ]
-  | ch_v ⇒ match c2 with [ ch_v ⇒ P → P | _ ⇒ P ] | ch_w ⇒ match c2 with [ ch_w ⇒ P → P | _ ⇒ P ]
-  | ch_x ⇒ match c2 with [ ch_x ⇒ P → P | _ ⇒ P ] | ch_y ⇒ match c2 with [ ch_y ⇒ P → P | _ ⇒ P ]
-  | ch_z ⇒ match c2 with [ ch_z ⇒ P → P | _ ⇒ P ]].
+ match eq_ascii c1 c2 with [ true ⇒ P → P | false ⇒ P ].
 
 nlemma ascii_destruct : ascii_destruct_aux.
- #c1; ncases c1;
- ##[ ##1: napply ascii_destruct1 ##| ##2: napply ascii_destruct2
- ##| ##3: napply ascii_destruct3 ##| ##4: napply ascii_destruct4
- ##| ##5: napply ascii_destruct5 ##| ##6: napply ascii_destruct6
- ##| ##7: napply ascii_destruct7 ##| ##8: napply ascii_destruct8
- ##| ##9: napply ascii_destruct9 ##| ##10: napply ascii_destruct10
- ##| ##11: napply ascii_destruct11 ##| ##12: napply ascii_destruct12
- ##| ##13: napply ascii_destruct13 ##| ##14: napply ascii_destruct14
- ##| ##15: napply ascii_destruct15 ##| ##16: napply ascii_destruct16
- ##| ##17: napply ascii_destruct17 ##| ##18: napply ascii_destruct18
- ##| ##19: napply ascii_destruct19 ##| ##20: napply ascii_destruct20
- ##| ##21: napply ascii_destruct21 ##| ##22: napply ascii_destruct22
- ##| ##23: napply ascii_destruct23 ##| ##24: napply ascii_destruct24
- ##| ##25: napply ascii_destruct25 ##| ##26: napply ascii_destruct26
- ##| ##27: napply ascii_destruct27 ##| ##28: napply ascii_destruct28
- ##| ##29: napply ascii_destruct29 ##| ##30: napply ascii_destruct30
- ##| ##31: napply ascii_destruct31 ##| ##32: napply ascii_destruct32
- ##| ##33: napply ascii_destruct33 ##| ##34: napply ascii_destruct34
- ##| ##35: napply ascii_destruct35 ##| ##36: napply ascii_destruct36
- ##| ##37: napply ascii_destruct37 ##| ##38: napply ascii_destruct38
- ##| ##39: napply ascii_destruct39 ##| ##40: napply ascii_destruct40
- ##| ##41: napply ascii_destruct41 ##| ##42: napply ascii_destruct42
- ##| ##43: napply ascii_destruct43 ##| ##44: napply ascii_destruct44
- ##| ##45: napply ascii_destruct45 ##| ##46: napply ascii_destruct46
- ##| ##47: napply ascii_destruct47 ##| ##48: napply ascii_destruct48
- ##| ##49: napply ascii_destruct49 ##| ##50: napply ascii_destruct50
- ##| ##51: napply ascii_destruct51 ##| ##52: napply ascii_destruct52
- ##| ##53: napply ascii_destruct53 ##| ##54: napply ascii_destruct54
- ##| ##55: napply ascii_destruct55 ##| ##56: napply ascii_destruct56
- ##| ##57: napply ascii_destruct57 ##| ##58: napply ascii_destruct58
- ##| ##59: napply ascii_destruct59 ##| ##60: napply ascii_destruct60
- ##| ##61: napply ascii_destruct61 ##| ##62: napply ascii_destruct62
- ##| ##63: napply ascii_destruct63 ##]
+ #c1; #c2; #P; #H;
+ nrewrite < H;
+ nelim c1;
+ nnormalize;
+ napply (λx.x).
 nqed.
index c9d7b910fee9ad3df1197224e6062e0ffb21c552..da7c6158ef983f247bc56986c55aa3ecc33c02fa 100755 (executable)
@@ -200,7 +200,7 @@ nlemma nbfoldrightlist2_to_neq
           ##| ##2: #hh2; #ll2; #H1; #H2; nnormalize; #H3;
                    nchange in H2:(%) with (((f hh1 hh2)⊗(bfold_right_list2 T f ll1 ll2)) = false);
                    napply (H ll2 H1 ? (list_destruct_2 T … H3));
-                   napply (or2_elim ??? (andb_false … H2) );
+                   napply (or2_elim ??? (andb_false2 … H2) );
                    ##[ ##1: #H4; napply (absurd (hh1 = hh2) …);
                             ##[ ##1: nrewrite > (list_destruct_1 T … H3); napply refl_eq
                             ##| ##2: napply (H1 … H4)
@@ -474,7 +474,7 @@ nlemma nbfoldrightnelist2_to_neq
           ##| ##2: #hh2; #ll2; #H1; #H2; nnormalize; #H3;
                    nchange in H2:(%) with (((f hh1 hh2)⊗(bfold_right_neList2 T f ll1 ll2)) = false);
                    napply (H ll2 H1 ? (nelist_destruct_cons_cons_2 T … H3));
-                   napply (or2_elim ??? (andb_false … H2) );
+                   napply (or2_elim ??? (andb_false2 … H2) );
                    ##[ ##1: #H4; napply (absurd (hh1 = hh2) …);
                             ##[ ##1: nrewrite > (nelist_destruct_cons_cons_1 T … H3); napply refl_eq
                             ##| ##2: napply (H1 … H4)
diff --git a/helm/software/matita/contribs/ng_assembly/common/meta_type.ma b/helm/software/matita/contribs/ng_assembly/common/meta_type.ma
new file mode 100755 (executable)
index 0000000..1574f46
--- /dev/null
@@ -0,0 +1,207 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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              *)
+(*   Ultima modifica: 05/08/2009                                          *)
+(*                                                                        *)
+(* ********************************************************************** *)
+
+include "common/string_lemmas.ma".
+
+nlet rec nmember_list (T:Type) (elem:T) (f:T → T → bool) (l:list T) on l ≝
+ match l with
+  [ nil ⇒ true
+  | cons h t ⇒ match f elem h with
+   [ true ⇒ false | false ⇒ nmember_list T elem f t ]
+  ].
+
+(* elem presente una ed una sola volta in l *)
+nlet rec member_list (T:Type) (elem:T) (f:T → T → bool) (l:list T) on l ≝
+ match l with
+  [ nil ⇒ false
+  | cons h t ⇒ match f elem h with
+    [ true ⇒ nmember_list T elem f t | false ⇒ member_list T elem f t ]
+  ].
+
+(* tutti gli atomi dell'universo che poi saranno raggruppati in sottouniversi *)
+ninductive UN : Type ≝
+  uq0 : UN | uq1 : UN | uq2 : UN | uq3 : UN
+| uo0 : UN | uo1 : UN | uo2 : UN | uo3 : UN | uo4 : UN | uo5 : UN | uo6 : UN | uo7 : UN
+| ux0 : UN | ux1 : UN | ux2 : UN | ux3 : UN | ux4 : UN | ux5 : UN | ux6 : UN | ux7 : UN
+| ux8 : UN | ux9 : UN | uxA : UN | uxB : UN | uxC : UN | uxD : UN | uxE : UN | uxF : UN
+.
+
+(* funzione di uguaglianza sugli atomi *)
+ndefinition eq_UN ≝
+λu1,u2.match u1 with
+ [ uq0 ⇒ match u2 with [ uq0 ⇒ true | _ ⇒ false ]
+ | uq1 ⇒ match u2 with [ uq1 ⇒ true | _ ⇒ false ]
+ | uq2 ⇒ match u2 with [ uq2 ⇒ true | _ ⇒ false ]
+ | uq3 ⇒ match u2 with [ uq3 ⇒ true | _ ⇒ false ]
+ | uo0 ⇒ match u2 with [ uo0 ⇒ true | _ ⇒ false ]
+ | uo1 ⇒ match u2 with [ uo1 ⇒ true | _ ⇒ false ]
+ | uo2 ⇒ match u2 with [ uo2 ⇒ true | _ ⇒ false ]
+ | uo3 ⇒ match u2 with [ uo3 ⇒ true | _ ⇒ false ]
+ | uo4 ⇒ match u2 with [ uo4 ⇒ true | _ ⇒ false ]
+ | uo5 ⇒ match u2 with [ uo5 ⇒ true | _ ⇒ false ]
+ | uo6 ⇒ match u2 with [ uo6 ⇒ true | _ ⇒ false ]
+ | uo7 ⇒ match u2 with [ uo7 ⇒ true | _ ⇒ false ]
+ | ux0 ⇒ match u2 with [ ux0 ⇒ true | _ ⇒ false ]
+ | ux1 ⇒ match u2 with [ ux1 ⇒ true | _ ⇒ false ]
+ | ux2 ⇒ match u2 with [ ux2 ⇒ true | _ ⇒ false ]
+ | ux3 ⇒ match u2 with [ ux3 ⇒ true | _ ⇒ false ]
+ | ux4 ⇒ match u2 with [ ux4 ⇒ true | _ ⇒ false ]
+ | ux5 ⇒ match u2 with [ ux5 ⇒ true | _ ⇒ false ]
+ | ux6 ⇒ match u2 with [ ux6 ⇒ true | _ ⇒ false ]
+ | ux7 ⇒ match u2 with [ ux7 ⇒ true | _ ⇒ false ]
+ | ux8 ⇒ match u2 with [ ux8 ⇒ true | _ ⇒ false ]
+ | ux9 ⇒ match u2 with [ ux9 ⇒ true | _ ⇒ false ]
+ | uxA ⇒ match u2 with [ uxA ⇒ true | _ ⇒ false ]
+ | uxB ⇒ match u2 with [ uxB ⇒ true | _ ⇒ false ]
+ | uxC ⇒ match u2 with [ uxC ⇒ true | _ ⇒ false ]
+ | uxD ⇒ match u2 with [ uxD ⇒ true | _ ⇒ false ]
+ | uxE ⇒ match u2 with [ uxE ⇒ true | _ ⇒ false ]
+ | uxF ⇒ match u2 with [ uxF ⇒ true | _ ⇒ false ]
+ ].
+
+(* costruttore di un sottouniverso:
+   S_EL cioe' uno qualsiasi degli elementi del sottouniverso
+   S_KO cioe' il caso impossibile
+*)
+ninductive S_UN (l:list UN) : Type ≝
+  S_EL : Πe:UN.(member_list UN e eq_UN l) = true → S_UN l
+| S_KO : False → S_UN l. 
+
+(* sottoinsieme degli esadecimali *)
+ndefinition EX_UN ≝ [ ux0; ux1; ux2; ux3; ux4; ux5; ux6; ux7; ux8; ux9; uxA; uxB; uxC; uxD; uxE; uxF ].
+
+(* getter del testimone di esistenza *)
+ndefinition getelem : ∀l.∀e:S_UN l.UN.
+ #l; #s; nelim s;
+ ##[ ##1: #u; #H; napply u
+ ##| ##2: #H; nelim H
+ ##]
+nqed.
+
+(* getter della dimostrazione di appartenenza *)
+ndefinition getdim : ∀l.∀e:S_UN l.member_list UN ? eq_UN l = true.
+ ##[ ##2: nelim e;
+          ##[ ##1: #u; #H; napply u
+          ##| ##2: #H; nelim H
+          ##]
+ ##| ##1: #l; #s; nelim s;
+          ##[ ##1: #u; #m; napply m
+          ##| ##2: #H; nelim H
+          ##]
+ ##]
+nqed.
+
+(* costruttore universale di una funzione ad un solo argomento: esadecimali → esadecimali *)
+ndefinition f1_EX_UN
+ : ∀e:S_UN EX_UN.
+   ∀f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16:S_UN EX_UN.
+   S_UN EX_UN.
+ #input; #f1; #f2; #f3; #f4; #f5; #f6; #f7; #f8; #f9; #f10; #f11; #f12; #f13; #f14; #f15; #f16;
+ nelim input;
+ ##[ ##2: #H; nelim H
+ ##| ##1: #u; #H; nelim u in H:(%); #H;
+          ##[ ##13: napply f1 ##| ##14: napply f2 ##| ##15: napply f3 ##| ##16: napply f4
+          ##| ##17: napply f5 ##| ##18: napply f6 ##| ##19: napply f7 ##| ##20: napply f8
+          ##| ##21: napply f9 ##| ##22: napply f10 ##| ##23: napply f11 ##| ##24: napply f12
+          ##| ##25: napply f13 ##| ##26: napply f14 ##| ##27: napply f15 ##| ##28: napply f16
+          ##| ##*: nnormalize in H:(%); napply (S_KO EX_UN (bool_destruct false true False H))
+          ##]
+ ##]
+nqed.
+
+(* esempio: successore esadecimale *)
+ndefinition succ_EX_UN ≝
+λe:S_UN EX_UN.f1_EX_UN
+ (S_EL EX_UN ux1 (refl_eq …)) (S_EL EX_UN ux2 (refl_eq …))
+ (S_EL EX_UN ux3 (refl_eq …)) (S_EL EX_UN ux4 (refl_eq …))
+ (S_EL EX_UN ux5 (refl_eq …)) (S_EL EX_UN ux6 (refl_eq …))
+ (S_EL EX_UN ux7 (refl_eq …)) (S_EL EX_UN ux8 (refl_eq …))
+ (S_EL EX_UN ux9 (refl_eq …)) (S_EL EX_UN uxA (refl_eq …))
+ (S_EL EX_UN uxB (refl_eq …)) (S_EL EX_UN uxC (refl_eq …))
+ (S_EL EX_UN uxD (refl_eq …)) (S_EL EX_UN uxE (refl_eq …))
+ (S_EL EX_UN uxF (refl_eq …)) (S_EL EX_UN ux0 (refl_eq …)).
+
+(* destruct universale per accedere ai due testimoni di esistenza *)
+nlemma same_UN_1 : ∀l.∀e1,e2.∀dim1,dim2.S_EL l e1 dim1 = S_EL l e2 dim2 → e1 = e2.
+ #l; #e1; #e2; #dim1; #dim2; #H;
+ nchange with (match S_EL l e2 dim2 with [ S_EL a _ ⇒ e1 = a | S_KO _ ⇒ False ]);
+ nrewrite < H;
+ nnormalize;
+ napply refl_eq.
+nqed.
+
+(* destruct universale che funziona su qualsiasi sottouniverso *)
+ndefinition destruct_UN
+ : ∀l.∀e1,e2:S_UN l.∀P:Prop.
+   e1 = e2 → match eq_UN (getelem ? e1) (getelem ? e2) with [ true ⇒ P → P | false ⇒ P ].
+ #l; #e1; nelim e1;
+ ##[ ##2: #H; nelim H
+ ##| ##1: #u1; #dim1; #e2; ncases e2;
+          ##[ ##2: #H; nelim H
+          ##| ##1: #u2; #dim2; #P; #H;
+                   nchange with (match eq_UN u1 u2 with [ true ⇒ P → P | false ⇒ P ]);
+                   nrewrite > (same_UN_1 l … H);
+                   nelim u2;
+                   nnormalize;
+                   napply (λx.x)
+          ##]
+ ##]
+nqed.
+
+nlemma eqUN_to_eq : ∀l.∀e1,e2:S_UN l.eq_UN (getelem ? e1) (getelem ? e2) = true → (getelem ? e1) = (getelem ? e2).
+ #l; #e1; nelim e1;
+ ##[ ##2: #H; nelim H
+ ##| ##1: #u1; #dim1; #e2; ncases e2;
+          ##[ ##2: #H; nelim H;
+          ##| ##1: #u2; #dim2; #H; nelim u1;
+                   ##[ ##1: nelim u2; ##[ ##1:
+                    
+
+ndefinition decidable_UN : ∀l.∀e1,e2:S_UN l.decidable (e1 = e2).
+ #l; #e1; ncases e1;
+ ##[ ##2: #H; nelim H
+ ##| ##1: #u1; #dim1; #e2; ncases e2;
+          ##[ ##2: #H; nelim H
+          ##| ##1: #u2; #dim2; nnormalize;
+                   napply (or2_intro2 (? = ?) (? ≠ ?) ?);
+                   nnormalize;
+                   #H;
+                   nchange with (match S_EL l u1 dim1
+                                  return λx.eq_UN x u2 → Prop
+                                 with
+                                  [ S_EL x _ ⇒ λp:(False
+                                  | S_KO H ⇒ True
+                                  ] (refl_eq ? (eq_UN u1 u2);
+                   nletin K ≝ (same_UN_1 l … H);
+                   nelim u1 in dim1:(%) H:(%) K:(%);
+                   #dim1; #H; #K;
+                   napply (destruct_UN l … H);
+
+
+
+
+
+
+
+
+
+
index 170581a672a50ba1cc72f83e07bc734464094800..b30befbf9a41ced577d514b1b3bd8b99a4c88532 100755 (executable)
@@ -153,7 +153,7 @@ nlemma neqstrid_to_neq : ∀sid1,sid2:strId.(eq_strId sid1 sid2 = false) → (si
  #sid2; nelim sid2; #s2; #n2;
  nchange with ((((eq_str s1 s2) ⊗ (eq_nat n1 n2)) = false) → ?);
  #H;
- napply (or2_elim ((eq_str s1 s2) = false) ((eq_nat n1 n2) = false) ? (andb_false … H) …);
+ napply (or2_elim ((eq_str s1 s2) = false) ((eq_nat n1 n2) = false) ? (andb_false2 … H) …);
  ##[ ##1: #H1; napply (decidable_strid_aux1 … (neqstr_to_neq … H1))
  ##| ##2: #H1; napply (decidable_strid_aux2 … (neqnat_to_neq … H1))
  ##]
index 745c07a018a152bfcd713d6641f25d673b1b43a5..bfc65aa003e7349f438d6abd46137834b6459bef 100644 (file)
@@ -27,6 +27,8 @@ freescale/table_RS08.ma common/list.ma freescale/opcode_base.ma
 common/list_utility_lemmas.ma common/list_lemmas.ma common/list_utility.ma
 freescale/table_RS08_tests.ma freescale/opcode.ma freescale/table_RS08.ma
 freescale/translation.ma common/option.ma freescale/table_HC05.ma freescale/table_HC08.ma freescale/table_HCS08.ma freescale/table_RS08.ma
+freescale/translation_lemmas.ma freescale/translation.ma
+common/meta_type.ma common/string_lemmas.ma
 freescale/memory_abs.ma freescale/memory_bits.ma freescale/memory_func.ma freescale/memory_trees.ma
 num/word32_lemmas.ma num/word16_lemmas.ma num/word32.ma
 test_errori.ma 
index ce4e00642433efa96e0e1aab9fb3361bda074e55..ebaf9ae14a52f01f8974c05390eebf7d713795e0 100755 (executable)
@@ -29,41 +29,14 @@ include "freescale/opcode_base.ma".
 
 ndefinition mcu_type_destruct_aux ≝
 Πm1,m2:mcu_type.ΠP:Prop.m1 = m2 →
- match m1 with
-  [ HC05 ⇒ match m2 with [ HC05 ⇒ P → P | _ ⇒ P ]
-  | HC08 ⇒ match m2 with [ HC08 ⇒ P → P | _ ⇒ P ]
-  | HCS08 ⇒ match m2 with [ HCS08 ⇒ P → P | _ ⇒ P ]
-  | RS08 ⇒ match m2 with [ RS08 ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_mcutype m1 m2 with [ true ⇒ P → P | false ⇒ P ].
 
-ndefinition mcu_type_destruct : mcu_type_destruct_aux.
- #m1; #m2; #P;
+ndefinition mcutype_destruct : mcu_type_destruct_aux.
+ #m1; #m2; #P; #H;
+ nrewrite < H;
  nelim m1;
- ##[ ##1: nelim m2; nnormalize; #H;
-          ##[ ##1: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match HC05 with [ HC05 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##2: nelim m2; nnormalize; #H;
-          ##[ ##2: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match HC08 with [ HC08 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##3: nelim m2; nnormalize; #H;
-          ##[ ##3: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match HCS08 with [ HCS08 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##4: nelim m2; nnormalize; #H;
-          ##[ ##4: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match RS08 with [ RS08 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##]
+ nnormalize;
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqmcutype : symmetricT mcu_type bool eq_mcutype.
@@ -90,38 +63,39 @@ nlemma eq_to_eqmcutype : ∀m1,m2.m1 = m2 → eq_mcutype m1 m2 = true.
  ncases m2;
  nnormalize;
  ##[ ##1,6,11,16: #H; napply refl_eq
- ##| ##*: #H; napply (mcu_type_destruct … H)
+ ##| ##*: #H; napply (mcutype_destruct … H)
  ##]
 nqed.
 
-nlemma instr_mode_destruct_MODE_DIRn : ∀n1,n2.MODE_DIRn n1 = MODE_DIRn n2 → n1 = n2.
- #n1; #n2; #H;
- nchange with (match MODE_DIRn n2 with [ MODE_DIRn a ⇒ n1 = a | _ ⇒ False ]);
- nrewrite < H;
- nnormalize;
- napply refl_eq.
-nqed.
-
-nlemma instr_mode_destruct_MODE_DIRn_and_IMM1 : ∀n1,n2.MODE_DIRn_and_IMM1 n1 = MODE_DIRn_and_IMM1 n2 → n1 = n2.
- #n1; #n2; #H;
- nchange with (match MODE_DIRn_and_IMM1 n2 with [ MODE_DIRn_and_IMM1 a ⇒ n1 = a | _ ⇒ False ]);
- nrewrite < H;
+nlemma decidable_mcutype : ∀x,y:mcu_type.decidable (x = y).
+ #x; #y;
  nnormalize;
- napply refl_eq.
+ nelim x;
+ nelim y;
+ ##[ ##1,6,11,16: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …);
+          nnormalize; #H;
+          napply False_ind;
+          napply (mcutype_destruct … H)
+ ##]
 nqed.
 
-nlemma instr_mode_destruct_MODE_TNY : ∀e1,e2.MODE_TNY e1 = MODE_TNY e2 → e1 = e2.
- #e1; #e2; #H;
- nchange with (match MODE_TNY e2 with [ MODE_TNY a ⇒ e1 = a | _ ⇒ False ]);
- nrewrite < H;
+nlemma neqmcutype_to_neq : ∀m1,m2:mcu_type.(eq_mcutype m1 m2 = false) → (m1 ≠ m2).
+ #m1; #m2;
+ ncases m1;
+ ncases m2;
  nnormalize;
- napply refl_eq.
+ ##[ ##1,6,11,16: #H; napply (bool_destruct … H)
+ ##| ##*: #H; #H1; napply (mcutype_destruct … H1)
+ ##]
 nqed.
 
-nlemma instr_mode_destruct_MODE_SRT : ∀t1,t2.MODE_SRT t1 = MODE_SRT t2 → t1 = t2.
- #t1; #t2; #H;
- nchange with (match MODE_SRT t2 with [ MODE_SRT a ⇒ t1 = a | _ ⇒ False ]);
- nrewrite < H;
+nlemma neq_to_neqmcutype : ∀m1,m2.m1 ≠ m2 → eq_mcutype m1 m2 = false.
+ #m1; #m2;
+ ncases m1;
+ ncases m2;
  nnormalize;
- napply refl_eq.
+ ##[ ##1,6,11,16: #H; nelim (H (refl_eq …))
+ ##| ##*: #H; napply refl_eq
+ ##]
 nqed.
index db51eb145e39c470b006b43b2102a4f04ec3efb5..0389dc751bac06902881edb09303e6b626384ee8 100755 (executable)
@@ -77,6 +77,35 @@ nlemma eq_to_eqanyop : ∀m.∀op1,op2:any_opcode m.op1 = op2 → eq_anyop m op1
  napply refl_eq.
 nqed.
 
+nlemma decidable_anyop : ∀m.∀x,y:any_opcode m.decidable (x = y).
+ #m; #x; nelim x; #e1; #y; nelim y; #e2;
+ nnormalize;
+ napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_op e1 e2) …);
+ ##[ ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) … ); nnormalize; #H1; napply (H (anyop_destruct m … H1))
+ ##| ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+ ##]
+nqed.
+
+nlemma neqanyop_to_neq : ∀m.∀op1,op2:any_opcode m.(eq_anyop m op1 op2 = false) → (op1 ≠ op2).
+ #m; #op1; nelim op1; #e1; #op2; nelim op2; #e2;
+ nchange with (((eq_op e1 e2) = false) → ?);
+ #H;
+ nnormalize;
+ #H1;
+ napply (neqop_to_neq … H);
+ napply (anyop_destruct m … H1).
+nqed.
+
+nlemma neq_to_neqanyop : ∀m.∀op1,op2:any_opcode m.op1 ≠ op2 → eq_anyop m op1 op2 = false.
+ #m; #op1; nelim op1; #e1; #op2; nelim op2; #e2;
+ #H; nchange with ((eq_op e1 e2) = false);
+ napply (neq_to_neqop e1 e2 ?);
+ nnormalize;
+ #H1;
+ nrewrite > H1 in H:(%); #H;
+ napply (H (refl_eq …)).
+nqed.
+
 nlemma b8w16_destruct_b8_b8 : ∀x1,x2.Byte x1 = Byte x2 → x1 = x2.
  #x1; #x2; #H;
  nchange with (match Byte x2 with [ Byte a ⇒ x1 = a | Word _ ⇒ False ]);
@@ -124,3 +153,56 @@ nlemma symmetric_eqb8w16 : ∀bw1,bw2.eq_b8w16 bw1 bw2 = eq_b8w16 bw2 bw1.
           napply refl_eq
  ##]
 nqed.
+
+nlemma eqb8w16_to_eq : ∀bw1,bw2.eq_b8w16 bw1 bw2 = true → bw1 = bw2.
+ #bw1; #bw2;
+ ncases bw1; #e1; ncases bw2; #e2;
+ ##[ ##1: nchange with ((eq_b8 e1 e2 = true) → ?); #H; nrewrite > (eqb8_to_eq … H); napply refl_eq
+ ##| ##2,3: nnormalize; #H; napply (bool_destruct … H)
+ ##| ##4: nchange with ((eq_w16 e1 e2 = true) → ?); #H; nrewrite > (eqw16_to_eq … H); napply refl_eq
+ ##]
+nqed.
+
+nlemma eq_to_eqb8w16 : ∀bw1,bw2.bw1 = bw2 → eq_b8w16 bw1 bw2 = true.
+ #bw1; #bw2;
+ ncases bw1; #e1; ncases bw2; #e2;
+ ##[ ##1: #H; nrewrite > (b8w16_destruct_b8_b8 … H);
+          nchange with (eq_b8 e2 e2 = true);
+          nrewrite > (eq_to_eqb8 e2 e2 (refl_eq …));
+          napply refl_eq
+ ##| ##2: #H; nelim (b8w16_destruct_b8_w16 … H)
+ ##| ##3: #H; nelim (b8w16_destruct_w16_b8 … H);
+ ##| ##4: #H; nrewrite > (b8w16_destruct_w16_w16 … H);
+          nchange with (eq_w16 e2 e2 = true);
+          nrewrite > (eq_to_eqw16 e2 e2 (refl_eq …));
+          napply refl_eq
+ ##]
+nqed.
+
+nlemma decidable_b8w16 : ∀x,y:byte8_or_word16.decidable (x = y).
+ #x; nelim x; #e1; #y; nelim y; #e2;
+ nnormalize;
+ ##[ ##1: napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_b8 e1 e2) …);
+          ##[ ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) … ); nnormalize; #H1; napply (H (b8w16_destruct_b8_b8 … H1))
+          ##| ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+          ##]
+ ##| ##2: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply (b8w16_destruct_b8_w16 … H)
+ ##| ##3: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply (b8w16_destruct_w16_b8 … H)
+ ##| ##4: napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_w16 e1 e2) …);
+          ##[ ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) … ); nnormalize; #H1; napply (H (b8w16_destruct_w16_w16 … H1))
+          ##| ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+          ##]
+ ##]
+nqed.
+
+nlemma neqb8w16_to_neq : ∀bw1,bw2.eq_b8w16 bw1 bw2 = false → bw1 ≠ bw2.
+ #bw1; #bw2;
+ ncases bw1; #e1; ncases bw2; #e2;
+ ##[ ##1: nchange with ((eq_b8 e1 e2 = false) → ?); #H;
+          nnormalize; #H1; napply (neqb8_to_neq … H); napply (b8w16_destruct_b8_b8 … H1)
+ ##| ##2: nnormalize; #H; #H1; napply (b8w16_destruct_b8_w16 … H1)
+ ##| ##3: nnormalize; #H; #H1; napply (b8w16_destruct_w16_b8 … H1)
+ ##| ##4: nchange with ((eq_w16 e1 e2 = false) → ?); #H;
+          nnormalize; #H1; napply (neqw16_to_neq … H); napply (b8w16_destruct_w16_w16 … H1)
+ ##]
+nqed.
index 61cf6a5b86945271a6bad677e1bee1ac114e7244..2d851ffc4a0d07da35e6776e1b92250a0bca7851 100755 (executable)
@@ -29,517 +29,7 @@ include "freescale/opcode_base.ma".
 (* MATTONI BASE PER DEFINIRE LE TABELLE DELLE MCU *)
 (* ********************************************** *)
 
-ndefinition instr_mode_destruct1 :
- Πi2.ΠP:Prop.MODE_INH = i2 → match i2 with [ MODE_INH ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##1: #H; napply (λx:P.x)
- ##| ##2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INH with [ MODE_INH ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INH with [ MODE_INH ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct2 :
- Πi2.ΠP:Prop.MODE_INHA = i2 → match i2 with [ MODE_INHA ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##2: #H; napply (λx:P.x)
- ##| ##1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHA with [ MODE_INHA ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHA with [ MODE_INHA ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct3 :
- Πi2.ΠP:Prop.MODE_INHX = i2 → match i2 with [ MODE_INHX ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##3: #H; napply (λx:P.x)
- ##| ##1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHX with [ MODE_INHX ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHX with [ MODE_INHX ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct4 :
- Πi2.ΠP:Prop.MODE_INHH = i2 → match i2 with [ MODE_INHH ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##4: #H; napply (λx:P.x)
- ##| ##1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHH with [ MODE_INHH ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHH with [ MODE_INHH ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct5 :
- Πi2.ΠP:Prop.MODE_INHX0ADD = i2 → match i2 with [ MODE_INHX0ADD ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##5: #H; napply (λx:P.x)
- ##| ##1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHX0ADD with [ MODE_INHX0ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHX0ADD with [ MODE_INHX0ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct6 :
- Πi2.ΠP:Prop.MODE_INHX1ADD = i2 → match i2 with [ MODE_INHX1ADD ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##6: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHX1ADD with [ MODE_INHX1ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHX1ADD with [ MODE_INHX1ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct7 :
- Πi2.ΠP:Prop.MODE_INHX2ADD = i2 → match i2 with [ MODE_INHX2ADD ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##7: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHX2ADD with [ MODE_INHX2ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHX2ADD with [ MODE_INHX2ADD ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct8 :
- Πi2.ΠP:Prop.MODE_IMM1 = i2 → match i2 with [ MODE_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##8: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1 with [ MODE_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1 with [ MODE_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct9 :
- Πi2.ΠP:Prop.MODE_IMM1EXT = i2 → match i2 with [ MODE_IMM1EXT ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##9: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1EXT with [ MODE_IMM1EXT ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1EXT with [ MODE_IMM1EXT ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct10 :
- Πi2.ΠP:Prop.MODE_IMM2 = i2 → match i2 with [ MODE_IMM2 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##10: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IMM2 with [ MODE_IMM2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IMM2 with [ MODE_IMM2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct11 :
- Πi2.ΠP:Prop.MODE_DIR1 = i2 → match i2 with [ MODE_DIR1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##11: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1 with [ MODE_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1 with [ MODE_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct12 :
- Πi2.ΠP:Prop.MODE_DIR2 = i2 → match i2 with [ MODE_DIR2 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##12: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIR2 with [ MODE_DIR2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIR2 with [ MODE_DIR2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct13 :
- Πi2.ΠP:Prop.MODE_IX0 = i2 → match i2 with [ MODE_IX0 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##13: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX0 with [ MODE_IX0 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX0 with [ MODE_IX0 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct14 :
- Πi2.ΠP:Prop.MODE_IX1 = i2 → match i2 with [ MODE_IX1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##14: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX1 with [ MODE_IX1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX1 with [ MODE_IX1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct15 :
- Πi2.ΠP:Prop.MODE_IX2 = i2 → match i2 with [ MODE_IX2 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##15: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX2 with [ MODE_IX2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX2 with [ MODE_IX2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct16 :
- Πi2.ΠP:Prop.MODE_SP1 = i2 → match i2 with [ MODE_SP1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##16: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_SP1 with [ MODE_SP1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_SP1 with [ MODE_SP1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct17 :
- Πi2.ΠP:Prop.MODE_SP2 = i2 → match i2 with [ MODE_SP2 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##17: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_SP2 with [ MODE_SP2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_SP2 with [ MODE_SP2 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct18 :
- Πi2.ΠP:Prop.MODE_DIR1_to_DIR1 = i2 → match i2 with [ MODE_DIR1_to_DIR1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##18: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_to_DIR1 with [ MODE_DIR1_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_to_DIR1 with [ MODE_DIR1_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct19 :
- Πi2.ΠP:Prop.MODE_IMM1_to_DIR1 = i2 → match i2 with [ MODE_IMM1_to_DIR1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##19: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1_to_DIR1 with [ MODE_IMM1_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1_to_DIR1 with [ MODE_IMM1_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct20 :
- Πi2.ΠP:Prop.MODE_IX0p_to_DIR1 = i2 → match i2 with [ MODE_IX0p_to_DIR1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##20: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX0p_to_DIR1 with [ MODE_IX0p_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX0p_to_DIR1 with [ MODE_IX0p_to_DIR1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct21 :
- Πi2.ΠP:Prop.MODE_DIR1_to_IX0p = i2 → match i2 with [ MODE_DIR1_to_IX0p ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##21: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_to_IX0p with [ MODE_DIR1_to_IX0p ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_to_IX0p with [ MODE_DIR1_to_IX0p ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct22 :
- Πi2.ΠP:Prop.MODE_INHA_and_IMM1 = i2 → match i2 with [ MODE_INHA_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##22: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHA_and_IMM1 with [ MODE_INHA_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHA_and_IMM1 with [ MODE_INHA_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct23 :
- Πi2.ΠP:Prop.MODE_INHX_and_IMM1 = i2 → match i2 with [ MODE_INHX_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##23: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_INHX_and_IMM1 with [ MODE_INHX_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_INHX_and_IMM1 with [ MODE_INHX_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct24 :
- Πi2.ΠP:Prop.MODE_IMM1_and_IMM1 = i2 → match i2 with [ MODE_IMM1_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##24: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1_and_IMM1 with [ MODE_IMM1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IMM1_and_IMM1 with [ MODE_IMM1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct25 :
- Πi2.ΠP:Prop.MODE_DIR1_and_IMM1 = i2 → match i2 with [ MODE_DIR1_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##25: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_and_IMM1 with [ MODE_DIR1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIR1_and_IMM1 with [ MODE_DIR1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct26 :
- Πi2.ΠP:Prop.MODE_IX0_and_IMM1 = i2 → match i2 with [ MODE_IX0_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##26: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX0_and_IMM1 with [ MODE_IX0_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX0_and_IMM1 with [ MODE_IX0_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct27 :
- Πi2.ΠP:Prop.MODE_IX0p_and_IMM1 = i2 → match i2 with [ MODE_IX0p_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##27: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX0p_and_IMM1 with [ MODE_IX0p_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX0p_and_IMM1 with [ MODE_IX0p_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct28 :
- Πi2.ΠP:Prop.MODE_IX1_and_IMM1 = i2 → match i2 with [ MODE_IX1_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##28: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX1_and_IMM1 with [ MODE_IX1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX1_and_IMM1 with [ MODE_IX1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct29 :
- Πi2.ΠP:Prop.MODE_IX1p_and_IMM1 = i2 → match i2 with [ MODE_IX1p_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##29: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30: #H;
-     napply False_ind;
-     nchange with (match MODE_IX1p_and_IMM1 with [ MODE_IX1p_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_IX1p_and_IMM1 with [ MODE_IX1p_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition instr_mode_destruct30 :
- Πi2.ΠP:Prop.MODE_SP1_and_IMM1 = i2 → match i2 with [ MODE_SP1_and_IMM1 ⇒ P → P | _ ⇒ P ].
- #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##30: #H; napply (λx:P.x)
- ##| ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29: #H;
-     napply False_ind;
-     nchange with (match MODE_SP1_and_IMM1 with [ MODE_SP1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_SP1_and_IMM1 with [ MODE_SP1_and_IMM1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-nlemma instr_mode_destruct_MODE_DIRn : ∀n1,n2.MODE_DIRn n1 = MODE_DIRn n2 → n1 = n2.
+nlemma instrmode_destruct_MODE_DIRn : ∀n1,n2.MODE_DIRn n1 = MODE_DIRn n2 → n1 = n2.
  #n1; #n2; #H;
  nchange with (match MODE_DIRn n2 with [ MODE_DIRn a ⇒ n1 = a | _ ⇒ False ]);
  nrewrite < H;
@@ -547,36 +37,7 @@ nlemma instr_mode_destruct_MODE_DIRn : ∀n1,n2.MODE_DIRn n1 = MODE_DIRn n2 →
  napply refl_eq.
 nqed.
 
-ndefinition instr_mode_destruct31 :
- Πn1,i2.ΠP:Prop.MODE_DIRn n1 = i2 →
-  match i2 with
-   [ MODE_DIRn n2 ⇒ match n1 with
-    [ o0 ⇒ match n2 with [ o0 ⇒ P → P | _ ⇒ P ] | o1 ⇒ match n2 with [ o1 ⇒ P → P | _ ⇒ P ]
-    | o2 ⇒ match n2 with [ o2 ⇒ P → P | _ ⇒ P ] | o3 ⇒ match n2 with [ o3 ⇒ P → P | _ ⇒ P ]
-    | o4 ⇒ match n2 with [ o4 ⇒ P → P | _ ⇒ P ] | o5 ⇒ match n2 with [ o5 ⇒ P → P | _ ⇒ P ]
-    | o6 ⇒ match n2 with [ o6 ⇒ P → P | _ ⇒ P ] | o7 ⇒ match n2 with [ o7 ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ].
- #n1; #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIRn n1 with [ MODE_DIRn a ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##32,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIRn n1 with [ MODE_DIRn n1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31: #n2;
-     ncases n1;
-     ncases n2;
-     nnormalize;
-     ##[ ##1,10,19,28,37,46,55,64: #H; napply (λx:P.x)
-     ##| ##*: #H; napply (oct_destruct … (instr_mode_destruct_MODE_DIRn … H))
-     ##]
-nqed.
-
-nlemma instr_mode_destruct_MODE_DIRn_and_IMM1 : ∀n1,n2.MODE_DIRn_and_IMM1 n1 = MODE_DIRn_and_IMM1 n2 → n1 = n2.
+nlemma instrmode_destruct_MODE_DIRn_and_IMM1 : ∀n1,n2.MODE_DIRn_and_IMM1 n1 = MODE_DIRn_and_IMM1 n2 → n1 = n2.
  #n1; #n2; #H;
  nchange with (match MODE_DIRn_and_IMM1 n2 with [ MODE_DIRn_and_IMM1 a ⇒ n1 = a | _ ⇒ False ]);
  nrewrite < H;
@@ -584,347 +45,711 @@ nlemma instr_mode_destruct_MODE_DIRn_and_IMM1 : ∀n1,n2.MODE_DIRn_and_IMM1 n1 =
  napply refl_eq.
 nqed.
 
-ndefinition instr_mode_destruct32 :
- Πn1,i2.ΠP:Prop.MODE_DIRn_and_IMM1 n1 = i2 →
-  match i2 with
-   [ MODE_DIRn_and_IMM1 n2 ⇒ match n1 with
-    [ o0 ⇒ match n2 with [ o0 ⇒ P → P | _ ⇒ P ] | o1 ⇒ match n2 with [ o1 ⇒ P → P | _ ⇒ P ]
-    | o2 ⇒ match n2 with [ o2 ⇒ P → P | _ ⇒ P ] | o3 ⇒ match n2 with [ o3 ⇒ P → P | _ ⇒ P ]
-    | o4 ⇒ match n2 with [ o4 ⇒ P → P | _ ⇒ P ] | o5 ⇒ match n2 with [ o5 ⇒ P → P | _ ⇒ P ]
-    | o6 ⇒ match n2 with [ o6 ⇒ P → P | _ ⇒ P ] | o7 ⇒ match n2 with [ o7 ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ].
- #n1; #i2; #P;
- ncases i2;
+nlemma instrmode_destruct_MODE_TNY : ∀e1,e2.MODE_TNY e1 = MODE_TNY e2 → e1 = e2.
+ #e1; #e2; #H;
+ nchange with (match MODE_TNY e2 with [ MODE_TNY a ⇒ e1 = a | _ ⇒ False ]);
+ nrewrite < H;
  nnormalize;
- ##[ ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_DIRn_and_IMM1 n1 with [ MODE_DIRn_and_IMM1 a ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,33,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_DIRn_and_IMM1 n1 with [ MODE_DIRn_and_IMM1 n1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##32: #n2;
-     ncases n1;
-     ncases n2;
-     nnormalize;
-     ##[ ##1,10,19,28,37,46,55,64: #H; napply (λx:P.x)
-     ##| ##*: #H; napply (oct_destruct … (instr_mode_destruct_MODE_DIRn_and_IMM1 … H))
-     ##]
+ napply refl_eq.
 nqed.
 
-nlemma instr_mode_destruct_MODE_TNY : ∀n1,n2.MODE_TNY n1 = MODE_TNY n2 → n1 = n2.
- #n1; #n2; #H;
- nchange with (match MODE_TNY n2 with [ MODE_TNY a ⇒ n1 = a | _ ⇒ False ]);
+nlemma instrmode_destruct_MODE_SRT : ∀t1,t2.MODE_SRT t1 = MODE_SRT t2 → t1 = t2.
+ #t1; #t2; #H;
+ nchange with (match MODE_SRT t2 with [ MODE_SRT a ⇒ t1 = a | _ ⇒ False ]);
  nrewrite < H;
  nnormalize;
  napply refl_eq.
 nqed.
 
-ndefinition instr_mode_destruct33 :
- Πn1,i2.ΠP:Prop.MODE_TNY n1 = i2 →
-  match i2 with
-   [ MODE_TNY n2 ⇒ match n1 with
-    [ x0 ⇒ match n2 with [ x0 ⇒ P → P | _ ⇒ P ] | x1 ⇒ match n2 with [ x1 ⇒ P → P | _ ⇒ P ]
-    | x2 ⇒ match n2 with [ x2 ⇒ P → P | _ ⇒ P ] | x3 ⇒ match n2 with [ x3 ⇒ P → P | _ ⇒ P ]
-    | x4 ⇒ match n2 with [ x4 ⇒ P → P | _ ⇒ P ] | x5 ⇒ match n2 with [ x5 ⇒ P → P | _ ⇒ P ]
-    | x6 ⇒ match n2 with [ x6 ⇒ P → P | _ ⇒ P ] | x7 ⇒ match n2 with [ x7 ⇒ P → P | _ ⇒ P ]
-    | x8 ⇒ match n2 with [ x8 ⇒ P → P | _ ⇒ P ] | x9 ⇒ match n2 with [ x9 ⇒ P → P | _ ⇒ P ]
-    | xA ⇒ match n2 with [ xA ⇒ P → P | _ ⇒ P ] | xB ⇒ match n2 with [ xB ⇒ P → P | _ ⇒ P ]
-    | xC ⇒ match n2 with [ xC ⇒ P → P | _ ⇒ P ] | xD ⇒ match n2 with [ xD ⇒ P → P | _ ⇒ P ]
-    | xE ⇒ match n2 with [ xE ⇒ P → P | _ ⇒ P ] | xF ⇒ match n2 with [ xF ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ].
- #n1; #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_TNY n1 with [ MODE_TNY a ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,34: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_TNY n1 with [ MODE_TNY n1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##33: #n2;
-     ncases n1;
-     ncases n2;
-     nnormalize;
-     ##[ ##1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,256: #H; napply (λx:P.x)
-     ##| ##*: #H; napply (exadecim_destruct … (instr_mode_destruct_MODE_TNY … H))
+ndefinition instrmode_destruct_aux ≝
+Πi1,i2.ΠP:Prop.i1 = i2 →
+ match eq_im i1 i2 with [ true ⇒ P → P | false ⇒ P ].
+
+ndefinition instrmode_destruct : instrmode_destruct_aux.
+ #t1; #t2; #P; #H;
+ nrewrite < H;
+ nelim t1;
+ nnormalize;
+ ##[ ##31,32,33,34: #sub; nelim sub; nnormalize ##]
+ napply (λx.x).
+nqed.
+
+nlemma symmetric_eqim : symmetricT instr_mode bool eq_im.
+ #i1; #i2;
+ ncases i1;
+ ##[ ##1: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##2: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##3: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##4: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##5: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##6: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##7: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##8: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##9: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##10: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##11: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##12: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##13: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##14: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##15: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##16: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##17: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##18: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##19: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##20: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##21: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##22: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##23: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##24: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##25: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##26: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##27: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##28: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##29: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##30: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
+ ##| ##31: ncases i2; #n1;
+     ##[ ##31: #n2;
+               nchange with (eq_oct n2 n1 = eq_oct n1 n2);
+               nrewrite > (symmetric_eqoct n1 n2);
+     ##| ##32,33,34: #n2; nnormalize 
      ##]
+     nnormalize; napply refl_eq
+ ##| ##32: ncases i2; #n1;
+     ##[ ##32: #n2;
+               nchange with (eq_oct n2 n1 = eq_oct n1 n2);
+               nrewrite > (symmetric_eqoct n1 n2);
+     ##| ##31,33,34: #n2; nnormalize 
+     ##]
+     nnormalize; napply refl_eq
+ ##| ##33: ncases i2; #n1;
+     ##[ ##33: #n2;
+               nchange with (eq_ex n2 n1 = eq_ex n1 n2);
+               nrewrite > (symmetric_eqex n1 n2);
+     ##| ##31,32,34: #n2; nnormalize 
+     ##]
+     nnormalize; napply refl_eq
+ ##| ##34: ncases i2; #n1;
+     ##[ ##34: #n2;
+               nchange with (eq_bit n2 n1 = eq_bit n1 n2);
+               nrewrite > (symmetric_eqbit n1 n2);
+     ##| ##31,32,33: #n2; nnormalize 
+     ##]
+     nnormalize; napply refl_eq
+ ##]
 nqed.
 
-nlemma instr_mode_destruct_MODE_SRT : ∀n1,n2.MODE_SRT n1 = MODE_SRT n2 → n1 = n2.
- #n1; #n2; #H;
- nchange with (match MODE_SRT n2 with [ MODE_SRT a ⇒ n1 = a | _ ⇒ False ]);
- nrewrite < H;
- nnormalize;
- napply refl_eq.
+nlemma eqim_to_eq1 : ∀i2.eq_im MODE_INH i2 = true → MODE_INH = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##1: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
 nqed.
 
-ndefinition instr_mode_destruct34 :
- Πn1,i2.ΠP:Prop.MODE_SRT n1 = i2 →
-  match i2 with
-   [ MODE_SRT n2 ⇒ match n1 with
-    [ t00 ⇒ match n2 with [ t00 ⇒ P → P | _ ⇒ P ] | t01 ⇒ match n2 with [ t01 ⇒ P → P | _ ⇒ P ]
-    | t02 ⇒ match n2 with [ t02 ⇒ P → P | _ ⇒ P ] | t03 ⇒ match n2 with [ t03 ⇒ P → P | _ ⇒ P ]
-    | t04 ⇒ match n2 with [ t04 ⇒ P → P | _ ⇒ P ] | t05 ⇒ match n2 with [ t05 ⇒ P → P | _ ⇒ P ]
-    | t06 ⇒ match n2 with [ t06 ⇒ P → P | _ ⇒ P ] | t07 ⇒ match n2 with [ t07 ⇒ P → P | _ ⇒ P ]
-    | t08 ⇒ match n2 with [ t08 ⇒ P → P | _ ⇒ P ] | t09 ⇒ match n2 with [ t09 ⇒ P → P | _ ⇒ P ]
-    | t0A ⇒ match n2 with [ t0A ⇒ P → P | _ ⇒ P ] | t0B ⇒ match n2 with [ t0B ⇒ P → P | _ ⇒ P ]
-    | t0C ⇒ match n2 with [ t0C ⇒ P → P | _ ⇒ P ] | t0D ⇒ match n2 with [ t0D ⇒ P → P | _ ⇒ P ]
-    | t0E ⇒ match n2 with [ t0E ⇒ P → P | _ ⇒ P ] | t0F ⇒ match n2 with [ t0F ⇒ P → P | _ ⇒ P ]
-    | t10 ⇒ match n2 with [ t10 ⇒ P → P | _ ⇒ P ] | t11 ⇒ match n2 with [ t11 ⇒ P → P | _ ⇒ P ]
-    | t12 ⇒ match n2 with [ t12 ⇒ P → P | _ ⇒ P ] | t13 ⇒ match n2 with [ t13 ⇒ P → P | _ ⇒ P ]
-    | t14 ⇒ match n2 with [ t14 ⇒ P → P | _ ⇒ P ] | t15 ⇒ match n2 with [ t15 ⇒ P → P | _ ⇒ P ]
-    | t16 ⇒ match n2 with [ t16 ⇒ P → P | _ ⇒ P ] | t17 ⇒ match n2 with [ t17 ⇒ P → P | _ ⇒ P ]
-    | t18 ⇒ match n2 with [ t18 ⇒ P → P | _ ⇒ P ] | t19 ⇒ match n2 with [ t19 ⇒ P → P | _ ⇒ P ]
-    | t1A ⇒ match n2 with [ t1A ⇒ P → P | _ ⇒ P ] | t1B ⇒ match n2 with [ t1B ⇒ P → P | _ ⇒ P ]
-    | t1C ⇒ match n2 with [ t1C ⇒ P → P | _ ⇒ P ] | t1D ⇒ match n2 with [ t1D ⇒ P → P | _ ⇒ P ]
-    | t1E ⇒ match n2 with [ t1E ⇒ P → P | _ ⇒ P ] | t1F ⇒ match n2 with [ t1F ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ].
- #n1; #i2; #P;
- ncases i2;
- nnormalize;
- ##[ ##1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30: #H;
-     napply False_ind;
-     nchange with (match MODE_SRT n1 with [ MODE_SRT a ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##31,32,33: #n; #H;
-     napply False_ind;
-     nchange with (match MODE_SRT n1 with [ MODE_SRT n1 ⇒ False | _ ⇒ True ]);
-     nrewrite > H; nnormalize; napply I
- ##| ##34: #n2;
-     ncases n1;
-     ##[ ##1: ncases n2; nnormalize;
-              ##[ ##1: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##2: ncases n2; nnormalize;
-              ##[ ##2: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##3: ncases n2; nnormalize;
-              ##[ ##3: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##4: ncases n2; nnormalize;
-              ##[ ##4: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##5: ncases n2; nnormalize;
-              ##[ ##5: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##6: ncases n2; nnormalize;
-              ##[ ##6: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##7: ncases n2; nnormalize;
-              ##[ ##7: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##8: ncases n2; nnormalize;
-              ##[ ##8: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##9: ncases n2; nnormalize;
-              ##[ ##9: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##10: ncases n2; nnormalize;
-              ##[ ##10: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##11: ncases n2; nnormalize;
-              ##[ ##11: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##12: ncases n2; nnormalize;
-              ##[ ##12: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##13: ncases n2; nnormalize;
-              ##[ ##13: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##14: ncases n2; nnormalize;
-              ##[ ##14: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##15: ncases n2; nnormalize;
-              ##[ ##15: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##16: ncases n2; nnormalize;
-              ##[ ##16: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##17: ncases n2; nnormalize;
-              ##[ ##17: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##18: ncases n2; nnormalize;
-              ##[ ##18: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##19: ncases n2; nnormalize;
-              ##[ ##19: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##20: ncases n2; nnormalize;
-              ##[ ##20: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##21: ncases n2; nnormalize;
-              ##[ ##21: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##22: ncases n2; nnormalize;
-              ##[ ##22: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##23: ncases n2; nnormalize;
-              ##[ ##23: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##24: ncases n2; nnormalize;
-              ##[ ##24: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##25: ncases n2; nnormalize;
-              ##[ ##25: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##26: ncases n2; nnormalize;
-              ##[ ##26: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##27: ncases n2; nnormalize;
-              ##[ ##27: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##28: ncases n2; nnormalize;
-              ##[ ##28: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##29: ncases n2; nnormalize;
-              ##[ ##29: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##30: ncases n2; nnormalize;
-              ##[ ##30: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##31: ncases n2; nnormalize;
-              ##[ ##31: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##| ##32: ncases n2; nnormalize;
-              ##[ ##32: #H; napply (λx:P.x)
-              ##| ##*: #H; napply (bitrigesim_destruct … (instr_mode_destruct_MODE_SRT … H))
-              ##]
-     ##]
+nlemma eqim_to_eq2 : ∀i2.eq_im MODE_INHA i2 = true → MODE_INHA = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##2: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
  ##]
 nqed.
 
-ndefinition instr_mode_destruct_aux ≝
-Πi1,i2.ΠP:Prop.i1 = i2 →
- match i1 with
-  [ MODE_INH ⇒ match i2 with [ MODE_INH ⇒ P → P | _ ⇒ P ]
-  | MODE_INHA ⇒ match i2 with [ MODE_INHA ⇒ P → P | _ ⇒ P ]
-  | MODE_INHX ⇒ match i2 with [ MODE_INHX ⇒ P → P | _ ⇒ P ]
-  | MODE_INHH ⇒ match i2 with [ MODE_INHH ⇒ P → P | _ ⇒ P ]
-  | MODE_INHX0ADD ⇒ match i2 with [ MODE_INHX0ADD ⇒ P → P | _ ⇒ P ]
-  | MODE_INHX1ADD ⇒ match i2 with [ MODE_INHX1ADD ⇒ P → P | _ ⇒ P ]
-  | MODE_INHX2ADD ⇒ match i2 with [ MODE_INHX2ADD ⇒ P → P | _ ⇒ P ]
-  | MODE_IMM1 ⇒ match i2 with [ MODE_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IMM1EXT ⇒ match i2 with [ MODE_IMM1EXT ⇒ P → P | _ ⇒ P ]
-  | MODE_IMM2 ⇒ match i2 with [ MODE_IMM2 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIR1 ⇒ match i2 with [ MODE_DIR1 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIR2 ⇒ match i2 with [ MODE_DIR2 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX0 ⇒ match i2 with [ MODE_IX0 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX1 ⇒ match i2 with [ MODE_IX1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX2 ⇒ match i2 with [ MODE_IX2 ⇒ P → P | _ ⇒ P ]
-  | MODE_SP1 ⇒ match i2 with [ MODE_SP1 ⇒ P → P | _ ⇒ P ]
-  | MODE_SP2 ⇒ match i2 with [ MODE_SP2 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIR1_to_DIR1  ⇒ match i2 with [ MODE_DIR1_to_DIR1  ⇒ P → P | _ ⇒ P ]
-  | MODE_IMM1_to_DIR1 ⇒ match i2 with [ MODE_IMM1_to_DIR1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX0p_to_DIR1 ⇒ match i2 with [ MODE_IX0p_to_DIR1 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIR1_to_IX0p ⇒ match i2 with [ MODE_DIR1_to_IX0p ⇒ P → P | _ ⇒ P ]
-  | MODE_INHA_and_IMM1 ⇒ match i2 with [ MODE_INHA_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_INHX_and_IMM1 ⇒ match i2 with [ MODE_INHX_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IMM1_and_IMM1 ⇒ match i2 with [ MODE_IMM1_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIR1_and_IMM1 ⇒ match i2 with [ MODE_DIR1_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX0_and_IMM1 ⇒ match i2 with [ MODE_IX0_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX0p_and_IMM1 ⇒ match i2 with [ MODE_IX0p_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX1_and_IMM1 ⇒ match i2 with [ MODE_IX1_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_IX1p_and_IMM1 ⇒ match i2 with [ MODE_IX1p_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_SP1_and_IMM1 ⇒ match i2 with [ MODE_SP1_and_IMM1 ⇒ P → P | _ ⇒ P ]
-  | MODE_DIRn n1 ⇒ match i2 with
-   [ MODE_DIRn n2 ⇒ match n1 with
-    [ o0 ⇒ match n2 with [ o0 ⇒ P → P | _ ⇒ P ] | o1 ⇒ match n2 with [ o1 ⇒ P → P | _ ⇒ P ]
-    | o2 ⇒ match n2 with [ o2 ⇒ P → P | _ ⇒ P ] | o3 ⇒ match n2 with [ o3 ⇒ P → P | _ ⇒ P ]
-    | o4 ⇒ match n2 with [ o4 ⇒ P → P | _ ⇒ P ] | o5 ⇒ match n2 with [ o5 ⇒ P → P | _ ⇒ P ]
-    | o6 ⇒ match n2 with [ o6 ⇒ P → P | _ ⇒ P ] | o7 ⇒ match n2 with [ o7 ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ]
-  | MODE_DIRn_and_IMM1 n1 ⇒ match i2 with
-   [ MODE_DIRn_and_IMM1 n2 ⇒ match n1 with
-    [ o0 ⇒ match n2 with [ o0 ⇒ P → P | _ ⇒ P ] | o1 ⇒ match n2 with [ o1 ⇒ P → P | _ ⇒ P ] 
-    | o2 ⇒ match n2 with [ o2 ⇒ P → P | _ ⇒ P ] | o3 ⇒ match n2 with [ o3 ⇒ P → P | _ ⇒ P ]
-    | o4 ⇒ match n2 with [ o4 ⇒ P → P | _ ⇒ P ] | o5 ⇒ match n2 with [ o5 ⇒ P → P | _ ⇒ P ]
-    | o6 ⇒ match n2 with [ o6 ⇒ P → P | _ ⇒ P ] | o7 ⇒ match n2 with [ o7 ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ]
-  | MODE_TNY e1 ⇒ match i2 with
-   [ MODE_TNY e2 ⇒ match e1 with
-    [ x0 ⇒ match e2 with [ x0 ⇒ P → P | _ ⇒ P ] | x1 ⇒ match e2 with [ x1 ⇒ P → P | _ ⇒ P ]
-    | x2 ⇒ match e2 with [ x2 ⇒ P → P | _ ⇒ P ] | x3 ⇒ match e2 with [ x3 ⇒ P → P | _ ⇒ P ]
-    | x4 ⇒ match e2 with [ x4 ⇒ P → P | _ ⇒ P ] | x5 ⇒ match e2 with [ x5 ⇒ P → P | _ ⇒ P ]
-    | x6 ⇒ match e2 with [ x6 ⇒ P → P | _ ⇒ P ] | x7 ⇒ match e2 with [ x7 ⇒ P → P | _ ⇒ P ]
-    | x8 ⇒ match e2 with [ x8 ⇒ P → P | _ ⇒ P ] | x9 ⇒ match e2 with [ x9 ⇒ P → P | _ ⇒ P ]
-    | xA ⇒ match e2 with [ xA ⇒ P → P | _ ⇒ P ] | xB ⇒ match e2 with [ xB ⇒ P → P | _ ⇒ P ]
-    | xC ⇒ match e2 with [ xC ⇒ P → P | _ ⇒ P ] | xD ⇒ match e2 with [ xD ⇒ P → P | _ ⇒ P ]
-    | xE ⇒ match e2 with [ xE ⇒ P → P | _ ⇒ P ] | xF ⇒ match e2 with [ xF ⇒ P → P | _ ⇒ P ]]
-   | _ ⇒ P ]
-  | MODE_SRT t1 ⇒ match i2 with
-   [ MODE_SRT t2 ⇒ match t1 with
-    [ t00 ⇒ match t2 with [ t00 ⇒ P → P | _ ⇒ P ] | t01 ⇒ match t2 with [ t01 ⇒ P → P | _ ⇒ P ]
-    | t02 ⇒ match t2 with [ t02 ⇒ P → P | _ ⇒ P ] | t03 ⇒ match t2 with [ t03 ⇒ P → P | _ ⇒ P ]
-    | t04 ⇒ match t2 with [ t04 ⇒ P → P | _ ⇒ P ] | t05 ⇒ match t2 with [ t05 ⇒ P → P | _ ⇒ P ]
-    | t06 ⇒ match t2 with [ t06 ⇒ P → P | _ ⇒ P ] | t07 ⇒ match t2 with [ t07 ⇒ P → P | _ ⇒ P ]
-    | t08 ⇒ match t2 with [ t08 ⇒ P → P | _ ⇒ P ] | t09 ⇒ match t2 with [ t09 ⇒ P → P | _ ⇒ P ]
-    | t0A ⇒ match t2 with [ t0A ⇒ P → P | _ ⇒ P ] | t0B ⇒ match t2 with [ t0B ⇒ P → P | _ ⇒ P ]
-    | t0C ⇒ match t2 with [ t0C ⇒ P → P | _ ⇒ P ] | t0D ⇒ match t2 with [ t0D ⇒ P → P | _ ⇒ P ]
-    | t0E ⇒ match t2 with [ t0E ⇒ P → P | _ ⇒ P ] | t0F ⇒ match t2 with [ t0F ⇒ P → P | _ ⇒ P ]
-    | t10 ⇒ match t2 with [ t10 ⇒ P → P | _ ⇒ P ] | t11 ⇒ match t2 with [ t11 ⇒ P → P | _ ⇒ P ]
-    | t12 ⇒ match t2 with [ t12 ⇒ P → P | _ ⇒ P ] | t13 ⇒ match t2 with [ t13 ⇒ P → P | _ ⇒ P ]
-    | t14 ⇒ match t2 with [ t14 ⇒ P → P | _ ⇒ P ] | t15 ⇒ match t2 with [ t15 ⇒ P → P | _ ⇒ P ]
-    | t16 ⇒ match t2 with [ t16 ⇒ P → P | _ ⇒ P ] | t17 ⇒ match t2 with [ t17 ⇒ P → P | _ ⇒ P ]
-    | t18 ⇒ match t2 with [ t18 ⇒ P → P | _ ⇒ P ] | t19 ⇒ match t2 with [ t19 ⇒ P → P | _ ⇒ P ]
-    | t1A ⇒ match t2 with [ t1A ⇒ P → P | _ ⇒ P ] | t1B ⇒ match t2 with [ t1B ⇒ P → P | _ ⇒ P ]
-    | t1C ⇒ match t2 with [ t1C ⇒ P → P | _ ⇒ P ] | t1D ⇒ match t2 with [ t1D ⇒ P → P | _ ⇒ P ]
-    | t1E ⇒ match t2 with [ t1E ⇒ P → P | _ ⇒ P ] | t1F ⇒ match t2 with [ t1F ⇒ P → P | _ ⇒ P ]]
-    | _ ⇒ P ]
-  ].
-
-ndefinition instr_mode_destruct : instr_mode_destruct_aux.
- #t1; ncases t1;
- ##[ ##1: napply instr_mode_destruct1 ##| ##2: napply instr_mode_destruct2
- ##| ##3: napply instr_mode_destruct3 ##| ##4: napply instr_mode_destruct4
- ##| ##5: napply instr_mode_destruct5 ##| ##6: napply instr_mode_destruct6
- ##| ##7: napply instr_mode_destruct7 ##| ##8: napply instr_mode_destruct8
- ##| ##9: napply instr_mode_destruct9 ##| ##10: napply instr_mode_destruct10
- ##| ##11: napply instr_mode_destruct11 ##| ##12: napply instr_mode_destruct12
- ##| ##13: napply instr_mode_destruct13 ##| ##14: napply instr_mode_destruct14
- ##| ##15: napply instr_mode_destruct15 ##| ##16: napply instr_mode_destruct16
- ##| ##17: napply instr_mode_destruct17 ##| ##18: napply instr_mode_destruct18
- ##| ##19: napply instr_mode_destruct19 ##| ##20: napply instr_mode_destruct20
- ##| ##21: napply instr_mode_destruct21 ##| ##22: napply instr_mode_destruct22
- ##| ##23: napply instr_mode_destruct23 ##| ##24: napply instr_mode_destruct24
- ##| ##25: napply instr_mode_destruct25 ##| ##26: napply instr_mode_destruct26
- ##| ##27: napply instr_mode_destruct27 ##| ##28: napply instr_mode_destruct28
- ##| ##29: napply instr_mode_destruct29 ##| ##30: napply instr_mode_destruct30
- ##| ##31: napply instr_mode_destruct31 ##| ##32: napply instr_mode_destruct32
- ##| ##33: napply instr_mode_destruct33 ##| ##34: napply instr_mode_destruct34
+nlemma eqim_to_eq3 : ∀i2.eq_im MODE_INHX i2 = true → MODE_INHX = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##3: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq4 : ∀i2.eq_im MODE_INHH i2 = true → MODE_INHH = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##4: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq5 : ∀i2.eq_im MODE_INHX0ADD i2 = true → MODE_INHX0ADD = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##5: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq6 : ∀i2.eq_im MODE_INHX1ADD i2 = true → MODE_INHX1ADD = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##6: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq7 : ∀i2.eq_im MODE_INHX2ADD i2 = true → MODE_INHX2ADD = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##7: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq8 : ∀i2.eq_im MODE_IMM1 i2 = true → MODE_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##8: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq9 : ∀i2.eq_im MODE_IMM1EXT i2 = true → MODE_IMM1EXT = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##9: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq10 : ∀i2.eq_im MODE_IMM2 i2 = true → MODE_IMM2 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##10: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq11 : ∀i2.eq_im MODE_DIR1 i2 = true → MODE_DIR1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##11: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq12 : ∀i2.eq_im MODE_DIR2 i2 = true → MODE_DIR2 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##12: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq13 : ∀i2.eq_im MODE_IX0 i2 = true → MODE_IX0 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##13: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq14 : ∀i2.eq_im MODE_IX1 i2 = true → MODE_IX1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##14: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq15 : ∀i2.eq_im MODE_IX2 i2 = true → MODE_IX2 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##15: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq16 : ∀i2.eq_im MODE_SP1 i2 = true → MODE_SP1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##16: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq17 : ∀i2.eq_im MODE_SP2 i2 = true → MODE_SP2 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##17: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq18 : ∀i2.eq_im MODE_DIR1_to_DIR1 i2 = true → MODE_DIR1_to_DIR1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##18: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq19 : ∀i2.eq_im MODE_IMM1_to_DIR1 i2 = true → MODE_IMM1_to_DIR1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##19: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq20 : ∀i2.eq_im MODE_IX0p_to_DIR1 i2 = true → MODE_IX0p_to_DIR1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##20: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq21 : ∀i2.eq_im MODE_DIR1_to_IX0p i2 = true → MODE_DIR1_to_IX0p = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##21: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq22 : ∀i2.eq_im MODE_INHA_and_IMM1 i2 = true → MODE_INHA_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##22: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq23 : ∀i2.eq_im MODE_INHX_and_IMM1 i2 = true → MODE_INHX_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##23: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq24 : ∀i2.eq_im MODE_IMM1_and_IMM1 i2 = true → MODE_IMM1_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##24: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq25 : ∀i2.eq_im MODE_DIR1_and_IMM1 i2 = true → MODE_DIR1_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##25: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq26 : ∀i2.eq_im MODE_IX0_and_IMM1 i2 = true → MODE_IX0_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##26: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq27 : ∀i2.eq_im MODE_IX0p_and_IMM1 i2 = true → MODE_IX0p_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##27: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq28 : ∀i2.eq_im MODE_IX1_and_IMM1 i2 = true → MODE_IX1_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##28: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq29 : ∀i2.eq_im MODE_IX1p_and_IMM1 i2 = true → MODE_IX1p_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##29: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq30 : ∀i2.eq_im MODE_SP1_and_IMM1 i2 = true → MODE_SP1_and_IMM1 = i2.
+ #i2; ncases i2; nnormalize;
+ ##[ ##30: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
+ ##| ##*: #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq31 : ∀n1,i2.eq_im (MODE_DIRn n1) i2 = true → MODE_DIRn n1 = i2.
+ #n1; #i2; ncases i2;
+ ##[ ##31: #n2; #H;
+     nchange in H:(%) with (eq_oct n1 n2 = true);
+     nrewrite > (eqoct_to_eq … H);
+     napply refl_eq
+ ##| ##32,33,34: nnormalize; #n2; #H; napply (bool_destruct … H)
+ ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq32 : ∀n1,i2.eq_im (MODE_DIRn_and_IMM1 n1) i2 = true → MODE_DIRn_and_IMM1 n1 = i2.
+ #n1; #i2; ncases i2;
+ ##[ ##32: #n2; #H;
+     nchange in H:(%) with (eq_oct n1 n2 = true);
+     nrewrite > (eqoct_to_eq … H);
+     napply refl_eq
+ ##| ##31,33,34: nnormalize; #n2; #H; napply (bool_destruct … H)
+ ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq33 : ∀n1,i2.eq_im (MODE_TNY n1) i2 = true → MODE_TNY n1 = i2.
+ #n1; #i2; ncases i2;
+ ##[ ##33: #n2; #H;
+     nchange in H:(%) with (eq_ex n1 n2 = true);
+     nrewrite > (eqex_to_eq … H);
+     napply refl_eq
+ ##| ##31,32,34: nnormalize; #n2; #H; napply (bool_destruct … H)
+ ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq34 : ∀n1,i2.eq_im (MODE_SRT n1) i2 = true → MODE_SRT n1 = i2.
+ #n1; #i2; ncases i2;
+ ##[ ##34: #n2; #H;
+     nchange in H:(%) with (eq_bit n1 n2 = true);
+     nrewrite > (eqbit_to_eq … H);
+     napply refl_eq
+ ##| ##31,32,33: nnormalize; #n2; #H; napply (bool_destruct … H)
+ ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+ ##]
+nqed.
+
+nlemma eqim_to_eq : ∀i1,i2.eq_im i1 i2 = true → i1 = i2.
+ #i1; ncases i1;
+ ##[ ##1: napply eqim_to_eq1 ##| ##2: napply eqim_to_eq2
+ ##| ##3: napply eqim_to_eq3 ##| ##4: napply eqim_to_eq4
+ ##| ##5: napply eqim_to_eq5 ##| ##6: napply eqim_to_eq6
+ ##| ##7: napply eqim_to_eq7 ##| ##8: napply eqim_to_eq8
+ ##| ##9: napply eqim_to_eq9 ##| ##10: napply eqim_to_eq10
+ ##| ##11: napply eqim_to_eq11 ##| ##12: napply eqim_to_eq12
+ ##| ##13: napply eqim_to_eq13 ##| ##14: napply eqim_to_eq14
+ ##| ##15: napply eqim_to_eq15 ##| ##16: napply eqim_to_eq16
+ ##| ##17: napply eqim_to_eq17 ##| ##18: napply eqim_to_eq18
+ ##| ##19: napply eqim_to_eq19 ##| ##20: napply eqim_to_eq20
+ ##| ##21: napply eqim_to_eq21 ##| ##22: napply eqim_to_eq22
+ ##| ##23: napply eqim_to_eq23 ##| ##24: napply eqim_to_eq24
+ ##| ##25: napply eqim_to_eq25 ##| ##26: napply eqim_to_eq26
+ ##| ##27: napply eqim_to_eq27 ##| ##28: napply eqim_to_eq28
+ ##| ##29: napply eqim_to_eq29 ##| ##30: napply eqim_to_eq30
+ ##| ##31: napply eqim_to_eq31 ##| ##32: napply eqim_to_eq32
+ ##| ##33: napply eqim_to_eq33 ##| ##34: napply eqim_to_eq34
+ ##]
+nqed.
+
+nlemma eq_to_eqim1 : ∀i2.MODE_INH = i2 → eq_im MODE_INH i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##1: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim2 : ∀i2.MODE_INHA = i2 → eq_im MODE_INHA i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##2: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim3 : ∀i2.MODE_INHX = i2 → eq_im MODE_INHX i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##3: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim4 : ∀i2.MODE_INHH = i2 → eq_im MODE_INHH i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##4: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim5 : ∀i2.MODE_INHX0ADD = i2 → eq_im MODE_INHX0ADD i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##5: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim6 : ∀i2.MODE_INHX1ADD = i2 → eq_im MODE_INHX1ADD i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##6: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim7 : ∀i2.MODE_INHX2ADD = i2 → eq_im MODE_INHX2ADD i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##7: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim8 : ∀i2.MODE_IMM1 = i2 → eq_im MODE_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##8: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim9 : ∀i2.MODE_IMM1EXT = i2 → eq_im MODE_IMM1EXT i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##9: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim10 : ∀i2.MODE_IMM2 = i2 → eq_im MODE_IMM2 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##10: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim11 : ∀i2.MODE_DIR1 = i2 → eq_im MODE_DIR1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##11: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim12 : ∀i2.MODE_DIR2 = i2 → eq_im MODE_DIR2 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##12: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim13 : ∀i2.MODE_IX0 = i2 → eq_im MODE_IX0 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##13: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim14 : ∀i2.MODE_IX1 = i2 → eq_im MODE_IX1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##14: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim15 : ∀i2.MODE_IX2 = i2 → eq_im MODE_IX2 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##15: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim16 : ∀i2.MODE_SP1 = i2 → eq_im MODE_SP1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##16: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim17 : ∀i2.MODE_SP2 = i2 → eq_im MODE_SP2 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##17: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim18 : ∀i2.MODE_DIR1_to_DIR1 = i2 → eq_im MODE_DIR1_to_DIR1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##18: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim19 : ∀i2.MODE_IMM1_to_DIR1 = i2 → eq_im MODE_IMM1_to_DIR1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##19: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim20 : ∀i2.MODE_IX0p_to_DIR1 = i2 → eq_im MODE_IX0p_to_DIR1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##20: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim21 : ∀i2.MODE_DIR1_to_IX0p = i2 → eq_im MODE_DIR1_to_IX0p i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##21: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim22 : ∀i2.MODE_INHA_and_IMM1 = i2 → eq_im MODE_INHA_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##22: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim23 : ∀i2.MODE_INHX_and_IMM1 = i2 → eq_im MODE_INHX_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##23: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim24 : ∀i2.MODE_IMM1_and_IMM1 = i2 → eq_im MODE_IMM1_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##24: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim25 : ∀i2.MODE_DIR1_and_IMM1 = i2 → eq_im MODE_DIR1_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##25: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim26 : ∀i2.MODE_IX0_and_IMM1 = i2 → eq_im MODE_IX0_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##26: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim27 : ∀i2.MODE_IX0p_and_IMM1 = i2 → eq_im MODE_IX0p_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##27: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim28 : ∀i2.MODE_IX1_and_IMM1 = i2 → eq_im MODE_IX1_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##28: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim29 : ∀i2.MODE_IX1p_and_IMM1 = i2 → eq_im MODE_IX1p_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##29: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim30 : ∀i2.MODE_SP1_and_IMM1 = i2 → eq_im MODE_SP1_and_IMM1 i2 = true.
+ #t2; ncases t2; nnormalize;
+ ##[ ##30: #H; napply refl_eq
+ ##| ##31,32,33,34: #n; #H; napply (instrmode_destruct … H)
+ ##| ##*: #H; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim31 : ∀n1,i2.MODE_DIRn n1 = i2 → eq_im (MODE_DIRn n1) i2 = true.
+ #n1; #t2; ncases t2;
+ ##[ ##31: #n2; #H;
+     nchange with (eq_oct n1 n2 = true);
+     nrewrite > (instrmode_destruct_MODE_DIRn n1 n2 H);
+     nrewrite > (eq_to_eqoct n2 n2 (refl_eq …));
+     napply refl_eq
+ ##| ##32,33,34: #n; #H; nnormalize; napply (instrmode_destruct … H)
+ ##| ##*: #H; nnormalize; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim32 : ∀n1,i2.MODE_DIRn_and_IMM1 n1 = i2 → eq_im (MODE_DIRn_and_IMM1 n1) i2 = true.
+ #n1; #t2; ncases t2;
+ ##[ ##32: #n2; #H;
+     nchange with (eq_oct n1 n2 = true);
+     nrewrite > (instrmode_destruct_MODE_DIRn_and_IMM1 … H);
+     nrewrite > (eq_to_eqoct n2 n2 (refl_eq …));
+     napply refl_eq
+ ##| ##31,33,34: #n; #H; nnormalize; napply (instrmode_destruct … H)
+ ##| ##*: #H; nnormalize; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim33 : ∀n1,i2.MODE_TNY n1 = i2 → eq_im (MODE_TNY n1) i2 = true.
+ #n1; #t2; ncases t2;
+ ##[ ##33: #n2; #H;
+     nchange with (eq_ex n1 n2 = true);
+     nrewrite > (instrmode_destruct_MODE_TNY … H);
+     nrewrite > (eq_to_eqex n2 n2 (refl_eq …));
+     napply refl_eq
+ ##| ##31,32,34: #n; #H; nnormalize; napply (instrmode_destruct … H)
+ ##| ##*: #H; nnormalize; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim34 : ∀n1,i2.MODE_SRT n1 = i2 → eq_im (MODE_SRT n1) i2 = true.
+ #n1; #t2; ncases t2;
+ ##[ ##34: #n2; #H;
+     nchange with (eq_bit n1 n2 = true);
+     nrewrite > (instrmode_destruct_MODE_SRT … H);
+     nrewrite > (eq_to_eqbit n2 n2 (refl_eq …));
+     napply refl_eq
+ ##| ##31,32,33: #n; #H; nnormalize; napply (instrmode_destruct … H)
+ ##| ##*: #H; nnormalize; napply (instrmode_destruct … H)
+ ##]
+nqed.
+
+nlemma eq_to_eqim : ∀i1,i2.i1 = i2 → eq_im i1 i2 = true.
+ #i1; ncases i1;
+ ##[ ##1: napply eq_to_eqim1 ##| ##2: napply eq_to_eqim2
+ ##| ##3: napply eq_to_eqim3 ##| ##4: napply eq_to_eqim4
+ ##| ##5: napply eq_to_eqim5 ##| ##6: napply eq_to_eqim6
+ ##| ##7: napply eq_to_eqim7 ##| ##8: napply eq_to_eqim8
+ ##| ##9: napply eq_to_eqim9 ##| ##10: napply eq_to_eqim10 
+ ##| ##11: napply eq_to_eqim11 ##| ##12: napply eq_to_eqim12
+ ##| ##13: napply eq_to_eqim13 ##| ##14: napply eq_to_eqim14
+ ##| ##15: napply eq_to_eqim15 ##| ##16: napply eq_to_eqim16
+ ##| ##17: napply eq_to_eqim17 ##| ##18: napply eq_to_eqim18
+ ##| ##19: napply eq_to_eqim19 ##| ##20: napply eq_to_eqim20
+ ##| ##21: napply eq_to_eqim21 ##| ##22: napply eq_to_eqim22
+ ##| ##23: napply eq_to_eqim23 ##| ##24: napply eq_to_eqim24
+ ##| ##25: napply eq_to_eqim25 ##| ##26: napply eq_to_eqim26
+ ##| ##27: napply eq_to_eqim27 ##| ##28: napply eq_to_eqim28
+ ##| ##29: napply eq_to_eqim29 ##| ##30: napply eq_to_eqim30
+ ##| ##31: napply eq_to_eqim31 ##| ##32: napply eq_to_eqim32
+ ##| ##33: napply eq_to_eqim33 ##| ##34: napply eq_to_eqim34
  ##]
 nqed.
index 9992a4c5e2c6967c81060139b4d0dd35074c6673..ca759ad8e04d132ef1eadfae3bc9843e5f8fde59 100755 (executable)
@@ -26,682 +26,870 @@ include "freescale/opcode_base_lemmas_instrmode1.ma".
 (* MATTONI BASE PER DEFINIRE LE TABELLE DELLE MCU *)
 (* ********************************************** *)
 
-nlemma symmetric_eqim : symmetricT instr_mode bool eq_im.
- #i1; #i2;
- ncases i1;
- ##[ ##1: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##2: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##3: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##4: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##5: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##6: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##7: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##8: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##9: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##10: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##11: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##12: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##13: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##14: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##15: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##16: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##17: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##18: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##19: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##20: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##21: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##22: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##23: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##24: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##25: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##26: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##27: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##28: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##29: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##30: ncases i2; nnormalize; ##[ ##31,32,33,34: #n ##] napply refl_eq
- ##| ##31: ncases i2; #n1;
-     ##[ ##31: #n2;
-               nchange with (eq_oct n2 n1 = eq_oct n1 n2);
-               nrewrite > (symmetric_eqoct n1 n2);
-     ##| ##32,33,34: #n2; nnormalize 
-     ##]
-     nnormalize; napply refl_eq
- ##| ##32: ncases i2; #n1;
-     ##[ ##32: #n2;
-               nchange with (eq_oct n2 n1 = eq_oct n1 n2);
-               nrewrite > (symmetric_eqoct n1 n2);
-     ##| ##31,33,34: #n2; nnormalize 
-     ##]
-     nnormalize; napply refl_eq
- ##| ##33: ncases i2; #n1;
-     ##[ ##33: #n2;
-               nchange with (eq_ex n2 n1 = eq_ex n1 n2);
-               nrewrite > (symmetric_eqex n1 n2);
-     ##| ##31,32,34: #n2; nnormalize 
-     ##]
-     nnormalize; napply refl_eq
- ##| ##34: ncases i2; #n1;
-     ##[ ##34: #n2;
-               nchange with (eq_bit n2 n1 = eq_bit n1 n2);
-               nrewrite > (symmetric_eqbit n1 n2);
-     ##| ##31,32,33: #n2; nnormalize 
-     ##]
-     nnormalize; napply refl_eq
- ##]
-nqed.
-
-nlemma eqim_to_eq1 : ∀i2.eq_im MODE_INH i2 = true → MODE_INH = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##1: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma decidable_im1 : ∀x:instr_mode.decidable (MODE_INH = x).
+ #x; nnormalize; nelim x;
+ ##[ ##1: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im2 : ∀x:instr_mode.decidable (MODE_INHA = x).
+ #x; nnormalize; nelim x;
+ ##[ ##2: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im3 : ∀x:instr_mode.decidable (MODE_INHX = x).
+ #x; nnormalize; nelim x;
+ ##[ ##3: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im4 : ∀x:instr_mode.decidable (MODE_INHH = x).
+ #x; nnormalize; nelim x;
+ ##[ ##4: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im5 : ∀x:instr_mode.decidable (MODE_INHX0ADD = x).
+ #x; nnormalize; nelim x;
+ ##[ ##5: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im6 : ∀x:instr_mode.decidable (MODE_INHX1ADD = x).
+ #x; nnormalize; nelim x;
+ ##[ ##6: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im7 : ∀x:instr_mode.decidable (MODE_INHX2ADD = x).
+ #x; nnormalize; nelim x;
+ ##[ ##7: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im8 : ∀x:instr_mode.decidable (MODE_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##8: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im9 : ∀x:instr_mode.decidable (MODE_IMM1EXT = x).
+ #x; nnormalize; nelim x;
+ ##[ ##9: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im10 : ∀x:instr_mode.decidable (MODE_IMM2 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##10: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im11 : ∀x:instr_mode.decidable (MODE_DIR1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##11: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im12 : ∀x:instr_mode.decidable (MODE_DIR2 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##12: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im13 : ∀x:instr_mode.decidable (MODE_IX0 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##13: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im14 : ∀x:instr_mode.decidable (MODE_IX1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##14: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im15 : ∀x:instr_mode.decidable (MODE_IX2 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##15: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im16 : ∀x:instr_mode.decidable (MODE_SP1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##16: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im17 : ∀x:instr_mode.decidable (MODE_SP2 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##17: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im18 : ∀x:instr_mode.decidable (MODE_DIR1_to_DIR1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##18: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im19 : ∀x:instr_mode.decidable (MODE_IMM1_to_DIR1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##19: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im20 : ∀x:instr_mode.decidable (MODE_IX0p_to_DIR1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##20: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im21 : ∀x:instr_mode.decidable (MODE_DIR1_to_IX0p = x).
+ #x; nnormalize; nelim x;
+ ##[ ##21: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im22 : ∀x:instr_mode.decidable (MODE_INHA_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##22: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im23 : ∀x:instr_mode.decidable (MODE_INHX_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##23: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im24 : ∀x:instr_mode.decidable (MODE_IMM1_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##24: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im25 : ∀x:instr_mode.decidable (MODE_DIR1_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##25: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im26 : ∀x:instr_mode.decidable (MODE_IX0_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##26: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im27 : ∀x:instr_mode.decidable (MODE_IX0p_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##27: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im28 : ∀x:instr_mode.decidable (MODE_IX1_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##28: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im29 : ∀x:instr_mode.decidable (MODE_IX1p_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##29: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im30 : ∀x:instr_mode.decidable (MODE_SP1_and_IMM1 = x).
+ #x; nnormalize; nelim x;
+ ##[ ##30: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im31 : ∀n.∀x:instr_mode.decidable ((MODE_DIRn n) = x).
+ #n1; #x; nnormalize; nelim x;
+ ##[ ##31: #n2; napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_oct n1 n2) …);
+           ##[ ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+           ##| ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) ?); #H1; napply (H (instrmode_destruct_MODE_DIRn … H1))
+           ##] 
+ ##| ##32,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im32 : ∀n.∀x:instr_mode.decidable ((MODE_DIRn_and_IMM1 n) = x).
+ #n1; #x; nnormalize; nelim x;
+ ##[ ##32: #n2; napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_oct n1 n2) …);
+           ##[ ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+           ##| ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) ?); #H1; napply (H (instrmode_destruct_MODE_DIRn_and_IMM1 … H1))
+           ##] 
+ ##| ##31,33,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im33 : ∀n.∀x:instr_mode.decidable ((MODE_TNY n) = x).
+ #n1; #x; nnormalize; nelim x;
+ ##[ ##33: #n2; napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_ex n1 n2) …);
+           ##[ ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+           ##| ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) ?); #H1; napply (H (instrmode_destruct_MODE_TNY … H1))
+           ##] 
+ ##| ##31,32,34: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im34 : ∀n.∀x:instr_mode.decidable ((MODE_SRT n) = x).
+ #n1; #x; nnormalize; nelim x;
+ ##[ ##34: #n2; napply (or2_elim (? = ?) (? ≠ ?) ? (decidable_bit n1 n2) …);
+           ##[ ##1: #H; nrewrite > H; napply (or2_intro1 (? = ?) (? ≠ ?) (refl_eq …))
+           ##| ##2: #H; napply (or2_intro2 (? = ?) (? ≠ ?) ?); #H1; napply (H (instrmode_destruct_MODE_SRT … H1))
+           ##] 
+ ##| ##31,32,33: #n; ##]
+ ##[ ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (instrmode_destruct … H) ##]
+nqed.
+
+nlemma decidable_im : ∀x,y:instr_mode.decidable (x = y).
+ #x; nelim x;
+ ##[ ##1: napply decidable_im1 ##| ##2: napply decidable_im2
+ ##| ##3: napply decidable_im3 ##| ##4: napply decidable_im4
+ ##| ##5: napply decidable_im5 ##| ##6: napply decidable_im6
+ ##| ##7: napply decidable_im7 ##| ##8: napply decidable_im8
+ ##| ##9: napply decidable_im9 ##| ##10: napply decidable_im10
+ ##| ##11: napply decidable_im11 ##| ##12: napply decidable_im12
+ ##| ##13: napply decidable_im13 ##| ##14: napply decidable_im14
+ ##| ##15: napply decidable_im15 ##| ##16: napply decidable_im16
+ ##| ##17: napply decidable_im17 ##| ##18: napply decidable_im18
+ ##| ##19: napply decidable_im19 ##| ##20: napply decidable_im20
+ ##| ##21: napply decidable_im21 ##| ##22: napply decidable_im22
+ ##| ##23: napply decidable_im23 ##| ##24: napply decidable_im24
+ ##| ##25: napply decidable_im25 ##| ##26: napply decidable_im26
+ ##| ##27: napply decidable_im27 ##| ##28: napply decidable_im28
+ ##| ##29: napply decidable_im29 ##| ##30: napply decidable_im30
+ ##| ##31: napply decidable_im31 ##| ##32: napply decidable_im32
+ ##| ##33: napply decidable_im33 ##| ##34: napply decidable_im34
  ##]
 nqed.
-
-nlemma eqim_to_eq2 : ∀i2.eq_im MODE_INHA i2 = true → MODE_INHA = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##2: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+
+nlemma neqim_to_neq1 : ∀i2.(eq_im MODE_INH i2 = false) → (MODE_INH ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##1: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
+ ##]
+nqed.
+
+nlemma neqim_to_neq2 : ∀i2.(eq_im MODE_INHA i2 = false) → (MODE_INHA ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##2: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq3 : ∀i2.eq_im MODE_INHX i2 = true → MODE_INHX = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##3: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq3 : ∀i2.(eq_im MODE_INHX i2 = false) → (MODE_INHX ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##3: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq4 : ∀i2.eq_im MODE_INHH i2 = true → MODE_INHH = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##4: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq4 : ∀i2.(eq_im MODE_INHH i2 = false) → (MODE_INHH ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##4: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq5 : ∀i2.eq_im MODE_INHX0ADD i2 = true → MODE_INHX0ADD = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##5: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq5 : ∀i2.(eq_im MODE_INHX0ADD i2 = false) → (MODE_INHX0ADD ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##5: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq6 : ∀i2.eq_im MODE_INHX1ADD i2 = true → MODE_INHX1ADD = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##6: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq6 : ∀i2.(eq_im MODE_INHX1ADD i2 = false) → (MODE_INHX1ADD ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##6: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq7 : ∀i2.eq_im MODE_INHX2ADD i2 = true → MODE_INHX2ADD = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##7: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq7 : ∀i2.(eq_im MODE_INHX2ADD i2 = false) → (MODE_INHX2ADD ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##7: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq8 : ∀i2.eq_im MODE_IMM1 i2 = true → MODE_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##8: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq8 : ∀i2.(eq_im MODE_IMM1 i2 = false) → (MODE_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##8: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq9 : ∀i2.eq_im MODE_IMM1EXT i2 = true → MODE_IMM1EXT = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##9: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq9 : ∀i2.(eq_im MODE_IMM1EXT i2 = false) → (MODE_IMM1EXT ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##9: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq10 : ∀i2.eq_im MODE_IMM2 i2 = true → MODE_IMM2 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##10: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq10 : ∀i2.(eq_im MODE_IMM2 i2 = false) → (MODE_IMM2 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##10: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq11 : ∀i2.eq_im MODE_DIR1 i2 = true → MODE_DIR1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##11: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq11 : ∀i2.(eq_im MODE_DIR1 i2 = false) → (MODE_DIR1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##11: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq12 : ∀i2.eq_im MODE_DIR2 i2 = true → MODE_DIR2 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##12: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq12 : ∀i2.(eq_im MODE_DIR2 i2 = false) → (MODE_DIR2 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##12: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq13 : ∀i2.eq_im MODE_IX0 i2 = true → MODE_IX0 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##13: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq13 : ∀i2.(eq_im MODE_IX0 i2 = false) → (MODE_IX0 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##13: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq14 : ∀i2.eq_im MODE_IX1 i2 = true → MODE_IX1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##14: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq14 : ∀i2.(eq_im MODE_IX1 i2 = false) → (MODE_IX1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##14: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq15 : ∀i2.eq_im MODE_IX2 i2 = true → MODE_IX2 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##15: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq15 : ∀i2.(eq_im MODE_IX2 i2 = false) → (MODE_IX2 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##15: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq16 : ∀i2.eq_im MODE_SP1 i2 = true → MODE_SP1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##16: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq16 : ∀i2.(eq_im MODE_SP1 i2 = false) → (MODE_SP1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##16: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq17 : ∀i2.eq_im MODE_SP2 i2 = true → MODE_SP2 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##17: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq17 : ∀i2.(eq_im MODE_SP2 i2 = false) → (MODE_SP2 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##17: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq18 : ∀i2.eq_im MODE_DIR1_to_DIR1 i2 = true → MODE_DIR1_to_DIR1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##18: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq18 : ∀i2.(eq_im MODE_DIR1_to_DIR1 i2 = false) → (MODE_DIR1_to_DIR1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##18: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq19 : ∀i2.eq_im MODE_IMM1_to_DIR1 i2 = true → MODE_IMM1_to_DIR1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##19: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq19 : ∀i2.(eq_im MODE_IMM1_to_DIR1 i2 = false) → (MODE_IMM1_to_DIR1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##19: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq20 : ∀i2.eq_im MODE_IX0p_to_DIR1 i2 = true → MODE_IX0p_to_DIR1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##20: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq20 : ∀i2.(eq_im MODE_IX0p_to_DIR1 i2 = false) → (MODE_IX0p_to_DIR1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##20: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq21 : ∀i2.eq_im MODE_DIR1_to_IX0p i2 = true → MODE_DIR1_to_IX0p = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##21: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq21 : ∀i2.(eq_im MODE_DIR1_to_IX0p i2 = false) → (MODE_DIR1_to_IX0p ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##21: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq22 : ∀i2.eq_im MODE_INHA_and_IMM1 i2 = true → MODE_INHA_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##22: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq22 : ∀i2.(eq_im MODE_INHA_and_IMM1 i2 = false) → (MODE_INHA_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##22: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq23 : ∀i2.eq_im MODE_INHX_and_IMM1 i2 = true → MODE_INHX_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##23: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq23 : ∀i2.(eq_im MODE_INHX_and_IMM1 i2 = false) → (MODE_INHX_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##23: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq24 : ∀i2.eq_im MODE_IMM1_and_IMM1 i2 = true → MODE_IMM1_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##24: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq24 : ∀i2.(eq_im MODE_IMM1_and_IMM1 i2 = false) → (MODE_IMM1_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##24: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq25 : ∀i2.eq_im MODE_DIR1_and_IMM1 i2 = true → MODE_DIR1_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##25: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq25 : ∀i2.(eq_im MODE_DIR1_and_IMM1 i2 = false) → (MODE_DIR1_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##25: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq26 : ∀i2.eq_im MODE_IX0_and_IMM1 i2 = true → MODE_IX0_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##26: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq26 : ∀i2.(eq_im MODE_IX0_and_IMM1 i2 = false) → (MODE_IX0_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##26: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq27 : ∀i2.eq_im MODE_IX0p_and_IMM1 i2 = true → MODE_IX0p_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##27: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq27 : ∀i2.(eq_im MODE_IX0p_and_IMM1 i2 = false) → (MODE_IX0p_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##27: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq28 : ∀i2.eq_im MODE_IX1_and_IMM1 i2 = true → MODE_IX1_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##28: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq28 : ∀i2.(eq_im MODE_IX1_and_IMM1 i2 = false) → (MODE_IX1_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##28: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq29 : ∀i2.eq_im MODE_IX1p_and_IMM1 i2 = true → MODE_IX1p_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##29: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq29 : ∀i2.(eq_im MODE_IX1p_and_IMM1 i2 = false) → (MODE_IX1p_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##29: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq30 : ∀i2.eq_im MODE_SP1_and_IMM1 i2 = true → MODE_SP1_and_IMM1 = i2.
- #i2; ncases i2; nnormalize;
- ##[ ##30: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (bool_destruct … H)
- ##| ##*: #H; napply (bool_destruct … H)
+nlemma neqim_to_neq30 : ∀i2.(eq_im MODE_SP1_and_IMM1 i2 = false) → (MODE_SP1_and_IMM1 ≠ i2).
+ #i2; nelim i2; nnormalize;
+ ##[ ##30: #H; napply (bool_destruct … H)
+ ##| ##31,32,33,34: #n ##]
+ ##[ ##*: #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq31 : ∀n1,i2.eq_im (MODE_DIRn n1) i2 = true → MODE_DIRn n1 = i2.
- #n1; #i2; ncases i2;
- ##[ ##31: #n2; #H;
-     nchange in H:(%) with (eq_oct n1 n2 = true);
-     nrewrite > (eqoct_to_eq … H);
-     napply refl_eq
- ##| ##32,33,34: nnormalize; #n2; #H; napply (bool_destruct … H)
- ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+nlemma neqim_to_neq31 : ∀n.∀i2.(eq_im (MODE_DIRn n) i2 = false) → ((MODE_DIRn n) ≠ i2).
+ #n1; #i2; nelim i2;
+ ##[ ##31: #n2; #H; nchange in H:(%) with (eq_oct n1 n2 = false);
+           nnormalize; #H1; napply (neqoct_to_neq … H); napply (instrmode_destruct_MODE_DIRn … H1)
+ ##| ##32,33,34: #n ##]
+ ##[ ##*: nnormalize; #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq32 : ∀n1,i2.eq_im (MODE_DIRn_and_IMM1 n1) i2 = true → MODE_DIRn_and_IMM1 n1 = i2.
- #n1; #i2; ncases i2;
- ##[ ##32: #n2; #H;
-     nchange in H:(%) with (eq_oct n1 n2 = true);
-     nrewrite > (eqoct_to_eq … H);
-     napply refl_eq
- ##| ##31,33,34: nnormalize; #n2; #H; napply (bool_destruct … H)
- ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+nlemma neqim_to_neq32 : ∀n.∀i2.(eq_im (MODE_DIRn_and_IMM1 n) i2 = false) → ((MODE_DIRn_and_IMM1 n) ≠ i2).
+ #n1; #i2; nelim i2;
+ ##[ ##32: #n2; #H; nchange in H:(%) with (eq_oct n1 n2 = false);
+           nnormalize; #H1; napply (neqoct_to_neq … H); napply (instrmode_destruct_MODE_DIRn_and_IMM1 … H1)
+ ##| ##31,33,34: #n ##]
+ ##[ ##*: nnormalize; #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq33 : ∀n1,i2.eq_im (MODE_TNY n1) i2 = true → MODE_TNY n1 = i2.
- #n1; #i2; ncases i2;
- ##[ ##33: #n2; #H;
-     nchange in H:(%) with (eq_ex n1 n2 = true);
-     nrewrite > (eqex_to_eq … H);
-     napply refl_eq
- ##| ##31,32,34: nnormalize; #n2; #H; napply (bool_destruct … H)
- ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+nlemma neqim_to_neq33 : ∀n.∀i2.(eq_im (MODE_TNY n) i2 = false) → ((MODE_TNY n) ≠ i2).
+ #n1; #i2; nelim i2;
+ ##[ ##33: #n2; #H; nchange in H:(%) with (eq_ex n1 n2 = false);
+           nnormalize; #H1; napply (neqex_to_neq … H); napply (instrmode_destruct_MODE_TNY … H1)
+ ##| ##31,32,34: #n ##]
+ ##[ ##*: nnormalize; #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq34 : ∀n1,i2.eq_im (MODE_SRT n1) i2 = true → MODE_SRT n1 = i2.
- #n1; #i2; ncases i2;
- ##[ ##34: #n2; #H;
-     nchange in H:(%) with (eq_bit n1 n2 = true);
-     nrewrite > (eqbit_to_eq … H);
-     napply refl_eq
- ##| ##31,32,33: nnormalize; #n2; #H; napply (bool_destruct … H)
- ##| ##*: nnormalize; #H; napply (bool_destruct … H)
+nlemma neqim_to_neq34 : ∀n.∀i2.(eq_im (MODE_SRT n) i2 = false) → ((MODE_SRT n) ≠ i2).
+ #n1; #i2; nelim i2;
+ ##[ ##34: #n2; #H; nchange in H:(%) with (eq_bit n1 n2 = false);
+           nnormalize; #H1; napply (neqbit_to_neq … H); napply (instrmode_destruct_MODE_SRT … H1)
+ ##| ##31,32,33: #n ##]
+ ##[ ##*: nnormalize; #H; #H1; napply (instrmode_destruct … H1)
  ##]
 nqed.
 
-nlemma eqim_to_eq : ∀i1,i2.eq_im i1 i2 = true → i1 = i2.
- #i1; ncases i1;
- ##[ ##1: napply eqim_to_eq1 ##| ##2: napply eqim_to_eq2
- ##| ##3: napply eqim_to_eq3 ##| ##4: napply eqim_to_eq4
- ##| ##5: napply eqim_to_eq5 ##| ##6: napply eqim_to_eq6
- ##| ##7: napply eqim_to_eq7 ##| ##8: napply eqim_to_eq8
- ##| ##9: napply eqim_to_eq9 ##| ##10: napply eqim_to_eq10
- ##| ##11: napply eqim_to_eq11 ##| ##12: napply eqim_to_eq12
- ##| ##13: napply eqim_to_eq13 ##| ##14: napply eqim_to_eq14
- ##| ##15: napply eqim_to_eq15 ##| ##16: napply eqim_to_eq16
- ##| ##17: napply eqim_to_eq17 ##| ##18: napply eqim_to_eq18
- ##| ##19: napply eqim_to_eq19 ##| ##20: napply eqim_to_eq20
- ##| ##21: napply eqim_to_eq21 ##| ##22: napply eqim_to_eq22
- ##| ##23: napply eqim_to_eq23 ##| ##24: napply eqim_to_eq24
- ##| ##25: napply eqim_to_eq25 ##| ##26: napply eqim_to_eq26
- ##| ##27: napply eqim_to_eq27 ##| ##28: napply eqim_to_eq28
- ##| ##29: napply eqim_to_eq29 ##| ##30: napply eqim_to_eq30
- ##| ##31: napply eqim_to_eq31 ##| ##32: napply eqim_to_eq32
- ##| ##33: napply eqim_to_eq33 ##| ##34: napply eqim_to_eq34
+nlemma neqim_to_neq : ∀i1,i2.(eq_im i1 i2 = false) → (i1 ≠ i2).
+ #i1; nelim i1;
+ ##[ ##1: napply neqim_to_neq1 ##| ##2: napply neqim_to_neq2
+ ##| ##3: napply neqim_to_neq3 ##| ##4: napply neqim_to_neq4
+ ##| ##5: napply neqim_to_neq5 ##| ##6: napply neqim_to_neq6
+ ##| ##7: napply neqim_to_neq7 ##| ##8: napply neqim_to_neq8
+ ##| ##9: napply neqim_to_neq9 ##| ##10: napply neqim_to_neq10
+ ##| ##11: napply neqim_to_neq11 ##| ##12: napply neqim_to_neq12
+ ##| ##13: napply neqim_to_neq13 ##| ##14: napply neqim_to_neq14
+ ##| ##15: napply neqim_to_neq15 ##| ##16: napply neqim_to_neq16
+ ##| ##17: napply neqim_to_neq17 ##| ##18: napply neqim_to_neq18
+ ##| ##19: napply neqim_to_neq19 ##| ##20: napply neqim_to_neq20
+ ##| ##21: napply neqim_to_neq21 ##| ##22: napply neqim_to_neq22
+ ##| ##23: napply neqim_to_neq23 ##| ##24: napply neqim_to_neq24
+ ##| ##25: napply neqim_to_neq25 ##| ##26: napply neqim_to_neq26
+ ##| ##27: napply neqim_to_neq27 ##| ##28: napply neqim_to_neq28
+ ##| ##29: napply neqim_to_neq29 ##| ##30: napply neqim_to_neq30
+ ##| ##31: napply neqim_to_neq31 ##| ##32: napply neqim_to_neq32
+ ##| ##33: napply neqim_to_neq33 ##| ##34: napply neqim_to_neq34
  ##]
 nqed.
 
-nlemma eq_to_eqim1 : ∀i2.MODE_INH = i2 → eq_im MODE_INH i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##1: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim1 : ∀i2.MODE_INH ≠ i2 → eq_im MODE_INH i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##1: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim2 : ∀i2.MODE_INHA = i2 → eq_im MODE_INHA i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##2: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim2 : ∀i2.MODE_INHA ≠ i2 → eq_im MODE_INHA i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##2: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim3 : ∀i2.MODE_INHX = i2 → eq_im MODE_INHX i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##3: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim3 : ∀i2.MODE_INHX ≠ i2 → eq_im MODE_INHX i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##3: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim4 : ∀i2.MODE_INHH = i2 → eq_im MODE_INHH i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##4: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim4 : ∀i2.MODE_INHH ≠ i2 → eq_im MODE_INHH i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##4: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim5 : ∀i2.MODE_INHX0ADD = i2 → eq_im MODE_INHX0ADD i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##5: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim5 : ∀i2.MODE_INHX0ADD ≠ i2 → eq_im MODE_INHX0ADD i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##5: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim6 : ∀i2.MODE_INHX1ADD = i2 → eq_im MODE_INHX1ADD i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##6: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim6 : ∀i2.MODE_INHX1ADD ≠ i2 → eq_im MODE_INHX1ADD i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##6: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim7 : ∀i2.MODE_INHX2ADD = i2 → eq_im MODE_INHX2ADD i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##7: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim7 : ∀i2.MODE_INHX2ADD ≠ i2 → eq_im MODE_INHX2ADD i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##7: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim8 : ∀i2.MODE_IMM1 = i2 → eq_im MODE_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##8: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim8 : ∀i2.MODE_IMM1 ≠ i2 → eq_im MODE_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##8: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim9 : ∀i2.MODE_IMM1EXT = i2 → eq_im MODE_IMM1EXT i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##9: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim9 : ∀i2.MODE_IMM1EXT ≠ i2 → eq_im MODE_IMM1EXT i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##9: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim10 : ∀i2.MODE_IMM2 = i2 → eq_im MODE_IMM2 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##10: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim10 : ∀i2.MODE_IMM2 ≠ i2 → eq_im MODE_IMM2 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##10: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim11 : ∀i2.MODE_DIR1 = i2 → eq_im MODE_DIR1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##11: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim11 : ∀i2.MODE_DIR1 ≠ i2 → eq_im MODE_DIR1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##11: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim12 : ∀i2.MODE_DIR2 = i2 → eq_im MODE_DIR2 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##12: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim12 : ∀i2.MODE_DIR2 ≠ i2 → eq_im MODE_DIR2 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##12: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim13 : ∀i2.MODE_IX0 = i2 → eq_im MODE_IX0 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##13: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim13 : ∀i2.MODE_IX0 ≠ i2 → eq_im MODE_IX0 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##13: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim14 : ∀i2.MODE_IX1 = i2 → eq_im MODE_IX1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##14: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim14 : ∀i2.MODE_IX1 ≠ i2 → eq_im MODE_IX1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##14: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim15 : ∀i2.MODE_IX2 = i2 → eq_im MODE_IX2 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##15: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim15 : ∀i2.MODE_IX2 ≠ i2 → eq_im MODE_IX2 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##15: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim16 : ∀i2.MODE_SP1 = i2 → eq_im MODE_SP1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##16: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim16 : ∀i2.MODE_SP1 ≠ i2 → eq_im MODE_SP1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##16: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim17 : ∀i2.MODE_SP2 = i2 → eq_im MODE_SP2 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##17: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim17 : ∀i2.MODE_SP2 ≠ i2 → eq_im MODE_SP2 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##17: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim18 : ∀i2.MODE_DIR1_to_DIR1 = i2 → eq_im MODE_DIR1_to_DIR1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##18: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim18 : ∀i2.MODE_DIR1_to_DIR1 ≠ i2 → eq_im MODE_DIR1_to_DIR1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##18: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim19 : ∀i2.MODE_IMM1_to_DIR1 = i2 → eq_im MODE_IMM1_to_DIR1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##19: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim19 : ∀i2.MODE_IMM1_to_DIR1 ≠ i2 → eq_im MODE_IMM1_to_DIR1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##19: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim20 : ∀i2.MODE_IX0p_to_DIR1 = i2 → eq_im MODE_IX0p_to_DIR1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##20: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim20 : ∀i2.MODE_IX0p_to_DIR1 ≠ i2 → eq_im MODE_IX0p_to_DIR1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##20: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim21 : ∀i2.MODE_DIR1_to_IX0p = i2 → eq_im MODE_DIR1_to_IX0p i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##21: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim21 : ∀i2.MODE_DIR1_to_IX0p ≠ i2 → eq_im MODE_DIR1_to_IX0p i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##21: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim22 : ∀i2.MODE_INHA_and_IMM1 = i2 → eq_im MODE_INHA_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##22: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim22 : ∀i2.MODE_INHA_and_IMM1≠ i2 → eq_im MODE_INHA_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##22: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim23 : ∀i2.MODE_INHX_and_IMM1 = i2 → eq_im MODE_INHX_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##23: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim23 : ∀i2.MODE_INHX_and_IMM1 ≠ i2 → eq_im MODE_INHX_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##23: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim24 : ∀i2.MODE_IMM1_and_IMM1 = i2 → eq_im MODE_IMM1_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##24: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim24 : ∀i2.MODE_IMM1_and_IMM1 ≠ i2 → eq_im MODE_IMM1_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##24: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim25 : ∀i2.MODE_DIR1_and_IMM1 = i2 → eq_im MODE_DIR1_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##25: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim25 : ∀i2.MODE_DIR1_and_IMM1 ≠ i2 → eq_im MODE_DIR1_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##25: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim26 : ∀i2.MODE_IX0_and_IMM1 = i2 → eq_im MODE_IX0_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##26: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim26 : ∀i2.MODE_IX0_and_IMM1 ≠ i2 → eq_im MODE_IX0_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##26: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim27 : ∀i2.MODE_IX0p_and_IMM1 = i2 → eq_im MODE_IX0p_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##27: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim27 : ∀i2.MODE_IX0p_and_IMM1 ≠ i2 → eq_im MODE_IX0p_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##27: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim28 : ∀i2.MODE_IX1_and_IMM1 = i2 → eq_im MODE_IX1_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##28: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim28 : ∀i2.MODE_IX1_and_IMM1 ≠ i2 → eq_im MODE_IX1_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##28: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim29 : ∀i2.MODE_IX1p_and_IMM1 = i2 → eq_im MODE_IX1p_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##29: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim29 : ∀i2.MODE_IX1p_and_IMM1 ≠ i2 → eq_im MODE_IX1p_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##29: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim30 : ∀i2.MODE_SP1_and_IMM1 = i2 → eq_im MODE_SP1_and_IMM1 i2 = true.
- #t2; ncases t2; nnormalize;
- ##[ ##30: #H; napply refl_eq
- ##| ##31,32,33,34: #n; #H; napply (instr_mode_destruct … H)
- ##| ##*: #H; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim30 : ∀i2.MODE_SP1_and_IMM1 ≠ i2 → eq_im MODE_SP1_and_IMM1 i2 = false.
+ #i2; nelim i2; nnormalize;
+ ##[ ##30: #H; nelim (H (refl_eq …))
+ ##| ##31,32,33,34: #n; ##]
+ ##[ ##*: #H; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim31 : ∀n1,i2.MODE_DIRn n1 = i2 → eq_im (MODE_DIRn n1) i2 = true.
- #n1; #t2; ncases t2;
- ##[ ##31: #n2; #H;
-     nchange with (eq_oct n1 n2 = true);
-     nrewrite > (instr_mode_destruct_MODE_DIRn … H);
-     nrewrite > (eq_to_eqoct n2 n2 (refl_eq …));
-     napply refl_eq
- ##| ##32,33,34: #n; #H; nnormalize; napply (instr_mode_destruct … H)
- ##| ##*: #H; nnormalize; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim31 : ∀n.∀i2.(MODE_DIRn n) ≠ i2 → eq_im (MODE_DIRn n) i2 = false.
+ #n1; #i2; nelim i2;
+ ##[ ##31: #n2; #H; nchange with (eq_oct n1 n2 = false); napply (neq_to_neqoct n1 n2 ?);
+           nnormalize; #H1; nrewrite > H1 in H:(%); #H; nelim (H (refl_eq …))
+ ##| ##32,33,34: #n; ##]
+ ##[ ##*: #H; nnormalize; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim32 : ∀n1,i2.MODE_DIRn_and_IMM1 n1 = i2 → eq_im (MODE_DIRn_and_IMM1 n1) i2 = true.
- #n1; #t2; ncases t2;
- ##[ ##32: #n2; #H;
-     nchange with (eq_oct n1 n2 = true);
-     nrewrite > (instr_mode_destruct_MODE_DIRn_and_IMM1 … H);
-     nrewrite > (eq_to_eqoct n2 n2 (refl_eq …));
-     napply refl_eq
- ##| ##31,33,34: #n; #H; nnormalize; napply (instr_mode_destruct … H)
- ##| ##*: #H; nnormalize; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim32 : ∀n.∀i2.(MODE_DIRn_and_IMM1 n) ≠ i2 → eq_im (MODE_DIRn_and_IMM1 n) i2 = false.
+ #n1; #i2; nelim i2;
+ ##[ ##32: #n2; #H; nchange with (eq_oct n1 n2 = false); napply (neq_to_neqoct n1 n2 ?);
+           nnormalize; #H1; nrewrite > H1 in H:(%); #H; nelim (H (refl_eq …))
+ ##| ##31,33,34: #n; ##]
+ ##[ ##*: #H; nnormalize; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim33 : ∀n1,i2.MODE_TNY n1 = i2 → eq_im (MODE_TNY n1) i2 = true.
- #n1; #t2; ncases t2;
- ##[ ##33: #n2; #H;
-     nchange with (eq_ex n1 n2 = true);
-     nrewrite > (instr_mode_destruct_MODE_TNY … H);
-     nrewrite > (eq_to_eqex n2 n2 (refl_eq …));
-     napply refl_eq
- ##| ##31,32,34: #n; #H; nnormalize; napply (instr_mode_destruct … H)
- ##| ##*: #H; nnormalize; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim33 : ∀n.∀i2.(MODE_TNY n) ≠ i2 → eq_im (MODE_TNY n) i2 = false.
+ #n1; #i2; nelim i2;
+ ##[ ##33: #n2; #H; nchange with (eq_ex n1 n2 = false); napply (neq_to_neqex n1 n2 ?);
+           nnormalize; #H1; nrewrite > H1 in H:(%); #H; nelim (H (refl_eq …))
+ ##| ##31,32,34: #n; ##]
+ ##[ ##*: #H; nnormalize; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim34 : ∀n1,i2.MODE_SRT n1 = i2 → eq_im (MODE_SRT n1) i2 = true.
- #n1; #t2; ncases t2;
- ##[ ##34: #n2; #H;
-     nchange with (eq_bit n1 n2 = true);
-     nrewrite > (instr_mode_destruct_MODE_SRT … H);
-     nrewrite > (eq_to_eqbit n2 n2 (refl_eq …));
-     napply refl_eq
- ##| ##31,32,33: #n; #H; nnormalize; napply (instr_mode_destruct … H)
- ##| ##*: #H; nnormalize; napply (instr_mode_destruct … H)
+nlemma neq_to_neqim34 : ∀n.∀i2.(MODE_SRT n) ≠ i2 → eq_im (MODE_SRT n) i2 = false.
+ #n1; #i2; nelim i2;
+ ##[ ##34: #n2; #H; nchange with (eq_bit n1 n2 = false); napply (neq_to_neqbit n1 n2 ?);
+           nnormalize; #H1; nrewrite > H1 in H:(%); #H; nelim (H (refl_eq …))
+ ##| ##31,32,33: #n; ##]
+ ##[ ##*: #H; nnormalize; napply refl_eq
  ##]
 nqed.
 
-nlemma eq_to_eqim : ∀i1,i2.i1 = i2 → eq_im i1 i2 = true.
- #i1; ncases i1;
- ##[ ##1: napply eq_to_eqim1 ##| ##2: napply eq_to_eqim2
- ##| ##3: napply eq_to_eqim3 ##| ##4: napply eq_to_eqim4
- ##| ##5: napply eq_to_eqim5 ##| ##6: napply eq_to_eqim6
- ##| ##7: napply eq_to_eqim7 ##| ##8: napply eq_to_eqim8
- ##| ##9: napply eq_to_eqim9 ##| ##10: napply eq_to_eqim10 
- ##| ##11: napply eq_to_eqim11 ##| ##12: napply eq_to_eqim12
- ##| ##13: napply eq_to_eqim13 ##| ##14: napply eq_to_eqim14
- ##| ##15: napply eq_to_eqim15 ##| ##16: napply eq_to_eqim16
- ##| ##17: napply eq_to_eqim17 ##| ##18: napply eq_to_eqim18
- ##| ##19: napply eq_to_eqim19 ##| ##20: napply eq_to_eqim20
- ##| ##21: napply eq_to_eqim21 ##| ##22: napply eq_to_eqim22
- ##| ##23: napply eq_to_eqim23 ##| ##24: napply eq_to_eqim24
- ##| ##25: napply eq_to_eqim25 ##| ##26: napply eq_to_eqim26
- ##| ##27: napply eq_to_eqim27 ##| ##28: napply eq_to_eqim28
- ##| ##29: napply eq_to_eqim29 ##| ##30: napply eq_to_eqim30
- ##| ##31: napply eq_to_eqim31 ##| ##32: napply eq_to_eqim32
- ##| ##33: napply eq_to_eqim33 ##| ##34: napply eq_to_eqim34
+nlemma neq_to_neqim : ∀i1,i2.i1 ≠ i2 → eq_im i1 i2 = false.
+ #i1; nelim i1;
+ ##[ ##1: napply neq_to_neqim1 ##| ##2: napply neq_to_neqim2
+ ##| ##3: napply neq_to_neqim3 ##| ##4: napply neq_to_neqim4
+ ##| ##5: napply neq_to_neqim5 ##| ##6: napply neq_to_neqim6
+ ##| ##7: napply neq_to_neqim7 ##| ##8: napply neq_to_neqim8
+ ##| ##9: napply neq_to_neqim9 ##| ##10: napply neq_to_neqim10
+ ##| ##11: napply neq_to_neqim11 ##| ##12: napply neq_to_neqim12
+ ##| ##13: napply neq_to_neqim13 ##| ##14: napply neq_to_neqim14
+ ##| ##15: napply neq_to_neqim15 ##| ##16: napply neq_to_neqim16
+ ##| ##17: napply neq_to_neqim17 ##| ##18: napply neq_to_neqim18
+ ##| ##19: napply neq_to_neqim19 ##| ##20: napply neq_to_neqim20
+ ##| ##21: napply neq_to_neqim21 ##| ##22: napply neq_to_neqim22
+ ##| ##23: napply neq_to_neqim23 ##| ##24: napply neq_to_neqim24
+ ##| ##25: napply neq_to_neqim25 ##| ##26: napply neq_to_neqim26
+ ##| ##27: napply neq_to_neqim27 ##| ##28: napply neq_to_neqim28
+ ##| ##29: napply neq_to_neqim29 ##| ##30: napply neq_to_neqim30
+ ##| ##31: napply neq_to_neqim31 ##| ##32: napply neq_to_neqim32
+ ##| ##33: napply neq_to_neqim33 ##| ##34: napply neq_to_neqim34
  ##]
 nqed.
index 72803e9515d901ddf780c1b54a77840f7f4d3baf..ffc7eab82ac538f0409774ac1676242384eae50b 100755 (executable)
@@ -27,944 +27,371 @@ include "freescale/opcode_base.ma".
 (* MATTONI BASE PER DEFINIRE LE TABELLE DELLE MCU *)
 (* ********************************************** *)
 
-ndefinition opcode_destruct1 : Πop2.ΠP:Prop.ADC = op2 → match op2 with [ ADC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##1: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ADC with [ ADC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct2 : Πop2.ΠP:Prop.ADD = op2 → match op2 with [ ADD ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##2: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ADD with [ ADD ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct3 : Πop2.ΠP:Prop.AIS = op2 → match op2 with [ AIS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##3: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match AIS with [ AIS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct4 : Πop2.ΠP:Prop.AIX = op2 → match op2 with [ AIX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##4: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match AIX with [ AIX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct5 : Πop2.ΠP:Prop.AND = op2 → match op2 with [ AND ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##5: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match AND with [ AND ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct6 : Πop2.ΠP:Prop.ASL = op2 → match op2 with [ ASL ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##6: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ASL with [ ASL ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct7 : Πop2.ΠP:Prop.ASR = op2 → match op2 with [ ASR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##7: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ASR with [ ASR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct8 : Πop2.ΠP:Prop.BCC = op2 → match op2 with [ BCC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##8: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BCC with [ BCC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct9 : Πop2.ΠP:Prop.BCLRn = op2 → match op2 with [ BCLRn ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##9: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BCLRn with [ BCLRn ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct10 : Πop2.ΠP:Prop.BCS = op2 → match op2 with [ BCS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##10: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BCS with [ BCS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct11 : Πop2.ΠP:Prop.BEQ = op2 → match op2 with [ BEQ ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##11: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BEQ with [ BEQ ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct12 : Πop2.ΠP:Prop.BGE = op2 → match op2 with [ BGE ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##12: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BGE with [ BGE ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct13 : Πop2.ΠP:Prop.BGND = op2 → match op2 with [ BGND ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##13: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BGND with [ BGND ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct14 : Πop2.ΠP:Prop.BGT = op2 → match op2 with [ BGT ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##14: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BGT with [ BGT ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct15 : Πop2.ΠP:Prop.BHCC = op2 → match op2 with [ BHCC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##15: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BHCC with [ BHCC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct16 : Πop2.ΠP:Prop.BHCS = op2 → match op2 with [ BHCS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##16: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BHCS with [ BHCS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct17 : Πop2.ΠP:Prop.BHI = op2 → match op2 with [ BHI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##17: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BHI with [ BHI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct18 : Πop2.ΠP:Prop.BIH = op2 → match op2 with [ BIH ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##18: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BIH with [ BIH ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct19 : Πop2.ΠP:Prop.BIL = op2 → match op2 with [ BIL ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##19: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BIL with [ BIL ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct20 : Πop2.ΠP:Prop.BIT = op2 → match op2 with [ BIT ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##20: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BIT with [ BIT ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct21 : Πop2.ΠP:Prop.BLE = op2 → match op2 with [ BLE ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##21: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BLE with [ BLE ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct22 : Πop2.ΠP:Prop.BLS = op2 → match op2 with [ BLS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##22: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BLS with [ BLS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct23 : Πop2.ΠP:Prop.BLT = op2 → match op2 with [ BLT ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##23: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BLT with [ BLT ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct24 : Πop2.ΠP:Prop.BMC = op2 → match op2 with [ BMC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##24: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BMC with [ BMC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct25 : Πop2.ΠP:Prop.BMI = op2 → match op2 with [ BMI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##25: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BMI with [ BMI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct26 : Πop2.ΠP:Prop.BMS = op2 → match op2 with [ BMS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##26: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BMS with [ BMS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct27 : Πop2.ΠP:Prop.BNE = op2 → match op2 with [ BNE ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##27: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BNE with [ BNE ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct28 : Πop2.ΠP:Prop.BPL = op2 → match op2 with [ BPL ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##28: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BPL with [ BPL ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct29 : Πop2.ΠP:Prop.BRA = op2 → match op2 with [ BRA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##29: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BRA with [ BRA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct30 : Πop2.ΠP:Prop.BRCLRn = op2 → match op2 with [ BRCLRn ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##30: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BRCLRn with [ BRCLRn ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct31 : Πop2.ΠP:Prop.BRN = op2 → match op2 with [ BRN ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##31: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BRN with [ BRN ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct32 : Πop2.ΠP:Prop.BRSETn = op2 → match op2 with [ BRSETn ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##32: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BRSETn with [ BRSETn ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct33 : Πop2.ΠP:Prop.BSETn = op2 → match op2 with [ BSETn ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##33: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BSETn with [ BSETn ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct34 : Πop2.ΠP:Prop.BSR = op2 → match op2 with [ BSR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##34: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match BSR with [ BSR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct35 : Πop2.ΠP:Prop.CBEQA = op2 → match op2 with [ CBEQA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##35: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CBEQA with [ CBEQA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct36 : Πop2.ΠP:Prop.CBEQX = op2 → match op2 with [ CBEQX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##36: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CBEQX with [ CBEQX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct37 : Πop2.ΠP:Prop.CLC = op2 → match op2 with [ CLC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##37: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CLC with [ CLC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct38 : Πop2.ΠP:Prop.CLI = op2 → match op2 with [ CLI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##38: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CLI with [ CLI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct39 : Πop2.ΠP:Prop.CLR = op2 → match op2 with [ CLR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##39: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CLR with [ CLR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct40 : Πop2.ΠP:Prop.CMP = op2 → match op2 with [ CMP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##40: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CMP with [ CMP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct41 : Πop2.ΠP:Prop.COM = op2 → match op2 with [ COM ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##41: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match COM with [ COM ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct42 : Πop2.ΠP:Prop.CPHX = op2 → match op2 with [ CPHX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##42: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CPHX with [ CPHX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct43 : Πop2.ΠP:Prop.CPX = op2 → match op2 with [ CPX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##43: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match CPX with [ CPX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct44 : Πop2.ΠP:Prop.DAA = op2 → match op2 with [ DAA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##44: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match DAA with [ DAA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct45 : Πop2.ΠP:Prop.DBNZ = op2 → match op2 with [ DBNZ ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##45: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match DBNZ with [ DBNZ ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct46 : Πop2.ΠP:Prop.DEC = op2 → match op2 with [ DEC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##46: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match DEC with [ DEC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct47 : Πop2.ΠP:Prop.DIV = op2 → match op2 with [ DIV ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##47: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match DIV with [ DIV ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct48 : Πop2.ΠP:Prop.EOR = op2 → match op2 with [ EOR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##48: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match EOR with [ EOR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct49 : Πop2.ΠP:Prop.INC = op2 → match op2 with [ INC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##49: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match INC with [ INC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct50 : Πop2.ΠP:Prop.JMP = op2 → match op2 with [ JMP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##50: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match JMP with [ JMP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct51 : Πop2.ΠP:Prop.JSR = op2 → match op2 with [ JSR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##51: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match JSR with [ JSR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct52 : Πop2.ΠP:Prop.LDA = op2 → match op2 with [ LDA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##52: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match LDA with [ LDA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct53 : Πop2.ΠP:Prop.LDHX = op2 → match op2 with [ LDHX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##53: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match LDHX with [ LDHX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct54 : Πop2.ΠP:Prop.LDX = op2 → match op2 with [ LDX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##54: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match LDX with [ LDX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct55 : Πop2.ΠP:Prop.LSR = op2 → match op2 with [ LSR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##55: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match LSR with [ LSR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct56 : Πop2.ΠP:Prop.MOV = op2 → match op2 with [ MOV ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##56: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match MOV with [ MOV ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct57 : Πop2.ΠP:Prop.MUL = op2 → match op2 with [ MUL ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##57: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match MUL with [ MUL ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct58 : Πop2.ΠP:Prop.NEG = op2 → match op2 with [ NEG ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##58: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match NEG with [ NEG ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct59 : Πop2.ΠP:Prop.NOP = op2 → match op2 with [ NOP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##59: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match NOP with [ NOP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct60 : Πop2.ΠP:Prop.NSA = op2 → match op2 with [ NSA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##60: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match NSA with [ NSA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct61 : Πop2.ΠP:Prop.ORA = op2 → match op2 with [ ORA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##61: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ORA with [ ORA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct62 : Πop2.ΠP:Prop.PSHA = op2 → match op2 with [ PSHA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##62: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PSHA with [ PSHA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct63 : Πop2.ΠP:Prop.PSHH = op2 → match op2 with [ PSHH ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##63: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PSHH with [ PSHH ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct64 : Πop2.ΠP:Prop.PSHX = op2 → match op2 with [ PSHX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##64: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PSHX with [ PSHX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct65 : Πop2.ΠP:Prop.PULA = op2 → match op2 with [ PULA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##65: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PULA with [ PULA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct66 : Πop2.ΠP:Prop.PULH = op2 → match op2 with [ PULH ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##66: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PULH with [ PULH ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct67 : Πop2.ΠP:Prop.PULX = op2 → match op2 with [ PULX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##67: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match PULX with [ PULX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct68 : Πop2.ΠP:Prop.ROL = op2 → match op2 with [ ROL ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##68: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ROL with [ ROL ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct69 : Πop2.ΠP:Prop.ROR = op2 → match op2 with [ ROR ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##69: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match ROR with [ ROR ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct70 : Πop2.ΠP:Prop.RSP = op2 → match op2 with [ RSP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##70: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match RSP with [ RSP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct71 : Πop2.ΠP:Prop.RTI = op2 → match op2 with [ RTI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##71: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match RTI with [ RTI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct72 : Πop2.ΠP:Prop.RTS = op2 → match op2 with [ RTS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##72: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match RTS with [ RTS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct73 : Πop2.ΠP:Prop.SBC = op2 → match op2 with [ SBC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##73: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SBC with [ SBC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct74 : Πop2.ΠP:Prop.SEC = op2 → match op2 with [ SEC ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##74: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SEC with [ SEC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct75 : Πop2.ΠP:Prop.SEI = op2 → match op2 with [ SEI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##75: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SEI with [ SEI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct76 : Πop2.ΠP:Prop.SHA = op2 → match op2 with [ SHA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##76: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SHA with [ SHA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct77 : Πop2.ΠP:Prop.SLA = op2 → match op2 with [ SLA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##77: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SLA with [ SLA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct78 : Πop2.ΠP:Prop.STA = op2 → match op2 with [ STA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##78: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match STA with [ STA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct79 : Πop2.ΠP:Prop.STHX = op2 → match op2 with [ STHX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##79: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match STHX with [ STHX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct80 : Πop2.ΠP:Prop.STOP = op2 → match op2 with [ STOP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##80: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match STOP with [ STOP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct81 : Πop2.ΠP:Prop.STX = op2 → match op2 with [ STX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##81: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match STX with [ STX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct82 : Πop2.ΠP:Prop.SUB = op2 → match op2 with [ SUB ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##82: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SUB with [ SUB ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct83 : Πop2.ΠP:Prop.SWI = op2 → match op2 with [ SWI ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##83: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match SWI with [ SWI ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct84 : Πop2.ΠP:Prop.TAP = op2 → match op2 with [ TAP ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##84: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TAP with [ TAP ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct85 : Πop2.ΠP:Prop.TAX = op2 → match op2 with [ TAX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##85: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TAX with [ TAX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct86 : Πop2.ΠP:Prop.TPA = op2 → match op2 with [ TPA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##86: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TPA with [ TPA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct87 : Πop2.ΠP:Prop.TST = op2 → match op2 with [ TST ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##87: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TST with [ TST ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct88 : Πop2.ΠP:Prop.TSX = op2 → match op2 with [ TSX ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##88: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TSX with [ TSX ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct89 : Πop2.ΠP:Prop.TXA = op2 → match op2 with [ TXA ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##89: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TXA with [ TXA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct90 : Πop2.ΠP:Prop.TXS = op2 → match op2 with [ TXS ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##90: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match TXS with [ TXS ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition opcode_destruct91 : Πop2.ΠP:Prop.WAIT = op2 → match op2 with [ WAIT ⇒ P → P | _ ⇒ P ].
- #op2; #P; ncases op2; nnormalize;
- ##[ ##91: #H; napply (λx:P.x)
- ##| ##*: #H; napply False_ind;
-          nchange with (match WAIT with [ WAIT ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
 ndefinition opcode_destruct_aux ≝
 Πop1,op2.ΠP:Prop.op1 = op2 →
- match op1 with
-  [ ADC ⇒ match op2 with [ ADC ⇒ P → P | _ ⇒ P ]
-  | ADD ⇒ match op2 with [ ADD ⇒ P → P | _ ⇒ P ]
-  | AIS ⇒ match op2 with [ AIS ⇒ P → P | _ ⇒ P ]
-  | AIX ⇒ match op2 with [ AIX ⇒ P → P | _ ⇒ P ]
-  | AND ⇒ match op2 with [ AND ⇒ P → P | _ ⇒ P ]
-  | ASL ⇒ match op2 with [ ASL ⇒ P → P | _ ⇒ P ]
-  | ASR ⇒ match op2 with [ ASR ⇒ P → P | _ ⇒ P ]
-  | BCC ⇒ match op2 with [ BCC ⇒ P → P | _ ⇒ P ]
-  | BCLRn ⇒ match op2 with [ BCLRn ⇒ P → P | _ ⇒ P ]
-  | BCS ⇒ match op2 with [ BCS ⇒ P → P | _ ⇒ P ]
-  | BEQ ⇒ match op2 with [ BEQ ⇒ P → P | _ ⇒ P ]
-  | BGE ⇒ match op2 with [ BGE ⇒ P → P | _ ⇒ P ]
-  | BGND ⇒ match op2 with [ BGND ⇒ P → P | _ ⇒ P ]
-  | BGT ⇒ match op2 with [ BGT ⇒ P → P | _ ⇒ P ]
-  | BHCC ⇒ match op2 with [ BHCC ⇒ P → P | _ ⇒ P ]
-  | BHCS ⇒ match op2 with [ BHCS ⇒ P → P | _ ⇒ P ]
-  | BHI ⇒ match op2 with [ BHI ⇒ P → P | _ ⇒ P ]
-  | BIH ⇒ match op2 with [ BIH ⇒ P → P | _ ⇒ P ]
-  | BIL ⇒ match op2 with [ BIL ⇒ P → P | _ ⇒ P ]
-  | BIT ⇒ match op2 with [ BIT ⇒ P → P | _ ⇒ P ]
-  | BLE ⇒ match op2 with [ BLE ⇒ P → P | _ ⇒ P ]
-  | BLS ⇒ match op2 with [ BLS ⇒ P → P | _ ⇒ P ]
-  | BLT ⇒ match op2 with [ BLT ⇒ P → P | _ ⇒ P ]
-  | BMC ⇒ match op2 with [ BMC ⇒ P → P | _ ⇒ P ]
-  | BMI ⇒ match op2 with [ BMI ⇒ P → P | _ ⇒ P ]
-  | BMS ⇒ match op2 with [ BMS ⇒ P → P | _ ⇒ P ]
-  | BNE ⇒ match op2 with [ BNE ⇒ P → P | _ ⇒ P ]
-  | BPL ⇒ match op2 with [ BPL ⇒ P → P | _ ⇒ P ]
-  | BRA ⇒ match op2 with [ BRA ⇒ P → P | _ ⇒ P ]
-  | BRCLRn ⇒ match op2 with [ BRCLRn ⇒ P → P | _ ⇒ P ]
-  | BRN ⇒ match op2 with [ BRN ⇒ P → P | _ ⇒ P ]
-  | BRSETn ⇒ match op2 with [ BRSETn ⇒ P → P | _ ⇒ P ]
-  | BSETn ⇒ match op2 with [ BSETn ⇒ P → P | _ ⇒ P ]
-  | BSR ⇒ match op2 with [ BSR ⇒ P → P | _ ⇒ P ]
-  | CBEQA ⇒ match op2 with [ CBEQA ⇒ P → P | _ ⇒ P ]
-  | CBEQX ⇒ match op2 with [ CBEQX ⇒ P → P | _ ⇒ P ]
-  | CLC ⇒ match op2 with [ CLC ⇒ P → P | _ ⇒ P ]
-  | CLI ⇒ match op2 with [ CLI ⇒ P → P | _ ⇒ P ]
-  | CLR ⇒ match op2 with [ CLR ⇒ P → P | _ ⇒ P ]
-  | CMP ⇒ match op2 with [ CMP ⇒ P → P | _ ⇒ P ]
-  | COM ⇒ match op2 with [ COM ⇒ P → P | _ ⇒ P ]
-  | CPHX ⇒ match op2 with [ CPHX ⇒ P → P | _ ⇒ P ]
-  | CPX ⇒ match op2 with [ CPX ⇒ P → P | _ ⇒ P ]
-  | DAA ⇒ match op2 with [ DAA ⇒ P → P | _ ⇒ P ]
-  | DBNZ ⇒ match op2 with [ DBNZ ⇒ P → P | _ ⇒ P ]
-  | DEC ⇒ match op2 with [ DEC ⇒ P → P | _ ⇒ P ]
-  | DIV ⇒ match op2 with [ DIV ⇒ P → P | _ ⇒ P ]
-  | EOR ⇒ match op2 with [ EOR ⇒ P → P | _ ⇒ P ]
-  | INC ⇒ match op2 with [ INC ⇒ P → P | _ ⇒ P ]
-  | JMP ⇒ match op2 with [ JMP ⇒ P → P | _ ⇒ P ]
-  | JSR ⇒ match op2 with [ JSR ⇒ P → P | _ ⇒ P ]
-  | LDA ⇒ match op2 with [ LDA ⇒ P → P | _ ⇒ P ]
-  | LDHX ⇒ match op2 with [ LDHX ⇒ P → P | _ ⇒ P ]
-  | LDX ⇒ match op2 with [ LDX ⇒ P → P | _ ⇒ P ]
-  | LSR ⇒ match op2 with [ LSR ⇒ P → P | _ ⇒ P ]
-  | MOV ⇒ match op2 with [ MOV ⇒ P → P | _ ⇒ P ]
-  | MUL ⇒ match op2 with [ MUL ⇒ P → P | _ ⇒ P ]
-  | NEG ⇒ match op2 with [ NEG ⇒ P → P | _ ⇒ P ]
-  | NOP ⇒ match op2 with [ NOP ⇒ P → P | _ ⇒ P ]
-  | NSA ⇒ match op2 with [ NSA ⇒ P → P | _ ⇒ P ]
-  | ORA ⇒ match op2 with [ ORA ⇒ P → P | _ ⇒ P ]
-  | PSHA ⇒ match op2 with [ PSHA ⇒ P → P | _ ⇒ P ]
-  | PSHH ⇒ match op2 with [ PSHH ⇒ P → P | _ ⇒ P ]
-  | PSHX ⇒ match op2 with [ PSHX ⇒ P → P | _ ⇒ P ]
-  | PULA ⇒ match op2 with [ PULA ⇒ P → P | _ ⇒ P ]
-  | PULH ⇒ match op2 with [ PULH ⇒ P → P | _ ⇒ P ]
-  | PULX ⇒ match op2 with [ PULX ⇒ P → P | _ ⇒ P ]
-  | ROL ⇒ match op2 with [ ROL ⇒ P → P | _ ⇒ P ]
-  | ROR ⇒ match op2 with [ ROR ⇒ P → P | _ ⇒ P ]
-  | RSP ⇒ match op2 with [ RSP ⇒ P → P | _ ⇒ P ]
-  | RTI ⇒ match op2 with [ RTI ⇒ P → P | _ ⇒ P ]
-  | RTS ⇒ match op2 with [ RTS ⇒ P → P | _ ⇒ P ]
-  | SBC ⇒ match op2 with [ SBC ⇒ P → P | _ ⇒ P ]
-  | SEC ⇒ match op2 with [ SEC ⇒ P → P | _ ⇒ P ]
-  | SEI ⇒ match op2 with [ SEI ⇒ P → P | _ ⇒ P ]
-  | SHA ⇒ match op2 with [ SHA ⇒ P → P | _ ⇒ P ]
-  | SLA ⇒ match op2 with [ SLA ⇒ P → P | _ ⇒ P ]
-  | STA ⇒ match op2 with [ STA ⇒ P → P | _ ⇒ P ]
-  | STHX ⇒ match op2 with [ STHX ⇒ P → P | _ ⇒ P ]
-  | STOP ⇒ match op2 with [ STOP ⇒ P → P | _ ⇒ P ]
-  | STX ⇒ match op2 with [ STX ⇒ P → P | _ ⇒ P ]
-  | SUB ⇒ match op2 with [ SUB ⇒ P → P | _ ⇒ P ]
-  | SWI ⇒ match op2 with [ SWI ⇒ P → P | _ ⇒ P ]
-  | TAP ⇒ match op2 with [ TAP ⇒ P → P | _ ⇒ P ]
-  | TAX ⇒ match op2 with [ TAX ⇒ P → P | _ ⇒ P ]
-  | TPA ⇒ match op2 with [ TPA ⇒ P → P | _ ⇒ P ]
-  | TST ⇒ match op2 with [ TST ⇒ P → P | _ ⇒ P ]
-  | TSX ⇒ match op2 with [ TSX ⇒ P → P | _ ⇒ P ]
-  | TXA ⇒ match op2 with [ TXA ⇒ P → P | _ ⇒ P ]
-  | TXS ⇒ match op2 with [ TXS ⇒ P → P | _ ⇒ P ]
-  | WAIT ⇒ match op2 with [ WAIT ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_op op1 op2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition opcode_destruct : opcode_destruct_aux.
+ #op1; #op2; #P; #H;
+ nrewrite < H;
+ nelim op1;
+ nnormalize;
+ napply (λx.x).
+nqed.
+
+nlemma symmetric_eqop1 : ∀op2.eq_op ADC op2 = eq_op op2 ADC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop2 : ∀op2.eq_op ADD op2 = eq_op op2 ADD. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop3 : ∀op2.eq_op AIS op2 = eq_op op2 AIS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop4 : ∀op2.eq_op AIX op2 = eq_op op2 AIX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop5 : ∀op2.eq_op AND op2 = eq_op op2 AND. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop6 : ∀op2.eq_op ASL op2 = eq_op op2 ASL. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop7 : ∀op2.eq_op ASR op2 = eq_op op2 ASR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop8 : ∀op2.eq_op BCC op2 = eq_op op2 BCC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop9 : ∀op2.eq_op BCLRn op2 = eq_op op2 BCLRn. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop10 : ∀op2.eq_op BCS op2 = eq_op op2 BCS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop11 : ∀op2.eq_op BEQ op2 = eq_op op2 BEQ. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop12 : ∀op2.eq_op BGE op2 = eq_op op2 BGE. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop13 : ∀op2.eq_op BGND op2 = eq_op op2 BGND. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop14 : ∀op2.eq_op BGT op2 = eq_op op2 BGT. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop15 : ∀op2.eq_op BHCC op2 = eq_op op2 BHCC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop16 : ∀op2.eq_op BHCS op2 = eq_op op2 BHCS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop17 : ∀op2.eq_op BHI op2 = eq_op op2 BHI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop18 : ∀op2.eq_op BIH op2 = eq_op op2 BIH. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop19 : ∀op2.eq_op BIL op2 = eq_op op2 BIL. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop20 : ∀op2.eq_op BIT op2 = eq_op op2 BIT. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop21 : ∀op2.eq_op BLE op2 = eq_op op2 BLE. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop22 : ∀op2.eq_op BLS op2 = eq_op op2 BLS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop23 : ∀op2.eq_op BLT op2 = eq_op op2 BLT. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop24 : ∀op2.eq_op BMC op2 = eq_op op2 BMC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop25 : ∀op2.eq_op BMI op2 = eq_op op2 BMI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop26 : ∀op2.eq_op BMS op2 = eq_op op2 BMS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop27 : ∀op2.eq_op BNE op2 = eq_op op2 BNE. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop28 : ∀op2.eq_op BPL op2 = eq_op op2 BPL. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop29 : ∀op2.eq_op BRA op2 = eq_op op2 BRA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop30 : ∀op2.eq_op BRCLRn op2 = eq_op op2 BRCLRn. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop31 : ∀op2.eq_op BRN op2 = eq_op op2 BRN. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop32 : ∀op2.eq_op BRSETn op2 = eq_op op2 BRSETn. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop33 : ∀op2.eq_op BSETn op2 = eq_op op2 BSETn. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop34 : ∀op2.eq_op BSR op2 = eq_op op2 BSR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop35 : ∀op2.eq_op CBEQA op2 = eq_op op2 CBEQA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop36 : ∀op2.eq_op CBEQX op2 = eq_op op2 CBEQX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop37 : ∀op2.eq_op CLC op2 = eq_op op2 CLC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop38 : ∀op2.eq_op CLI op2 = eq_op op2 CLI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop39 : ∀op2.eq_op CLR op2 = eq_op op2 CLR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop40 : ∀op2.eq_op CMP op2 = eq_op op2 CMP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop41 : ∀op2.eq_op COM op2 = eq_op op2 COM. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop42 : ∀op2.eq_op CPHX op2 = eq_op op2 CPHX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop43 : ∀op2.eq_op CPX op2 = eq_op op2 CPX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop44 : ∀op2.eq_op DAA op2 = eq_op op2 DAA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop45 : ∀op2.eq_op DBNZ op2 = eq_op op2 DBNZ. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop46 : ∀op2.eq_op DEC op2 = eq_op op2 DEC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop47 : ∀op2.eq_op DIV op2 = eq_op op2 DIV. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop48 : ∀op2.eq_op EOR op2 = eq_op op2 EOR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop49 : ∀op2.eq_op INC op2 = eq_op op2 INC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop50 : ∀op2.eq_op JMP op2 = eq_op op2 JMP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop51 : ∀op2.eq_op JSR op2 = eq_op op2 JSR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop52 : ∀op2.eq_op LDA op2 = eq_op op2 LDA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop53 : ∀op2.eq_op LDHX op2 = eq_op op2 LDHX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop54 : ∀op2.eq_op LDX op2 = eq_op op2 LDX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop55 : ∀op2.eq_op LSR op2 = eq_op op2 LSR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop56 : ∀op2.eq_op MOV op2 = eq_op op2 MOV. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop57 : ∀op2.eq_op MUL op2 = eq_op op2 MUL. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop58 : ∀op2.eq_op NEG op2 = eq_op op2 NEG. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop59 : ∀op2.eq_op NOP op2 = eq_op op2 NOP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop60 : ∀op2.eq_op NSA op2 = eq_op op2 NSA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop61 : ∀op2.eq_op ORA op2 = eq_op op2 ORA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop62 : ∀op2.eq_op PSHA op2 = eq_op op2 PSHA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop63 : ∀op2.eq_op PSHH op2 = eq_op op2 PSHH. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop64 : ∀op2.eq_op PSHX op2 = eq_op op2 PSHX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop65 : ∀op2.eq_op PULA op2 = eq_op op2 PULA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop66 : ∀op2.eq_op PULH op2 = eq_op op2 PULH. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop67 : ∀op2.eq_op PULX op2 = eq_op op2 PULX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop68 : ∀op2.eq_op ROL op2 = eq_op op2 ROL. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop69 : ∀op2.eq_op ROR op2 = eq_op op2 ROR. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop70 : ∀op2.eq_op RSP op2 = eq_op op2 RSP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop71 : ∀op2.eq_op RTI op2 = eq_op op2 RTI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop72 : ∀op2.eq_op RTS op2 = eq_op op2 RTS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop73 : ∀op2.eq_op SBC op2 = eq_op op2 SBC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop74 : ∀op2.eq_op SEC op2 = eq_op op2 SEC. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop75 : ∀op2.eq_op SEI op2 = eq_op op2 SEI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop76 : ∀op2.eq_op SHA op2 = eq_op op2 SHA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop77 : ∀op2.eq_op SLA op2 = eq_op op2 SLA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop78 : ∀op2.eq_op STA op2 = eq_op op2 STA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop79 : ∀op2.eq_op STHX op2 = eq_op op2 STHX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop80 : ∀op2.eq_op STOP op2 = eq_op op2 STOP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop81 : ∀op2.eq_op STX op2 = eq_op op2 STX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop82 : ∀op2.eq_op SUB op2 = eq_op op2 SUB. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop83 : ∀op2.eq_op SWI op2 = eq_op op2 SWI. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop84 : ∀op2.eq_op TAP op2 = eq_op op2 TAP. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop85 : ∀op2.eq_op TAX op2 = eq_op op2 TAX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop86 : ∀op2.eq_op TPA op2 = eq_op op2 TPA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop87 : ∀op2.eq_op TST op2 = eq_op op2 TST. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop88 : ∀op2.eq_op TSX op2 = eq_op op2 TSX. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop89 : ∀op2.eq_op TXA op2 = eq_op op2 TXA. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop90 : ∀op2.eq_op TXS op2 = eq_op op2 TXS. #op2; nnormalize; napply refl_eq.nqed.
+nlemma symmetric_eqop91 : ∀op2.eq_op WAIT op2 = eq_op op2 WAIT. #op2; nnormalize; napply refl_eq.nqed.
+
+nlemma symmetric_eqop : symmetricT opcode bool eq_op.
+ #op1; ncases op1;
+ ##[ ##1: napply symmetric_eqop1 ##| ##2: napply symmetric_eqop2 ##| ##3: napply symmetric_eqop3 ##| ##4: napply symmetric_eqop4
+ ##| ##5: napply symmetric_eqop5 ##| ##6: napply symmetric_eqop6 ##| ##7: napply symmetric_eqop7 ##| ##8: napply symmetric_eqop8
+ ##| ##9: napply symmetric_eqop9 ##| ##10: napply symmetric_eqop10 ##| ##11: napply symmetric_eqop11 ##| ##12: napply symmetric_eqop12
+ ##| ##13: napply symmetric_eqop13 ##| ##14: napply symmetric_eqop14 ##| ##15: napply symmetric_eqop15 ##| ##16: napply symmetric_eqop16
+ ##| ##17: napply symmetric_eqop17 ##| ##18: napply symmetric_eqop18 ##| ##19: napply symmetric_eqop19 ##| ##20: napply symmetric_eqop20
+ ##| ##21: napply symmetric_eqop21 ##| ##22: napply symmetric_eqop22 ##| ##23: napply symmetric_eqop23 ##| ##24: napply symmetric_eqop24
+ ##| ##25: napply symmetric_eqop25 ##| ##26: napply symmetric_eqop26 ##| ##27: napply symmetric_eqop27 ##| ##28: napply symmetric_eqop28
+ ##| ##29: napply symmetric_eqop29 ##| ##30: napply symmetric_eqop30 ##| ##31: napply symmetric_eqop31 ##| ##32: napply symmetric_eqop32
+ ##| ##33: napply symmetric_eqop33 ##| ##34: napply symmetric_eqop34 ##| ##35: napply symmetric_eqop35 ##| ##36: napply symmetric_eqop36
+ ##| ##37: napply symmetric_eqop37 ##| ##38: napply symmetric_eqop38 ##| ##39: napply symmetric_eqop39 ##| ##40: napply symmetric_eqop40
+ ##| ##41: napply symmetric_eqop41 ##| ##42: napply symmetric_eqop42 ##| ##43: napply symmetric_eqop43 ##| ##44: napply symmetric_eqop44
+ ##| ##45: napply symmetric_eqop45 ##| ##46: napply symmetric_eqop46 ##| ##47: napply symmetric_eqop47 ##| ##48: napply symmetric_eqop48
+ ##| ##49: napply symmetric_eqop49 ##| ##50: napply symmetric_eqop50 ##| ##51: napply symmetric_eqop51 ##| ##52: napply symmetric_eqop52
+ ##| ##53: napply symmetric_eqop53 ##| ##54: napply symmetric_eqop54 ##| ##55: napply symmetric_eqop55 ##| ##56: napply symmetric_eqop56
+ ##| ##57: napply symmetric_eqop57 ##| ##58: napply symmetric_eqop58 ##| ##59: napply symmetric_eqop59 ##| ##60: napply symmetric_eqop60
+ ##| ##61: napply symmetric_eqop61 ##| ##62: napply symmetric_eqop62 ##| ##63: napply symmetric_eqop63 ##| ##64: napply symmetric_eqop64
+ ##| ##65: napply symmetric_eqop65 ##| ##66: napply symmetric_eqop66 ##| ##67: napply symmetric_eqop67 ##| ##68: napply symmetric_eqop68
+ ##| ##69: napply symmetric_eqop69 ##| ##70: napply symmetric_eqop70 ##| ##71: napply symmetric_eqop71 ##| ##72: napply symmetric_eqop72
+ ##| ##73: napply symmetric_eqop73 ##| ##74: napply symmetric_eqop74 ##| ##75: napply symmetric_eqop75 ##| ##76: napply symmetric_eqop76
+ ##| ##77: napply symmetric_eqop77 ##| ##78: napply symmetric_eqop78 ##| ##79: napply symmetric_eqop79 ##| ##80: napply symmetric_eqop80
+ ##| ##81: napply symmetric_eqop81 ##| ##82: napply symmetric_eqop82 ##| ##83: napply symmetric_eqop83 ##| ##84: napply symmetric_eqop84
+ ##| ##85: napply symmetric_eqop85 ##| ##86: napply symmetric_eqop86 ##| ##87: napply symmetric_eqop87 ##| ##88: napply symmetric_eqop88
+ ##| ##89: napply symmetric_eqop89 ##| ##90: napply symmetric_eqop90 ##| ##91: napply symmetric_eqop91 ##]
+nqed.
+
+nlemma eqop_to_eq1 : ∀op2.eq_op ADC op2 = true → ADC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##1: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq2 : ∀op2.eq_op ADD op2 = true → ADD = op2. #op2; ncases op2; nnormalize; #H; ##[ ##2: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq3 : ∀op2.eq_op AIS op2 = true → AIS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##3: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq4 : ∀op2.eq_op AIX op2 = true → AIX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##4: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq5 : ∀op2.eq_op AND op2 = true → AND = op2. #op2; ncases op2; nnormalize; #H; ##[ ##5: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq6 : ∀op2.eq_op ASL op2 = true → ASL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##6: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq7 : ∀op2.eq_op ASR op2 = true → ASR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##7: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq8 : ∀op2.eq_op BCC op2 = true → BCC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##8: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq9 : ∀op2.eq_op BCLRn op2 = true → BCLRn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##9: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq10 : ∀op2.eq_op BCS op2 = true → BCS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##10: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq11 : ∀op2.eq_op BEQ op2 = true → BEQ = op2. #op2; ncases op2; nnormalize; #H; ##[ ##11: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq12 : ∀op2.eq_op BGE op2 = true → BGE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##12: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq13 : ∀op2.eq_op BGND op2 = true → BGND = op2. #op2; ncases op2; nnormalize; #H; ##[ ##13: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq14 : ∀op2.eq_op BGT op2 = true → BGT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##14: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq15 : ∀op2.eq_op BHCC op2 = true → BHCC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##15: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq16 : ∀op2.eq_op BHCS op2 = true → BHCS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##16: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq17 : ∀op2.eq_op BHI op2 = true → BHI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##17: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq18 : ∀op2.eq_op BIH op2 = true → BIH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##18: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq19 : ∀op2.eq_op BIL op2 = true → BIL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##19: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq20 : ∀op2.eq_op BIT op2 = true → BIT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##20: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq21 : ∀op2.eq_op BLE op2 = true → BLE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##21: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq22 : ∀op2.eq_op BLS op2 = true → BLS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##22: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq23 : ∀op2.eq_op BLT op2 = true → BLT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##23: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq24 : ∀op2.eq_op BMC op2 = true → BMC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##24: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq25 : ∀op2.eq_op BMI op2 = true → BMI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##25: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq26 : ∀op2.eq_op BMS op2 = true → BMS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##26: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq27 : ∀op2.eq_op BNE op2 = true → BNE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##27: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq28 : ∀op2.eq_op BPL op2 = true → BPL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##28: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq29 : ∀op2.eq_op BRA op2 = true → BRA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##29: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq30 : ∀op2.eq_op BRCLRn op2 = true → BRCLRn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##30: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq31 : ∀op2.eq_op BRN op2 = true → BRN = op2. #op2; ncases op2; nnormalize; #H; ##[ ##31: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq32 : ∀op2.eq_op BRSETn op2 = true → BRSETn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##32: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq33 : ∀op2.eq_op BSETn op2 = true → BSETn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##33: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq34 : ∀op2.eq_op BSR op2 = true → BSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##34: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq35 : ∀op2.eq_op CBEQA op2 = true → CBEQA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##35: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq36 : ∀op2.eq_op CBEQX op2 = true → CBEQX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##36: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq37 : ∀op2.eq_op CLC op2 = true → CLC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##37: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq38 : ∀op2.eq_op CLI op2 = true → CLI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##38: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq39 : ∀op2.eq_op CLR op2 = true → CLR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##39: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq40 : ∀op2.eq_op CMP op2 = true → CMP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##40: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq41 : ∀op2.eq_op COM op2 = true → COM = op2. #op2; ncases op2; nnormalize; #H; ##[ ##41: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq42 : ∀op2.eq_op CPHX op2 = true → CPHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##42: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq43 : ∀op2.eq_op CPX op2 = true → CPX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##43: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq44 : ∀op2.eq_op DAA op2 = true → DAA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##44: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq45 : ∀op2.eq_op DBNZ op2 = true → DBNZ = op2. #op2; ncases op2; nnormalize; #H; ##[ ##45: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq46 : ∀op2.eq_op DEC op2 = true → DEC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##46: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq47 : ∀op2.eq_op DIV op2 = true → DIV = op2. #op2; ncases op2; nnormalize; #H; ##[ ##47: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq48 : ∀op2.eq_op EOR op2 = true → EOR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##48: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq49 : ∀op2.eq_op INC op2 = true → INC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##49: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq50 : ∀op2.eq_op JMP op2 = true → JMP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##50: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq51 : ∀op2.eq_op JSR op2 = true → JSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##51: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq52 : ∀op2.eq_op LDA op2 = true → LDA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##52: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq53 : ∀op2.eq_op LDHX op2 = true → LDHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##53: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq54 : ∀op2.eq_op LDX op2 = true → LDX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##54: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq55 : ∀op2.eq_op LSR op2 = true → LSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##55: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq56 : ∀op2.eq_op MOV op2 = true → MOV = op2. #op2; ncases op2; nnormalize; #H; ##[ ##56: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq57 : ∀op2.eq_op MUL op2 = true → MUL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##57: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq58 : ∀op2.eq_op NEG op2 = true → NEG = op2. #op2; ncases op2; nnormalize; #H; ##[ ##58: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq59 : ∀op2.eq_op NOP op2 = true → NOP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##59: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq60 : ∀op2.eq_op NSA op2 = true → NSA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##60: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq61 : ∀op2.eq_op ORA op2 = true → ORA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##61: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq62 : ∀op2.eq_op PSHA op2 = true → PSHA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##62: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq63 : ∀op2.eq_op PSHH op2 = true → PSHH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##63: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq64 : ∀op2.eq_op PSHX op2 = true → PSHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##64: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq65 : ∀op2.eq_op PULA op2 = true → PULA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##65: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq66 : ∀op2.eq_op PULH op2 = true → PULH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##66: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq67 : ∀op2.eq_op PULX op2 = true → PULX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##67: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq68 : ∀op2.eq_op ROL op2 = true → ROL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##68: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq69 : ∀op2.eq_op ROR op2 = true → ROR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##69: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq70 : ∀op2.eq_op RSP op2 = true → RSP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##70: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq71 : ∀op2.eq_op RTI op2 = true → RTI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##71: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq72 : ∀op2.eq_op RTS op2 = true → RTS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##72: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq73 : ∀op2.eq_op SBC op2 = true → SBC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##73: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq74 : ∀op2.eq_op SEC op2 = true → SEC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##74: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq75 : ∀op2.eq_op SEI op2 = true → SEI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##75: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq76 : ∀op2.eq_op SHA op2 = true → SHA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##76: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq77 : ∀op2.eq_op SLA op2 = true → SLA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##77: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq78 : ∀op2.eq_op STA op2 = true → STA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##78: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq79 : ∀op2.eq_op STHX op2 = true → STHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##79: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq80 : ∀op2.eq_op STOP op2 = true → STOP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##80: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq81 : ∀op2.eq_op STX op2 = true → STX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##81: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq82 : ∀op2.eq_op SUB op2 = true → SUB = op2. #op2; ncases op2; nnormalize; #H; ##[ ##82: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq83 : ∀op2.eq_op SWI op2 = true → SWI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##83: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq84 : ∀op2.eq_op TAP op2 = true → TAP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##84: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq85 : ∀op2.eq_op TAX op2 = true → TAX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##85: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq86 : ∀op2.eq_op TPA op2 = true → TPA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##86: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq87 : ∀op2.eq_op TST op2 = true → TST = op2. #op2; ncases op2; nnormalize; #H; ##[ ##87: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq88 : ∀op2.eq_op TSX op2 = true → TSX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##88: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq89 : ∀op2.eq_op TXA op2 = true → TXA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##89: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq90 : ∀op2.eq_op TXS op2 = true → TXS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##90: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma eqop_to_eq91 : ∀op2.eq_op WAIT op2 = true → WAIT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##91: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+
+nlemma eqop_to_eq : ∀op1,op2.eq_op op1 op2 = true → op1 = op2.
+ #op1; ncases op1;
+ ##[ ##1: napply eqop_to_eq1 ##| ##2: napply eqop_to_eq2 ##| ##3: napply eqop_to_eq3 ##| ##4: napply eqop_to_eq4
+ ##| ##5: napply eqop_to_eq5 ##| ##6: napply eqop_to_eq6 ##| ##7: napply eqop_to_eq7 ##| ##8: napply eqop_to_eq8
+ ##| ##9: napply eqop_to_eq9 ##| ##10: napply eqop_to_eq10 ##| ##11: napply eqop_to_eq11 ##| ##12: napply eqop_to_eq12
+ ##| ##13: napply eqop_to_eq13 ##| ##14: napply eqop_to_eq14 ##| ##15: napply eqop_to_eq15 ##| ##16: napply eqop_to_eq16
+ ##| ##17: napply eqop_to_eq17 ##| ##18: napply eqop_to_eq18 ##| ##19: napply eqop_to_eq19 ##| ##20: napply eqop_to_eq20
+ ##| ##21: napply eqop_to_eq21 ##| ##22: napply eqop_to_eq22 ##| ##23: napply eqop_to_eq23 ##| ##24: napply eqop_to_eq24
+ ##| ##25: napply eqop_to_eq25 ##| ##26: napply eqop_to_eq26 ##| ##27: napply eqop_to_eq27 ##| ##28: napply eqop_to_eq28
+ ##| ##29: napply eqop_to_eq29 ##| ##30: napply eqop_to_eq30 ##| ##31: napply eqop_to_eq31 ##| ##32: napply eqop_to_eq32
+ ##| ##33: napply eqop_to_eq33 ##| ##34: napply eqop_to_eq34 ##| ##35: napply eqop_to_eq35 ##| ##36: napply eqop_to_eq36
+ ##| ##37: napply eqop_to_eq37 ##| ##38: napply eqop_to_eq38 ##| ##39: napply eqop_to_eq39 ##| ##40: napply eqop_to_eq40
+ ##| ##41: napply eqop_to_eq41 ##| ##42: napply eqop_to_eq42 ##| ##43: napply eqop_to_eq43 ##| ##44: napply eqop_to_eq44
+ ##| ##45: napply eqop_to_eq45 ##| ##46: napply eqop_to_eq46 ##| ##47: napply eqop_to_eq47 ##| ##48: napply eqop_to_eq48
+ ##| ##49: napply eqop_to_eq49 ##| ##50: napply eqop_to_eq50 ##| ##51: napply eqop_to_eq51 ##| ##52: napply eqop_to_eq52
+ ##| ##53: napply eqop_to_eq53 ##| ##54: napply eqop_to_eq54 ##| ##55: napply eqop_to_eq55 ##| ##56: napply eqop_to_eq56
+ ##| ##57: napply eqop_to_eq57 ##| ##58: napply eqop_to_eq58 ##| ##59: napply eqop_to_eq59 ##| ##60: napply eqop_to_eq60
+ ##| ##61: napply eqop_to_eq61 ##| ##62: napply eqop_to_eq62 ##| ##63: napply eqop_to_eq63 ##| ##64: napply eqop_to_eq64
+ ##| ##65: napply eqop_to_eq65 ##| ##66: napply eqop_to_eq66 ##| ##67: napply eqop_to_eq67 ##| ##68: napply eqop_to_eq68
+ ##| ##69: napply eqop_to_eq69 ##| ##70: napply eqop_to_eq70 ##| ##71: napply eqop_to_eq71 ##| ##72: napply eqop_to_eq72
+ ##| ##73: napply eqop_to_eq73 ##| ##74: napply eqop_to_eq74 ##| ##75: napply eqop_to_eq75 ##| ##76: napply eqop_to_eq76
+ ##| ##77: napply eqop_to_eq77 ##| ##78: napply eqop_to_eq78 ##| ##79: napply eqop_to_eq79 ##| ##80: napply eqop_to_eq80
+ ##| ##81: napply eqop_to_eq81 ##| ##82: napply eqop_to_eq82 ##| ##83: napply eqop_to_eq83 ##| ##84: napply eqop_to_eq84
+ ##| ##85: napply eqop_to_eq85 ##| ##86: napply eqop_to_eq86 ##| ##87: napply eqop_to_eq87 ##| ##88: napply eqop_to_eq88
+ ##| ##89: napply eqop_to_eq89 ##| ##90: napply eqop_to_eq90 ##| ##91: napply eqop_to_eq91 ##]
+nqed.
+
+nlemma eq_to_eqop1 : ∀op2.ADC = op2 → eq_op ADC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##1: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop2 : ∀op2.ADD = op2 → eq_op ADD op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##2: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop3 : ∀op2.AIS = op2 → eq_op AIS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##3: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop4 : ∀op2.AIX = op2 → eq_op AIX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##4: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop5 : ∀op2.AND = op2 → eq_op AND op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##5: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop6 : ∀op2.ASL = op2 → eq_op ASL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##6: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop7 : ∀op2.ASR = op2 → eq_op ASR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##7: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop8 : ∀op2.BCC = op2 → eq_op BCC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##8: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop9 : ∀op2.BCLRn = op2 → eq_op BCLRn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##9: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop10 : ∀op2.BCS = op2 → eq_op BCS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##10: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop11 : ∀op2.BEQ = op2 → eq_op BEQ op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##11: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop12 : ∀op2.BGE = op2 → eq_op BGE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##12: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop13 : ∀op2.BGND = op2 → eq_op BGND op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##13: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop14 : ∀op2.BGT = op2 → eq_op BGT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##14: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop15 : ∀op2.BHCC = op2 → eq_op BHCC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##15: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop16 : ∀op2.BHCS = op2 → eq_op BHCS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##16: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop17 : ∀op2.BHI = op2 → eq_op BHI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##17: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop18 : ∀op2.BIH = op2 → eq_op BIH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##18: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop19 : ∀op2.BIL = op2 → eq_op BIL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##19: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop20 : ∀op2.BIT = op2 → eq_op BIT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##20: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop21 : ∀op2.BLE = op2 → eq_op BLE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##21: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop22 : ∀op2.BLS = op2 → eq_op BLS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##22: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop23 : ∀op2.BLT = op2 → eq_op BLT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##23: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop24 : ∀op2.BMC = op2 → eq_op BMC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##24: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop25 : ∀op2.BMI = op2 → eq_op BMI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##25: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop26 : ∀op2.BMS = op2 → eq_op BMS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##26: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop27 : ∀op2.BNE = op2 → eq_op BNE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##27: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop28 : ∀op2.BPL = op2 → eq_op BPL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##28: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop29 : ∀op2.BRA = op2 → eq_op BRA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##29: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop30 : ∀op2.BRCLRn = op2 → eq_op BRCLRn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##30: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop31 : ∀op2.BRN = op2 → eq_op BRN op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##31: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop32 : ∀op2.BRSETn = op2 → eq_op BRSETn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##32: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop33 : ∀op2.BSETn = op2 → eq_op BSETn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##33: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop34 : ∀op2.BSR = op2 → eq_op BSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##34: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop35 : ∀op2.CBEQA = op2 → eq_op CBEQA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##35: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop36 : ∀op2.CBEQX = op2 → eq_op CBEQX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##36: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop37 : ∀op2.CLC = op2 → eq_op CLC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##37: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop38 : ∀op2.CLI = op2 → eq_op CLI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##38: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop39 : ∀op2.CLR = op2 → eq_op CLR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##39: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop40 : ∀op2.CMP = op2 → eq_op CMP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##40: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop41 : ∀op2.COM = op2 → eq_op COM op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##41: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop42 : ∀op2.CPHX = op2 → eq_op CPHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##42: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop43 : ∀op2.CPX = op2 → eq_op CPX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##43: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop44 : ∀op2.DAA = op2 → eq_op DAA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##44: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop45 : ∀op2.DBNZ = op2 → eq_op DBNZ op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##45: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop46 : ∀op2.DEC = op2 → eq_op DEC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##46: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop47 : ∀op2.DIV = op2 → eq_op DIV op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##47: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop48 : ∀op2.EOR = op2 → eq_op EOR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##48: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop49 : ∀op2.INC = op2 → eq_op INC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##49: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop50 : ∀op2.JMP = op2 → eq_op JMP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##50: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop51 : ∀op2.JSR = op2 → eq_op JSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##51: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop52 : ∀op2.LDA = op2 → eq_op LDA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##52: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop53 : ∀op2.LDHX = op2 → eq_op LDHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##53: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop54 : ∀op2.LDX = op2 → eq_op LDX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##54: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop55 : ∀op2.LSR = op2 → eq_op LSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##55: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop56 : ∀op2.MOV = op2 → eq_op MOV op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##56: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop57 : ∀op2.MUL = op2 → eq_op MUL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##57: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop58 : ∀op2.NEG = op2 → eq_op NEG op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##58: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop59 : ∀op2.NOP = op2 → eq_op NOP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##59: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop60 : ∀op2.NSA = op2 → eq_op NSA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##60: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop61 : ∀op2.ORA = op2 → eq_op ORA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##61: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop62 : ∀op2.PSHA = op2 → eq_op PSHA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##62: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop63 : ∀op2.PSHH = op2 → eq_op PSHH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##63: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop64 : ∀op2.PSHX = op2 → eq_op PSHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##64: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop65 : ∀op2.PULA = op2 → eq_op PULA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##65: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop66 : ∀op2.PULH = op2 → eq_op PULH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##66: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop67 : ∀op2.PULX = op2 → eq_op PULX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##67: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop68 : ∀op2.ROL = op2 → eq_op ROL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##68: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop69 : ∀op2.ROR = op2 → eq_op ROR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##69: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop70 : ∀op2.RSP = op2 → eq_op RSP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##70: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop71 : ∀op2.RTI = op2 → eq_op RTI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##71: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop72 : ∀op2.RTS = op2 → eq_op RTS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##72: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop73 : ∀op2.SBC = op2 → eq_op SBC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##73: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop74 : ∀op2.SEC = op2 → eq_op SEC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##74: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop75 : ∀op2.SEI = op2 → eq_op SEI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##75: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop76 : ∀op2.SHA = op2 → eq_op SHA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##76: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop77 : ∀op2.SLA = op2 → eq_op SLA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##77: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop78 : ∀op2.STA = op2 → eq_op STA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##78: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop79 : ∀op2.STHX = op2 → eq_op STHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##79: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop80 : ∀op2.STOP = op2 → eq_op STOP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##80: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop81 : ∀op2.STX = op2 → eq_op STX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##81: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop82 : ∀op2.SUB = op2 → eq_op SUB op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##82: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop83 : ∀op2.SWI = op2 → eq_op SWI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##83: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop84 : ∀op2.TAP = op2 → eq_op TAP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##84: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop85 : ∀op2.TAX = op2 → eq_op TAX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##85: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop86 : ∀op2.TPA = op2 → eq_op TPA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##86: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop87 : ∀op2.TST = op2 → eq_op TST op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##87: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop88 : ∀op2.TSX = op2 → eq_op TSX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##88: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop89 : ∀op2.TXA = op2 → eq_op TXA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##89: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop90 : ∀op2.TXS = op2 → eq_op TXS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##90: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma eq_to_eqop91 : ∀op2.WAIT = op2 → eq_op WAIT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##91: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+
+nlemma eq_to_eqop : ∀op1,op2.op1 = op2 → eq_op op1 op2 = true.
  #op1; ncases op1;
- ##[ ##1: napply opcode_destruct1 ##| ##2: napply opcode_destruct2 ##| ##3: napply opcode_destruct3 ##| ##4: napply opcode_destruct4
- ##| ##5: napply opcode_destruct5 ##| ##6: napply opcode_destruct6 ##| ##7: napply opcode_destruct7 ##| ##8: napply opcode_destruct8
- ##| ##9: napply opcode_destruct9 ##| ##10: napply opcode_destruct10 ##| ##11: napply opcode_destruct11 ##| ##12: napply opcode_destruct12
- ##| ##13: napply opcode_destruct13 ##| ##14: napply opcode_destruct14 ##| ##15: napply opcode_destruct15 ##| ##16: napply opcode_destruct16
- ##| ##17: napply opcode_destruct17 ##| ##18: napply opcode_destruct18 ##| ##19: napply opcode_destruct19 ##| ##20: napply opcode_destruct20
- ##| ##21: napply opcode_destruct21 ##| ##22: napply opcode_destruct22 ##| ##23: napply opcode_destruct23 ##| ##24: napply opcode_destruct24
- ##| ##25: napply opcode_destruct25 ##| ##26: napply opcode_destruct26 ##| ##27: napply opcode_destruct27 ##| ##28: napply opcode_destruct28
- ##| ##29: napply opcode_destruct29 ##| ##30: napply opcode_destruct30 ##| ##31: napply opcode_destruct31 ##| ##32: napply opcode_destruct32
- ##| ##33: napply opcode_destruct33 ##| ##34: napply opcode_destruct34 ##| ##35: napply opcode_destruct35 ##| ##36: napply opcode_destruct36
- ##| ##37: napply opcode_destruct37 ##| ##38: napply opcode_destruct38 ##| ##39: napply opcode_destruct39 ##| ##40: napply opcode_destruct40
- ##| ##41: napply opcode_destruct41 ##| ##42: napply opcode_destruct42 ##| ##43: napply opcode_destruct43 ##| ##44: napply opcode_destruct44
- ##| ##45: napply opcode_destruct45 ##| ##46: napply opcode_destruct46 ##| ##47: napply opcode_destruct47 ##| ##48: napply opcode_destruct48
- ##| ##49: napply opcode_destruct49 ##| ##50: napply opcode_destruct50 ##| ##51: napply opcode_destruct51 ##| ##52: napply opcode_destruct52
- ##| ##53: napply opcode_destruct53 ##| ##54: napply opcode_destruct54 ##| ##55: napply opcode_destruct55 ##| ##56: napply opcode_destruct56
- ##| ##57: napply opcode_destruct57 ##| ##58: napply opcode_destruct58 ##| ##59: napply opcode_destruct59 ##| ##60: napply opcode_destruct60
- ##| ##61: napply opcode_destruct61 ##| ##62: napply opcode_destruct62 ##| ##63: napply opcode_destruct63 ##| ##64: napply opcode_destruct64
- ##| ##65: napply opcode_destruct65 ##| ##66: napply opcode_destruct66 ##| ##67: napply opcode_destruct67 ##| ##68: napply opcode_destruct68
- ##| ##69: napply opcode_destruct69 ##| ##70: napply opcode_destruct70 ##| ##71: napply opcode_destruct71 ##| ##72: napply opcode_destruct72
- ##| ##73: napply opcode_destruct73 ##| ##74: napply opcode_destruct74 ##| ##75: napply opcode_destruct75 ##| ##76: napply opcode_destruct76
- ##| ##77: napply opcode_destruct77 ##| ##78: napply opcode_destruct78 ##| ##79: napply opcode_destruct79 ##| ##80: napply opcode_destruct80
- ##| ##81: napply opcode_destruct81 ##| ##82: napply opcode_destruct82 ##| ##83: napply opcode_destruct83 ##| ##84: napply opcode_destruct84
- ##| ##85: napply opcode_destruct85 ##| ##86: napply opcode_destruct86 ##| ##87: napply opcode_destruct87 ##| ##88: napply opcode_destruct88
- ##| ##89: napply opcode_destruct89 ##| ##90: napply opcode_destruct90 ##| ##91: napply opcode_destruct91 ##]
+ ##[ ##1: napply eq_to_eqop1 ##| ##2: napply eq_to_eqop2 ##| ##3: napply eq_to_eqop3 ##| ##4: napply eq_to_eqop4
+ ##| ##5: napply eq_to_eqop5 ##| ##6: napply eq_to_eqop6 ##| ##7: napply eq_to_eqop7 ##| ##8: napply eq_to_eqop8
+ ##| ##9: napply eq_to_eqop9 ##| ##10: napply eq_to_eqop10 ##| ##11: napply eq_to_eqop11 ##| ##12: napply eq_to_eqop12
+ ##| ##13: napply eq_to_eqop13 ##| ##14: napply eq_to_eqop14 ##| ##15: napply eq_to_eqop15 ##| ##16: napply eq_to_eqop16
+ ##| ##17: napply eq_to_eqop17 ##| ##18: napply eq_to_eqop18 ##| ##19: napply eq_to_eqop19 ##| ##20: napply eq_to_eqop20
+ ##| ##21: napply eq_to_eqop21 ##| ##22: napply eq_to_eqop22 ##| ##23: napply eq_to_eqop23 ##| ##24: napply eq_to_eqop24
+ ##| ##25: napply eq_to_eqop25 ##| ##26: napply eq_to_eqop26 ##| ##27: napply eq_to_eqop27 ##| ##28: napply eq_to_eqop28
+ ##| ##29: napply eq_to_eqop29 ##| ##30: napply eq_to_eqop30 ##| ##31: napply eq_to_eqop31 ##| ##32: napply eq_to_eqop32
+ ##| ##33: napply eq_to_eqop33 ##| ##34: napply eq_to_eqop34 ##| ##35: napply eq_to_eqop35 ##| ##36: napply eq_to_eqop36
+ ##| ##37: napply eq_to_eqop37 ##| ##38: napply eq_to_eqop38 ##| ##39: napply eq_to_eqop39 ##| ##40: napply eq_to_eqop40
+ ##| ##41: napply eq_to_eqop41 ##| ##42: napply eq_to_eqop42 ##| ##43: napply eq_to_eqop43 ##| ##44: napply eq_to_eqop44
+ ##| ##45: napply eq_to_eqop45 ##| ##46: napply eq_to_eqop46 ##| ##47: napply eq_to_eqop47 ##| ##48: napply eq_to_eqop48
+ ##| ##49: napply eq_to_eqop49 ##| ##50: napply eq_to_eqop50 ##| ##51: napply eq_to_eqop51 ##| ##52: napply eq_to_eqop52
+ ##| ##53: napply eq_to_eqop53 ##| ##54: napply eq_to_eqop54 ##| ##55: napply eq_to_eqop55 ##| ##56: napply eq_to_eqop56
+ ##| ##57: napply eq_to_eqop57 ##| ##58: napply eq_to_eqop58 ##| ##59: napply eq_to_eqop59 ##| ##60: napply eq_to_eqop60
+ ##| ##61: napply eq_to_eqop61 ##| ##62: napply eq_to_eqop62 ##| ##63: napply eq_to_eqop63 ##| ##64: napply eq_to_eqop64
+ ##| ##65: napply eq_to_eqop65 ##| ##66: napply eq_to_eqop66 ##| ##67: napply eq_to_eqop67 ##| ##68: napply eq_to_eqop68
+ ##| ##69: napply eq_to_eqop69 ##| ##70: napply eq_to_eqop70 ##| ##71: napply eq_to_eqop71 ##| ##72: napply eq_to_eqop72
+ ##| ##73: napply eq_to_eqop73 ##| ##74: napply eq_to_eqop74 ##| ##75: napply eq_to_eqop75 ##| ##76: napply eq_to_eqop76
+ ##| ##77: napply eq_to_eqop77 ##| ##78: napply eq_to_eqop78 ##| ##79: napply eq_to_eqop79 ##| ##80: napply eq_to_eqop80
+ ##| ##81: napply eq_to_eqop81 ##| ##82: napply eq_to_eqop82 ##| ##83: napply eq_to_eqop83 ##| ##84: napply eq_to_eqop84
+ ##| ##85: napply eq_to_eqop85 ##| ##86: napply eq_to_eqop86 ##| ##87: napply eq_to_eqop87 ##| ##88: napply eq_to_eqop88
+ ##| ##89: napply eq_to_eqop89 ##| ##90: napply eq_to_eqop90 ##| ##91: napply eq_to_eqop91 ##]
 nqed.
index a14cd58019a4900af4948bed160aca3c6e9a6ba7..dca4a5d5720d9bf7e6dcb10021c219d3645bc3a7 100755 (executable)
@@ -26,359 +26,359 @@ include "freescale/opcode_base_lemmas_opcode1.ma".
 (* MATTONI BASE PER DEFINIRE LE TABELLE DELLE MCU *)
 (* ********************************************** *)
 
-nlemma symmetric_eqop1 : ∀op2.eq_op ADC op2 = eq_op op2 ADC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop2 : ∀op2.eq_op ADD op2 = eq_op op2 ADD. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop3 : ∀op2.eq_op AIS op2 = eq_op op2 AIS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop4 : ∀op2.eq_op AIX op2 = eq_op op2 AIX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop5 : ∀op2.eq_op AND op2 = eq_op op2 AND. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop6 : ∀op2.eq_op ASL op2 = eq_op op2 ASL. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop7 : ∀op2.eq_op ASR op2 = eq_op op2 ASR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop8 : ∀op2.eq_op BCC op2 = eq_op op2 BCC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop9 : ∀op2.eq_op BCLRn op2 = eq_op op2 BCLRn. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop10 : ∀op2.eq_op BCS op2 = eq_op op2 BCS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop11 : ∀op2.eq_op BEQ op2 = eq_op op2 BEQ. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop12 : ∀op2.eq_op BGE op2 = eq_op op2 BGE. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop13 : ∀op2.eq_op BGND op2 = eq_op op2 BGND. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop14 : ∀op2.eq_op BGT op2 = eq_op op2 BGT. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop15 : ∀op2.eq_op BHCC op2 = eq_op op2 BHCC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop16 : ∀op2.eq_op BHCS op2 = eq_op op2 BHCS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop17 : ∀op2.eq_op BHI op2 = eq_op op2 BHI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop18 : ∀op2.eq_op BIH op2 = eq_op op2 BIH. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop19 : ∀op2.eq_op BIL op2 = eq_op op2 BIL. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop20 : ∀op2.eq_op BIT op2 = eq_op op2 BIT. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop21 : ∀op2.eq_op BLE op2 = eq_op op2 BLE. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop22 : ∀op2.eq_op BLS op2 = eq_op op2 BLS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop23 : ∀op2.eq_op BLT op2 = eq_op op2 BLT. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop24 : ∀op2.eq_op BMC op2 = eq_op op2 BMC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop25 : ∀op2.eq_op BMI op2 = eq_op op2 BMI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop26 : ∀op2.eq_op BMS op2 = eq_op op2 BMS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop27 : ∀op2.eq_op BNE op2 = eq_op op2 BNE. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop28 : ∀op2.eq_op BPL op2 = eq_op op2 BPL. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop29 : ∀op2.eq_op BRA op2 = eq_op op2 BRA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop30 : ∀op2.eq_op BRCLRn op2 = eq_op op2 BRCLRn. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop31 : ∀op2.eq_op BRN op2 = eq_op op2 BRN. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop32 : ∀op2.eq_op BRSETn op2 = eq_op op2 BRSETn. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop33 : ∀op2.eq_op BSETn op2 = eq_op op2 BSETn. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop34 : ∀op2.eq_op BSR op2 = eq_op op2 BSR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop35 : ∀op2.eq_op CBEQA op2 = eq_op op2 CBEQA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop36 : ∀op2.eq_op CBEQX op2 = eq_op op2 CBEQX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop37 : ∀op2.eq_op CLC op2 = eq_op op2 CLC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop38 : ∀op2.eq_op CLI op2 = eq_op op2 CLI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop39 : ∀op2.eq_op CLR op2 = eq_op op2 CLR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop40 : ∀op2.eq_op CMP op2 = eq_op op2 CMP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop41 : ∀op2.eq_op COM op2 = eq_op op2 COM. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop42 : ∀op2.eq_op CPHX op2 = eq_op op2 CPHX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop43 : ∀op2.eq_op CPX op2 = eq_op op2 CPX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop44 : ∀op2.eq_op DAA op2 = eq_op op2 DAA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop45 : ∀op2.eq_op DBNZ op2 = eq_op op2 DBNZ. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop46 : ∀op2.eq_op DEC op2 = eq_op op2 DEC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop47 : ∀op2.eq_op DIV op2 = eq_op op2 DIV. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop48 : ∀op2.eq_op EOR op2 = eq_op op2 EOR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop49 : ∀op2.eq_op INC op2 = eq_op op2 INC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop50 : ∀op2.eq_op JMP op2 = eq_op op2 JMP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop51 : ∀op2.eq_op JSR op2 = eq_op op2 JSR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop52 : ∀op2.eq_op LDA op2 = eq_op op2 LDA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop53 : ∀op2.eq_op LDHX op2 = eq_op op2 LDHX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop54 : ∀op2.eq_op LDX op2 = eq_op op2 LDX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop55 : ∀op2.eq_op LSR op2 = eq_op op2 LSR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop56 : ∀op2.eq_op MOV op2 = eq_op op2 MOV. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop57 : ∀op2.eq_op MUL op2 = eq_op op2 MUL. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop58 : ∀op2.eq_op NEG op2 = eq_op op2 NEG. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop59 : ∀op2.eq_op NOP op2 = eq_op op2 NOP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop60 : ∀op2.eq_op NSA op2 = eq_op op2 NSA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop61 : ∀op2.eq_op ORA op2 = eq_op op2 ORA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop62 : ∀op2.eq_op PSHA op2 = eq_op op2 PSHA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop63 : ∀op2.eq_op PSHH op2 = eq_op op2 PSHH. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop64 : ∀op2.eq_op PSHX op2 = eq_op op2 PSHX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop65 : ∀op2.eq_op PULA op2 = eq_op op2 PULA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop66 : ∀op2.eq_op PULH op2 = eq_op op2 PULH. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop67 : ∀op2.eq_op PULX op2 = eq_op op2 PULX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop68 : ∀op2.eq_op ROL op2 = eq_op op2 ROL. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop69 : ∀op2.eq_op ROR op2 = eq_op op2 ROR. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop70 : ∀op2.eq_op RSP op2 = eq_op op2 RSP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop71 : ∀op2.eq_op RTI op2 = eq_op op2 RTI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop72 : ∀op2.eq_op RTS op2 = eq_op op2 RTS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop73 : ∀op2.eq_op SBC op2 = eq_op op2 SBC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop74 : ∀op2.eq_op SEC op2 = eq_op op2 SEC. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop75 : ∀op2.eq_op SEI op2 = eq_op op2 SEI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop76 : ∀op2.eq_op SHA op2 = eq_op op2 SHA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop77 : ∀op2.eq_op SLA op2 = eq_op op2 SLA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop78 : ∀op2.eq_op STA op2 = eq_op op2 STA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop79 : ∀op2.eq_op STHX op2 = eq_op op2 STHX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop80 : ∀op2.eq_op STOP op2 = eq_op op2 STOP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop81 : ∀op2.eq_op STX op2 = eq_op op2 STX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop82 : ∀op2.eq_op SUB op2 = eq_op op2 SUB. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop83 : ∀op2.eq_op SWI op2 = eq_op op2 SWI. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop84 : ∀op2.eq_op TAP op2 = eq_op op2 TAP. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop85 : ∀op2.eq_op TAX op2 = eq_op op2 TAX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop86 : ∀op2.eq_op TPA op2 = eq_op op2 TPA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop87 : ∀op2.eq_op TST op2 = eq_op op2 TST. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop88 : ∀op2.eq_op TSX op2 = eq_op op2 TSX. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop89 : ∀op2.eq_op TXA op2 = eq_op op2 TXA. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop90 : ∀op2.eq_op TXS op2 = eq_op op2 TXS. #op2; nnormalize; napply refl_eq.nqed.
-nlemma symmetric_eqop91 : ∀op2.eq_op WAIT op2 = eq_op op2 WAIT. #op2; nnormalize; napply refl_eq.nqed.
+nlemma decidable_op1 : ∀x:opcode.decidable (ADC = x). #x; nnormalize; nelim x; ##[ ##1: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op2 : ∀x:opcode.decidable (ADD = x). #x; nnormalize; nelim x; ##[ ##2: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op3 : ∀x:opcode.decidable (AIS = x). #x; nnormalize; nelim x; ##[ ##3: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op4 : ∀x:opcode.decidable (AIX = x). #x; nnormalize; nelim x; ##[ ##4: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op5 : ∀x:opcode.decidable (AND = x). #x; nnormalize; nelim x; ##[ ##5: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op6 : ∀x:opcode.decidable (ASL = x). #x; nnormalize; nelim x; ##[ ##6: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op7 : ∀x:opcode.decidable (ASR = x). #x; nnormalize; nelim x; ##[ ##7: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op8 : ∀x:opcode.decidable (BCC = x). #x; nnormalize; nelim x; ##[ ##8: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op9 : ∀x:opcode.decidable (BCLRn = x). #x; nnormalize; nelim x; ##[ ##9: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op10 : ∀x:opcode.decidable (BCS = x). #x; nnormalize; nelim x; ##[ ##10: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op11 : ∀x:opcode.decidable (BEQ = x). #x; nnormalize; nelim x; ##[ ##11: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op12 : ∀x:opcode.decidable (BGE = x). #x; nnormalize; nelim x; ##[ ##12: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op13 : ∀x:opcode.decidable (BGND = x). #x; nnormalize; nelim x; ##[ ##13: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op14 : ∀x:opcode.decidable (BGT = x). #x; nnormalize; nelim x; ##[ ##14: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op15 : ∀x:opcode.decidable (BHCC = x). #x; nnormalize; nelim x; ##[ ##15: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op16 : ∀x:opcode.decidable (BHCS = x). #x; nnormalize; nelim x; ##[ ##16: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op17 : ∀x:opcode.decidable (BHI = x). #x; nnormalize; nelim x; ##[ ##17: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op18 : ∀x:opcode.decidable (BIH = x). #x; nnormalize; nelim x; ##[ ##18: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op19 : ∀x:opcode.decidable (BIL = x). #x; nnormalize; nelim x; ##[ ##19: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op20 : ∀x:opcode.decidable (BIT = x). #x; nnormalize; nelim x; ##[ ##20: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op21 : ∀x:opcode.decidable (BLE = x). #x; nnormalize; nelim x; ##[ ##21: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op22 : ∀x:opcode.decidable (BLS = x). #x; nnormalize; nelim x; ##[ ##22: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op23 : ∀x:opcode.decidable (BLT = x). #x; nnormalize; nelim x; ##[ ##23: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op24 : ∀x:opcode.decidable (BMC = x). #x; nnormalize; nelim x; ##[ ##24: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op25 : ∀x:opcode.decidable (BMI = x). #x; nnormalize; nelim x; ##[ ##25: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op26 : ∀x:opcode.decidable (BMS = x). #x; nnormalize; nelim x; ##[ ##26: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op27 : ∀x:opcode.decidable (BNE = x). #x; nnormalize; nelim x; ##[ ##27: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op28 : ∀x:opcode.decidable (BPL = x). #x; nnormalize; nelim x; ##[ ##28: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op29 : ∀x:opcode.decidable (BRA = x). #x; nnormalize; nelim x; ##[ ##29: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op30 : ∀x:opcode.decidable (BRCLRn = x). #x; nnormalize; nelim x; ##[ ##30: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op31 : ∀x:opcode.decidable (BRN = x). #x; nnormalize; nelim x; ##[ ##31: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op32 : ∀x:opcode.decidable (BRSETn = x). #x; nnormalize; nelim x; ##[ ##32: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op33 : ∀x:opcode.decidable (BSETn = x). #x; nnormalize; nelim x; ##[ ##33: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op34 : ∀x:opcode.decidable (BSR = x). #x; nnormalize; nelim x; ##[ ##34: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op35 : ∀x:opcode.decidable (CBEQA = x). #x; nnormalize; nelim x; ##[ ##35: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op36 : ∀x:opcode.decidable (CBEQX = x). #x; nnormalize; nelim x; ##[ ##36: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op37 : ∀x:opcode.decidable (CLC = x). #x; nnormalize; nelim x; ##[ ##37: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op38 : ∀x:opcode.decidable (CLI = x). #x; nnormalize; nelim x; ##[ ##38: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op39 : ∀x:opcode.decidable (CLR = x). #x; nnormalize; nelim x; ##[ ##39: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op40 : ∀x:opcode.decidable (CMP = x). #x; nnormalize; nelim x; ##[ ##40: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op41 : ∀x:opcode.decidable (COM = x). #x; nnormalize; nelim x; ##[ ##41: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op42 : ∀x:opcode.decidable (CPHX = x). #x; nnormalize; nelim x; ##[ ##42: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op43 : ∀x:opcode.decidable (CPX = x). #x; nnormalize; nelim x; ##[ ##43: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op44 : ∀x:opcode.decidable (DAA = x). #x; nnormalize; nelim x; ##[ ##44: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op45 : ∀x:opcode.decidable (DBNZ = x). #x; nnormalize; nelim x; ##[ ##45: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op46 : ∀x:opcode.decidable (DEC = x). #x; nnormalize; nelim x; ##[ ##46: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op47 : ∀x:opcode.decidable (DIV = x). #x; nnormalize; nelim x; ##[ ##47: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op48 : ∀x:opcode.decidable (EOR = x). #x; nnormalize; nelim x; ##[ ##48: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op49 : ∀x:opcode.decidable (INC = x). #x; nnormalize; nelim x; ##[ ##49: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op50 : ∀x:opcode.decidable (JMP = x). #x; nnormalize; nelim x; ##[ ##50: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op51 : ∀x:opcode.decidable (JSR = x). #x; nnormalize; nelim x; ##[ ##51: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op52 : ∀x:opcode.decidable (LDA = x). #x; nnormalize; nelim x; ##[ ##52: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op53 : ∀x:opcode.decidable (LDHX = x). #x; nnormalize; nelim x; ##[ ##53: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op54 : ∀x:opcode.decidable (LDX = x). #x; nnormalize; nelim x; ##[ ##54: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op55 : ∀x:opcode.decidable (LSR = x). #x; nnormalize; nelim x; ##[ ##55: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op56 : ∀x:opcode.decidable (MOV = x). #x; nnormalize; nelim x; ##[ ##56: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op57 : ∀x:opcode.decidable (MUL = x). #x; nnormalize; nelim x; ##[ ##57: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op58 : ∀x:opcode.decidable (NEG = x). #x; nnormalize; nelim x; ##[ ##58: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op59 : ∀x:opcode.decidable (NOP = x). #x; nnormalize; nelim x; ##[ ##59: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op60 : ∀x:opcode.decidable (NSA = x). #x; nnormalize; nelim x; ##[ ##60: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op61 : ∀x:opcode.decidable (ORA = x). #x; nnormalize; nelim x; ##[ ##61: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op62 : ∀x:opcode.decidable (PSHA = x). #x; nnormalize; nelim x; ##[ ##62: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op63 : ∀x:opcode.decidable (PSHH = x). #x; nnormalize; nelim x; ##[ ##63: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op64 : ∀x:opcode.decidable (PSHX = x). #x; nnormalize; nelim x; ##[ ##64: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op65 : ∀x:opcode.decidable (PULA = x). #x; nnormalize; nelim x; ##[ ##65: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op66 : ∀x:opcode.decidable (PULH = x). #x; nnormalize; nelim x; ##[ ##66: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op67 : ∀x:opcode.decidable (PULX = x). #x; nnormalize; nelim x; ##[ ##67: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op68 : ∀x:opcode.decidable (ROL = x). #x; nnormalize; nelim x; ##[ ##68: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op69 : ∀x:opcode.decidable (ROR = x). #x; nnormalize; nelim x; ##[ ##69: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op70 : ∀x:opcode.decidable (RSP = x). #x; nnormalize; nelim x; ##[ ##70: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op71 : ∀x:opcode.decidable (RTI = x). #x; nnormalize; nelim x; ##[ ##71: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op72 : ∀x:opcode.decidable (RTS = x). #x; nnormalize; nelim x; ##[ ##72: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op73 : ∀x:opcode.decidable (SBC = x). #x; nnormalize; nelim x; ##[ ##73: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op74 : ∀x:opcode.decidable (SEC = x). #x; nnormalize; nelim x; ##[ ##74: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op75 : ∀x:opcode.decidable (SEI = x). #x; nnormalize; nelim x; ##[ ##75: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op76 : ∀x:opcode.decidable (SHA = x). #x; nnormalize; nelim x; ##[ ##76: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op77 : ∀x:opcode.decidable (SLA = x). #x; nnormalize; nelim x; ##[ ##77: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op78 : ∀x:opcode.decidable (STA = x). #x; nnormalize; nelim x; ##[ ##78: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op79 : ∀x:opcode.decidable (STHX = x). #x; nnormalize; nelim x; ##[ ##79: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op80 : ∀x:opcode.decidable (STOP = x). #x; nnormalize; nelim x; ##[ ##80: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op81 : ∀x:opcode.decidable (STX = x). #x; nnormalize; nelim x; ##[ ##81: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op82 : ∀x:opcode.decidable (SUB = x). #x; nnormalize; nelim x; ##[ ##82: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op83 : ∀x:opcode.decidable (SWI = x). #x; nnormalize; nelim x; ##[ ##83: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op84 : ∀x:opcode.decidable (TAP = x). #x; nnormalize; nelim x; ##[ ##84: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op85 : ∀x:opcode.decidable (TAX = x). #x; nnormalize; nelim x; ##[ ##85: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op86 : ∀x:opcode.decidable (TPA = x). #x; nnormalize; nelim x; ##[ ##86: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op87 : ∀x:opcode.decidable (TST = x). #x; nnormalize; nelim x; ##[ ##87: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op88 : ∀x:opcode.decidable (TSX = x). #x; nnormalize; nelim x; ##[ ##88: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op89 : ∀x:opcode.decidable (TXA = x). #x; nnormalize; nelim x; ##[ ##89: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op90 : ∀x:opcode.decidable (TXS = x). #x; nnormalize; nelim x; ##[ ##90: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
+nlemma decidable_op91 : ∀x:opcode.decidable (WAIT = x). #x; nnormalize; nelim x; ##[ ##91: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); #H; napply (opcode_destruct … H) ##] nqed.
 
-nlemma symmetric_eqop : symmetricT opcode bool eq_op.
+nlemma decidable_op : ∀x,y:opcode.decidable (x = y).
  #op1; ncases op1;
- ##[ ##1: napply symmetric_eqop1 ##| ##2: napply symmetric_eqop2 ##| ##3: napply symmetric_eqop3 ##| ##4: napply symmetric_eqop4
- ##| ##5: napply symmetric_eqop5 ##| ##6: napply symmetric_eqop6 ##| ##7: napply symmetric_eqop7 ##| ##8: napply symmetric_eqop8
- ##| ##9: napply symmetric_eqop9 ##| ##10: napply symmetric_eqop10 ##| ##11: napply symmetric_eqop11 ##| ##12: napply symmetric_eqop12
- ##| ##13: napply symmetric_eqop13 ##| ##14: napply symmetric_eqop14 ##| ##15: napply symmetric_eqop15 ##| ##16: napply symmetric_eqop16
- ##| ##17: napply symmetric_eqop17 ##| ##18: napply symmetric_eqop18 ##| ##19: napply symmetric_eqop19 ##| ##20: napply symmetric_eqop20
- ##| ##21: napply symmetric_eqop21 ##| ##22: napply symmetric_eqop22 ##| ##23: napply symmetric_eqop23 ##| ##24: napply symmetric_eqop24
- ##| ##25: napply symmetric_eqop25 ##| ##26: napply symmetric_eqop26 ##| ##27: napply symmetric_eqop27 ##| ##28: napply symmetric_eqop28
- ##| ##29: napply symmetric_eqop29 ##| ##30: napply symmetric_eqop30 ##| ##31: napply symmetric_eqop31 ##| ##32: napply symmetric_eqop32
- ##| ##33: napply symmetric_eqop33 ##| ##34: napply symmetric_eqop34 ##| ##35: napply symmetric_eqop35 ##| ##36: napply symmetric_eqop36
- ##| ##37: napply symmetric_eqop37 ##| ##38: napply symmetric_eqop38 ##| ##39: napply symmetric_eqop39 ##| ##40: napply symmetric_eqop40
- ##| ##41: napply symmetric_eqop41 ##| ##42: napply symmetric_eqop42 ##| ##43: napply symmetric_eqop43 ##| ##44: napply symmetric_eqop44
- ##| ##45: napply symmetric_eqop45 ##| ##46: napply symmetric_eqop46 ##| ##47: napply symmetric_eqop47 ##| ##48: napply symmetric_eqop48
- ##| ##49: napply symmetric_eqop49 ##| ##50: napply symmetric_eqop50 ##| ##51: napply symmetric_eqop51 ##| ##52: napply symmetric_eqop52
- ##| ##53: napply symmetric_eqop53 ##| ##54: napply symmetric_eqop54 ##| ##55: napply symmetric_eqop55 ##| ##56: napply symmetric_eqop56
- ##| ##57: napply symmetric_eqop57 ##| ##58: napply symmetric_eqop58 ##| ##59: napply symmetric_eqop59 ##| ##60: napply symmetric_eqop60
- ##| ##61: napply symmetric_eqop61 ##| ##62: napply symmetric_eqop62 ##| ##63: napply symmetric_eqop63 ##| ##64: napply symmetric_eqop64
- ##| ##65: napply symmetric_eqop65 ##| ##66: napply symmetric_eqop66 ##| ##67: napply symmetric_eqop67 ##| ##68: napply symmetric_eqop68
- ##| ##69: napply symmetric_eqop69 ##| ##70: napply symmetric_eqop70 ##| ##71: napply symmetric_eqop71 ##| ##72: napply symmetric_eqop72
- ##| ##73: napply symmetric_eqop73 ##| ##74: napply symmetric_eqop74 ##| ##75: napply symmetric_eqop75 ##| ##76: napply symmetric_eqop76
- ##| ##77: napply symmetric_eqop77 ##| ##78: napply symmetric_eqop78 ##| ##79: napply symmetric_eqop79 ##| ##80: napply symmetric_eqop80
- ##| ##81: napply symmetric_eqop81 ##| ##82: napply symmetric_eqop82 ##| ##83: napply symmetric_eqop83 ##| ##84: napply symmetric_eqop84
- ##| ##85: napply symmetric_eqop85 ##| ##86: napply symmetric_eqop86 ##| ##87: napply symmetric_eqop87 ##| ##88: napply symmetric_eqop88
- ##| ##89: napply symmetric_eqop89 ##| ##90: napply symmetric_eqop90 ##| ##91: napply symmetric_eqop91 ##]
+ ##[ ##1: napply decidable_op1 ##| ##2: napply decidable_op2 ##| ##3: napply decidable_op3 ##| ##4: napply decidable_op4
+ ##| ##5: napply decidable_op5 ##| ##6: napply decidable_op6 ##| ##7: napply decidable_op7 ##| ##8: napply decidable_op8
+ ##| ##9: napply decidable_op9 ##| ##10: napply decidable_op10 ##| ##11: napply decidable_op11 ##| ##12: napply decidable_op12
+ ##| ##13: napply decidable_op13 ##| ##14: napply decidable_op14 ##| ##15: napply decidable_op15 ##| ##16: napply decidable_op16
+ ##| ##17: napply decidable_op17 ##| ##18: napply decidable_op18 ##| ##19: napply decidable_op19 ##| ##20: napply decidable_op20
+ ##| ##21: napply decidable_op21 ##| ##22: napply decidable_op22 ##| ##23: napply decidable_op23 ##| ##24: napply decidable_op24
+ ##| ##25: napply decidable_op25 ##| ##26: napply decidable_op26 ##| ##27: napply decidable_op27 ##| ##28: napply decidable_op28
+ ##| ##29: napply decidable_op29 ##| ##30: napply decidable_op30 ##| ##31: napply decidable_op31 ##| ##32: napply decidable_op32
+ ##| ##33: napply decidable_op33 ##| ##34: napply decidable_op34 ##| ##35: napply decidable_op35 ##| ##36: napply decidable_op36
+ ##| ##37: napply decidable_op37 ##| ##38: napply decidable_op38 ##| ##39: napply decidable_op39 ##| ##40: napply decidable_op40
+ ##| ##41: napply decidable_op41 ##| ##42: napply decidable_op42 ##| ##43: napply decidable_op43 ##| ##44: napply decidable_op44
+ ##| ##45: napply decidable_op45 ##| ##46: napply decidable_op46 ##| ##47: napply decidable_op47 ##| ##48: napply decidable_op48
+ ##| ##49: napply decidable_op49 ##| ##50: napply decidable_op50 ##| ##51: napply decidable_op51 ##| ##52: napply decidable_op52
+ ##| ##53: napply decidable_op53 ##| ##54: napply decidable_op54 ##| ##55: napply decidable_op55 ##| ##56: napply decidable_op56
+ ##| ##57: napply decidable_op57 ##| ##58: napply decidable_op58 ##| ##59: napply decidable_op59 ##| ##60: napply decidable_op60
+ ##| ##61: napply decidable_op61 ##| ##62: napply decidable_op62 ##| ##63: napply decidable_op63 ##| ##64: napply decidable_op64
+ ##| ##65: napply decidable_op65 ##| ##66: napply decidable_op66 ##| ##67: napply decidable_op67 ##| ##68: napply decidable_op68
+ ##| ##69: napply decidable_op69 ##| ##70: napply decidable_op70 ##| ##71: napply decidable_op71 ##| ##72: napply decidable_op72
+ ##| ##73: napply decidable_op73 ##| ##74: napply decidable_op74 ##| ##75: napply decidable_op75 ##| ##76: napply decidable_op76
+ ##| ##77: napply decidable_op77 ##| ##78: napply decidable_op78 ##| ##79: napply decidable_op79 ##| ##80: napply decidable_op80
+ ##| ##81: napply decidable_op81 ##| ##82: napply decidable_op82 ##| ##83: napply decidable_op83 ##| ##84: napply decidable_op84
+ ##| ##85: napply decidable_op85 ##| ##86: napply decidable_op86 ##| ##87: napply decidable_op87 ##| ##88: napply decidable_op88
+ ##| ##89: napply decidable_op89 ##| ##90: napply decidable_op90 ##| ##91: napply decidable_op91 ##]
 nqed.
 
-nlemma eqop_to_eq1 : ∀op2.eq_op ADC op2 = true → ADC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##1: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq2 : ∀op2.eq_op ADD op2 = true → ADD = op2. #op2; ncases op2; nnormalize; #H; ##[ ##2: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq3 : ∀op2.eq_op AIS op2 = true → AIS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##3: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq4 : ∀op2.eq_op AIX op2 = true → AIX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##4: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq5 : ∀op2.eq_op AND op2 = true → AND = op2. #op2; ncases op2; nnormalize; #H; ##[ ##5: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq6 : ∀op2.eq_op ASL op2 = true → ASL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##6: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq7 : ∀op2.eq_op ASR op2 = true → ASR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##7: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq8 : ∀op2.eq_op BCC op2 = true → BCC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##8: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq9 : ∀op2.eq_op BCLRn op2 = true → BCLRn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##9: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq10 : ∀op2.eq_op BCS op2 = true → BCS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##10: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq11 : ∀op2.eq_op BEQ op2 = true → BEQ = op2. #op2; ncases op2; nnormalize; #H; ##[ ##11: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq12 : ∀op2.eq_op BGE op2 = true → BGE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##12: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq13 : ∀op2.eq_op BGND op2 = true → BGND = op2. #op2; ncases op2; nnormalize; #H; ##[ ##13: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq14 : ∀op2.eq_op BGT op2 = true → BGT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##14: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq15 : ∀op2.eq_op BHCC op2 = true → BHCC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##15: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq16 : ∀op2.eq_op BHCS op2 = true → BHCS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##16: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq17 : ∀op2.eq_op BHI op2 = true → BHI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##17: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq18 : ∀op2.eq_op BIH op2 = true → BIH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##18: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq19 : ∀op2.eq_op BIL op2 = true → BIL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##19: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq20 : ∀op2.eq_op BIT op2 = true → BIT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##20: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq21 : ∀op2.eq_op BLE op2 = true → BLE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##21: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq22 : ∀op2.eq_op BLS op2 = true → BLS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##22: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq23 : ∀op2.eq_op BLT op2 = true → BLT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##23: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq24 : ∀op2.eq_op BMC op2 = true → BMC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##24: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq25 : ∀op2.eq_op BMI op2 = true → BMI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##25: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq26 : ∀op2.eq_op BMS op2 = true → BMS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##26: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq27 : ∀op2.eq_op BNE op2 = true → BNE = op2. #op2; ncases op2; nnormalize; #H; ##[ ##27: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq28 : ∀op2.eq_op BPL op2 = true → BPL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##28: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq29 : ∀op2.eq_op BRA op2 = true → BRA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##29: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq30 : ∀op2.eq_op BRCLRn op2 = true → BRCLRn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##30: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq31 : ∀op2.eq_op BRN op2 = true → BRN = op2. #op2; ncases op2; nnormalize; #H; ##[ ##31: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq32 : ∀op2.eq_op BRSETn op2 = true → BRSETn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##32: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq33 : ∀op2.eq_op BSETn op2 = true → BSETn = op2. #op2; ncases op2; nnormalize; #H; ##[ ##33: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq34 : ∀op2.eq_op BSR op2 = true → BSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##34: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq35 : ∀op2.eq_op CBEQA op2 = true → CBEQA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##35: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq36 : ∀op2.eq_op CBEQX op2 = true → CBEQX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##36: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq37 : ∀op2.eq_op CLC op2 = true → CLC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##37: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq38 : ∀op2.eq_op CLI op2 = true → CLI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##38: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq39 : ∀op2.eq_op CLR op2 = true → CLR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##39: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq40 : ∀op2.eq_op CMP op2 = true → CMP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##40: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq41 : ∀op2.eq_op COM op2 = true → COM = op2. #op2; ncases op2; nnormalize; #H; ##[ ##41: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq42 : ∀op2.eq_op CPHX op2 = true → CPHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##42: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq43 : ∀op2.eq_op CPX op2 = true → CPX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##43: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq44 : ∀op2.eq_op DAA op2 = true → DAA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##44: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq45 : ∀op2.eq_op DBNZ op2 = true → DBNZ = op2. #op2; ncases op2; nnormalize; #H; ##[ ##45: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq46 : ∀op2.eq_op DEC op2 = true → DEC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##46: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq47 : ∀op2.eq_op DIV op2 = true → DIV = op2. #op2; ncases op2; nnormalize; #H; ##[ ##47: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq48 : ∀op2.eq_op EOR op2 = true → EOR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##48: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq49 : ∀op2.eq_op INC op2 = true → INC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##49: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq50 : ∀op2.eq_op JMP op2 = true → JMP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##50: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq51 : ∀op2.eq_op JSR op2 = true → JSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##51: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq52 : ∀op2.eq_op LDA op2 = true → LDA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##52: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq53 : ∀op2.eq_op LDHX op2 = true → LDHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##53: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq54 : ∀op2.eq_op LDX op2 = true → LDX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##54: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq55 : ∀op2.eq_op LSR op2 = true → LSR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##55: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq56 : ∀op2.eq_op MOV op2 = true → MOV = op2. #op2; ncases op2; nnormalize; #H; ##[ ##56: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq57 : ∀op2.eq_op MUL op2 = true → MUL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##57: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq58 : ∀op2.eq_op NEG op2 = true → NEG = op2. #op2; ncases op2; nnormalize; #H; ##[ ##58: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq59 : ∀op2.eq_op NOP op2 = true → NOP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##59: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq60 : ∀op2.eq_op NSA op2 = true → NSA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##60: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq61 : ∀op2.eq_op ORA op2 = true → ORA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##61: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq62 : ∀op2.eq_op PSHA op2 = true → PSHA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##62: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq63 : ∀op2.eq_op PSHH op2 = true → PSHH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##63: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq64 : ∀op2.eq_op PSHX op2 = true → PSHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##64: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq65 : ∀op2.eq_op PULA op2 = true → PULA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##65: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq66 : ∀op2.eq_op PULH op2 = true → PULH = op2. #op2; ncases op2; nnormalize; #H; ##[ ##66: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq67 : ∀op2.eq_op PULX op2 = true → PULX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##67: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq68 : ∀op2.eq_op ROL op2 = true → ROL = op2. #op2; ncases op2; nnormalize; #H; ##[ ##68: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq69 : ∀op2.eq_op ROR op2 = true → ROR = op2. #op2; ncases op2; nnormalize; #H; ##[ ##69: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq70 : ∀op2.eq_op RSP op2 = true → RSP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##70: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq71 : ∀op2.eq_op RTI op2 = true → RTI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##71: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq72 : ∀op2.eq_op RTS op2 = true → RTS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##72: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq73 : ∀op2.eq_op SBC op2 = true → SBC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##73: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq74 : ∀op2.eq_op SEC op2 = true → SEC = op2. #op2; ncases op2; nnormalize; #H; ##[ ##74: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq75 : ∀op2.eq_op SEI op2 = true → SEI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##75: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq76 : ∀op2.eq_op SHA op2 = true → SHA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##76: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq77 : ∀op2.eq_op SLA op2 = true → SLA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##77: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq78 : ∀op2.eq_op STA op2 = true → STA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##78: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq79 : ∀op2.eq_op STHX op2 = true → STHX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##79: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq80 : ∀op2.eq_op STOP op2 = true → STOP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##80: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq81 : ∀op2.eq_op STX op2 = true → STX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##81: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq82 : ∀op2.eq_op SUB op2 = true → SUB = op2. #op2; ncases op2; nnormalize; #H; ##[ ##82: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq83 : ∀op2.eq_op SWI op2 = true → SWI = op2. #op2; ncases op2; nnormalize; #H; ##[ ##83: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq84 : ∀op2.eq_op TAP op2 = true → TAP = op2. #op2; ncases op2; nnormalize; #H; ##[ ##84: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq85 : ∀op2.eq_op TAX op2 = true → TAX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##85: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq86 : ∀op2.eq_op TPA op2 = true → TPA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##86: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq87 : ∀op2.eq_op TST op2 = true → TST = op2. #op2; ncases op2; nnormalize; #H; ##[ ##87: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq88 : ∀op2.eq_op TSX op2 = true → TSX = op2. #op2; ncases op2; nnormalize; #H; ##[ ##88: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq89 : ∀op2.eq_op TXA op2 = true → TXA = op2. #op2; ncases op2; nnormalize; #H; ##[ ##89: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq90 : ∀op2.eq_op TXS op2 = true → TXS = op2. #op2; ncases op2; nnormalize; #H; ##[ ##90: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
-nlemma eqop_to_eq91 : ∀op2.eq_op WAIT op2 = true → WAIT = op2. #op2; ncases op2; nnormalize; #H; ##[ ##91: napply refl_eq ##| ##*: napply (bool_destruct … H) ##]nqed.
+nlemma neqop_to_neq1 : ∀op2.eq_op ADC op2 = false → ADC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##1: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq2 : ∀op2.eq_op ADD op2 = false → ADD ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##2: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq3 : ∀op2.eq_op AIS op2 = false → AIS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##3: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq4 : ∀op2.eq_op AIX op2 = false → AIX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##4: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq5 : ∀op2.eq_op AND op2 = false → AND ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##5: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq6 : ∀op2.eq_op ASL op2 = false → ASL ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##6: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq7 : ∀op2.eq_op ASR op2 = false → ASR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##7: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq8 : ∀op2.eq_op BCC op2 = false → BCC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##8: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq9 : ∀op2.eq_op BCLRn op2 = false → BCLRn ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##9: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq10 : ∀op2.eq_op BCS op2 = false → BCS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##10: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq11 : ∀op2.eq_op BEQ op2 = false → BEQ ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##11: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq12 : ∀op2.eq_op BGE op2 = false → BGE ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##12: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq13 : ∀op2.eq_op BGND op2 = false → BGND ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##13: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq14 : ∀op2.eq_op BGT op2 = false → BGT ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##14: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq15 : ∀op2.eq_op BHCC op2 = false → BHCC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##15: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq16 : ∀op2.eq_op BHCS op2 = false → BHCS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##16: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq17 : ∀op2.eq_op BHI op2 = false → BHI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##17: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq18 : ∀op2.eq_op BIH op2 = false → BIH ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##18: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq19 : ∀op2.eq_op BIL op2 = false → BIL ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##19: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq20 : ∀op2.eq_op BIT op2 = false → BIT ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##20: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq21 : ∀op2.eq_op BLE op2 = false → BLE ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##21: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq22 : ∀op2.eq_op BLS op2 = false → BLS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##22: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq23 : ∀op2.eq_op BLT op2 = false → BLT ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##23: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq24 : ∀op2.eq_op BMC op2 = false → BMC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##24: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq25 : ∀op2.eq_op BMI op2 = false → BMI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##25: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq26 : ∀op2.eq_op BMS op2 = false → BMS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##26: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq27 : ∀op2.eq_op BNE op2 = false → BNE ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##27: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq28 : ∀op2.eq_op BPL op2 = false → BPL ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##28: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq29 : ∀op2.eq_op BRA op2 = false → BRA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##29: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq30 : ∀op2.eq_op BRCLRn op2 = false → BRCLRn ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##30: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq31 : ∀op2.eq_op BRN op2 = false → BRN ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##31: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq32 : ∀op2.eq_op BRSETn op2 = false → BRSETn ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##32: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq33 : ∀op2.eq_op BSETn op2 = false → BSETn ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##33: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq34 : ∀op2.eq_op BSR op2 = false → BSR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##34: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq35 : ∀op2.eq_op CBEQA op2 = false → CBEQA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##35: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq36 : ∀op2.eq_op CBEQX op2 = false → CBEQX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##36: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq37 : ∀op2.eq_op CLC op2 = false → CLC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##37: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq38 : ∀op2.eq_op CLI op2 = false → CLI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##38: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq39 : ∀op2.eq_op CLR op2 = false → CLR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##39: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq40 : ∀op2.eq_op CMP op2 = false → CMP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##40: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq41 : ∀op2.eq_op COM op2 = false → COM ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##41: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq42 : ∀op2.eq_op CPHX op2 = false → CPHX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##42: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq43 : ∀op2.eq_op CPX op2 = false → CPX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##43: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq44 : ∀op2.eq_op DAA op2 = false → DAA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##44: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq45 : ∀op2.eq_op DBNZ op2 = false → DBNZ ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##45: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq46 : ∀op2.eq_op DEC op2 = false → DEC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##46: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq47 : ∀op2.eq_op DIV op2 = false → DIV ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##47: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq48 : ∀op2.eq_op EOR op2 = false → EOR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##48: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq49 : ∀op2.eq_op INC op2 = false → INC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##49: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq50 : ∀op2.eq_op JMP op2 = false → JMP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##50: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq51 : ∀op2.eq_op JSR op2 = false → JSR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##51: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq52 : ∀op2.eq_op LDA op2 = false → LDA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##52: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq53 : ∀op2.eq_op LDHX op2 = false → LDHX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##53: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq54 : ∀op2.eq_op LDX op2 = false → LDX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##54: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq55 : ∀op2.eq_op LSR op2 = false → LSR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##55: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq56 : ∀op2.eq_op MOV op2 = false → MOV ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##56: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq57 : ∀op2.eq_op MUL op2 = false → MUL ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##57: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq58 : ∀op2.eq_op NEG op2 = false → NEG ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##58: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq59 : ∀op2.eq_op NOP op2 = false → NOP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##59: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq60 : ∀op2.eq_op NSA op2 = false → NSA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##60: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq61 : ∀op2.eq_op ORA op2 = false → ORA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##61: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq62 : ∀op2.eq_op PSHA op2 = false → PSHA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##62: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq63 : ∀op2.eq_op PSHH op2 = false → PSHH ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##63: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq64 : ∀op2.eq_op PSHX op2 = false → PSHX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##64: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq65 : ∀op2.eq_op PULA op2 = false → PULA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##65: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq66 : ∀op2.eq_op PULH op2 = false → PULH ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##66: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq67 : ∀op2.eq_op PULX op2 = false → PULX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##67: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq68 : ∀op2.eq_op ROL op2 = false → ROL ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##68: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq69 : ∀op2.eq_op ROR op2 = false → ROR ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##69: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq70 : ∀op2.eq_op RSP op2 = false → RSP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##70: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq71 : ∀op2.eq_op RTI op2 = false → RTI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##71: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq72 : ∀op2.eq_op RTS op2 = false → RTS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##72: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq73 : ∀op2.eq_op SBC op2 = false → SBC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##73: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq74 : ∀op2.eq_op SEC op2 = false → SEC ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##74: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq75 : ∀op2.eq_op SEI op2 = false → SEI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##75: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq76 : ∀op2.eq_op SHA op2 = false → SHA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##76: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq77 : ∀op2.eq_op SLA op2 = false → SLA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##77: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq78 : ∀op2.eq_op STA op2 = false → STA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##78: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq79 : ∀op2.eq_op STHX op2 = false → STHX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##79: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq80 : ∀op2.eq_op STOP op2 = false → STOP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##80: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq81 : ∀op2.eq_op STX op2 = false → STX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##81: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq82 : ∀op2.eq_op SUB op2 = false → SUB ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##82: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq83 : ∀op2.eq_op SWI op2 = false → SWI ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##83: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq84 : ∀op2.eq_op TAP op2 = false → TAP ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##84: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq85 : ∀op2.eq_op TAX op2 = false → TAX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##85: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq86 : ∀op2.eq_op TPA op2 = false → TPA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##86: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq87 : ∀op2.eq_op TST op2 = false → TST ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##87: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq88 : ∀op2.eq_op TSX op2 = false → TSX ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##88: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq89 : ∀op2.eq_op TXA op2 = false → TXA ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##89: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq90 : ∀op2.eq_op TXS op2 = false → TXS ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##90: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
+nlemma neqop_to_neq91 : ∀op2.eq_op WAIT op2 = false → WAIT ≠ op2. #op2; ncases op2; nnormalize; #H; ##[ ##91: napply  (bool_destruct … H) ##| ##*: #H1; napply False_ind; napply (opcode_destruct … H1) ##] nqed.
 
-nlemma eqop_to_eq : ∀op1,op2.eq_op op1 op2 = true → op1 = op2.
+nlemma neqop_to_neq : ∀op1,op2.eq_op op1 op2 = false → op1 ≠ op2.
  #op1; ncases op1;
- ##[ ##1: napply eqop_to_eq1 ##| ##2: napply eqop_to_eq2 ##| ##3: napply eqop_to_eq3 ##| ##4: napply eqop_to_eq4
- ##| ##5: napply eqop_to_eq5 ##| ##6: napply eqop_to_eq6 ##| ##7: napply eqop_to_eq7 ##| ##8: napply eqop_to_eq8
- ##| ##9: napply eqop_to_eq9 ##| ##10: napply eqop_to_eq10 ##| ##11: napply eqop_to_eq11 ##| ##12: napply eqop_to_eq12
- ##| ##13: napply eqop_to_eq13 ##| ##14: napply eqop_to_eq14 ##| ##15: napply eqop_to_eq15 ##| ##16: napply eqop_to_eq16
- ##| ##17: napply eqop_to_eq17 ##| ##18: napply eqop_to_eq18 ##| ##19: napply eqop_to_eq19 ##| ##20: napply eqop_to_eq20
- ##| ##21: napply eqop_to_eq21 ##| ##22: napply eqop_to_eq22 ##| ##23: napply eqop_to_eq23 ##| ##24: napply eqop_to_eq24
- ##| ##25: napply eqop_to_eq25 ##| ##26: napply eqop_to_eq26 ##| ##27: napply eqop_to_eq27 ##| ##28: napply eqop_to_eq28
- ##| ##29: napply eqop_to_eq29 ##| ##30: napply eqop_to_eq30 ##| ##31: napply eqop_to_eq31 ##| ##32: napply eqop_to_eq32
- ##| ##33: napply eqop_to_eq33 ##| ##34: napply eqop_to_eq34 ##| ##35: napply eqop_to_eq35 ##| ##36: napply eqop_to_eq36
- ##| ##37: napply eqop_to_eq37 ##| ##38: napply eqop_to_eq38 ##| ##39: napply eqop_to_eq39 ##| ##40: napply eqop_to_eq40
- ##| ##41: napply eqop_to_eq41 ##| ##42: napply eqop_to_eq42 ##| ##43: napply eqop_to_eq43 ##| ##44: napply eqop_to_eq44
- ##| ##45: napply eqop_to_eq45 ##| ##46: napply eqop_to_eq46 ##| ##47: napply eqop_to_eq47 ##| ##48: napply eqop_to_eq48
- ##| ##49: napply eqop_to_eq49 ##| ##50: napply eqop_to_eq50 ##| ##51: napply eqop_to_eq51 ##| ##52: napply eqop_to_eq52
- ##| ##53: napply eqop_to_eq53 ##| ##54: napply eqop_to_eq54 ##| ##55: napply eqop_to_eq55 ##| ##56: napply eqop_to_eq56
- ##| ##57: napply eqop_to_eq57 ##| ##58: napply eqop_to_eq58 ##| ##59: napply eqop_to_eq59 ##| ##60: napply eqop_to_eq60
- ##| ##61: napply eqop_to_eq61 ##| ##62: napply eqop_to_eq62 ##| ##63: napply eqop_to_eq63 ##| ##64: napply eqop_to_eq64
- ##| ##65: napply eqop_to_eq65 ##| ##66: napply eqop_to_eq66 ##| ##67: napply eqop_to_eq67 ##| ##68: napply eqop_to_eq68
- ##| ##69: napply eqop_to_eq69 ##| ##70: napply eqop_to_eq70 ##| ##71: napply eqop_to_eq71 ##| ##72: napply eqop_to_eq72
- ##| ##73: napply eqop_to_eq73 ##| ##74: napply eqop_to_eq74 ##| ##75: napply eqop_to_eq75 ##| ##76: napply eqop_to_eq76
- ##| ##77: napply eqop_to_eq77 ##| ##78: napply eqop_to_eq78 ##| ##79: napply eqop_to_eq79 ##| ##80: napply eqop_to_eq80
- ##| ##81: napply eqop_to_eq81 ##| ##82: napply eqop_to_eq82 ##| ##83: napply eqop_to_eq83 ##| ##84: napply eqop_to_eq84
- ##| ##85: napply eqop_to_eq85 ##| ##86: napply eqop_to_eq86 ##| ##87: napply eqop_to_eq87 ##| ##88: napply eqop_to_eq88
- ##| ##89: napply eqop_to_eq89 ##| ##90: napply eqop_to_eq90 ##| ##91: napply eqop_to_eq91 ##]
+ ##[ ##1: napply neqop_to_neq1 ##| ##2: napply neqop_to_neq2 ##| ##3: napply neqop_to_neq3 ##| ##4: napply neqop_to_neq4
+ ##| ##5: napply neqop_to_neq5 ##| ##6: napply neqop_to_neq6 ##| ##7: napply neqop_to_neq7 ##| ##8: napply neqop_to_neq8
+ ##| ##9: napply neqop_to_neq9 ##| ##10: napply neqop_to_neq10 ##| ##11: napply neqop_to_neq11 ##| ##12: napply neqop_to_neq12
+ ##| ##13: napply neqop_to_neq13 ##| ##14: napply neqop_to_neq14 ##| ##15: napply neqop_to_neq15 ##| ##16: napply neqop_to_neq16
+ ##| ##17: napply neqop_to_neq17 ##| ##18: napply neqop_to_neq18 ##| ##19: napply neqop_to_neq19 ##| ##20: napply neqop_to_neq20
+ ##| ##21: napply neqop_to_neq21 ##| ##22: napply neqop_to_neq22 ##| ##23: napply neqop_to_neq23 ##| ##24: napply neqop_to_neq24
+ ##| ##25: napply neqop_to_neq25 ##| ##26: napply neqop_to_neq26 ##| ##27: napply neqop_to_neq27 ##| ##28: napply neqop_to_neq28
+ ##| ##29: napply neqop_to_neq29 ##| ##30: napply neqop_to_neq30 ##| ##31: napply neqop_to_neq31 ##| ##32: napply neqop_to_neq32
+ ##| ##33: napply neqop_to_neq33 ##| ##34: napply neqop_to_neq34 ##| ##35: napply neqop_to_neq35 ##| ##36: napply neqop_to_neq36
+ ##| ##37: napply neqop_to_neq37 ##| ##38: napply neqop_to_neq38 ##| ##39: napply neqop_to_neq39 ##| ##40: napply neqop_to_neq40
+ ##| ##41: napply neqop_to_neq41 ##| ##42: napply neqop_to_neq42 ##| ##43: napply neqop_to_neq43 ##| ##44: napply neqop_to_neq44
+ ##| ##45: napply neqop_to_neq45 ##| ##46: napply neqop_to_neq46 ##| ##47: napply neqop_to_neq47 ##| ##48: napply neqop_to_neq48
+ ##| ##49: napply neqop_to_neq49 ##| ##50: napply neqop_to_neq50 ##| ##51: napply neqop_to_neq51 ##| ##52: napply neqop_to_neq52
+ ##| ##53: napply neqop_to_neq53 ##| ##54: napply neqop_to_neq54 ##| ##55: napply neqop_to_neq55 ##| ##56: napply neqop_to_neq56
+ ##| ##57: napply neqop_to_neq57 ##| ##58: napply neqop_to_neq58 ##| ##59: napply neqop_to_neq59 ##| ##60: napply neqop_to_neq60
+ ##| ##61: napply neqop_to_neq61 ##| ##62: napply neqop_to_neq62 ##| ##63: napply neqop_to_neq63 ##| ##64: napply neqop_to_neq64
+ ##| ##65: napply neqop_to_neq65 ##| ##66: napply neqop_to_neq66 ##| ##67: napply neqop_to_neq67 ##| ##68: napply neqop_to_neq68
+ ##| ##69: napply neqop_to_neq69 ##| ##70: napply neqop_to_neq70 ##| ##71: napply neqop_to_neq71 ##| ##72: napply neqop_to_neq72
+ ##| ##73: napply neqop_to_neq73 ##| ##74: napply neqop_to_neq74 ##| ##75: napply neqop_to_neq75 ##| ##76: napply neqop_to_neq76
+ ##| ##77: napply neqop_to_neq77 ##| ##78: napply neqop_to_neq78 ##| ##79: napply neqop_to_neq79 ##| ##80: napply neqop_to_neq80
+ ##| ##81: napply neqop_to_neq81 ##| ##82: napply neqop_to_neq82 ##| ##83: napply neqop_to_neq83 ##| ##84: napply neqop_to_neq84
+ ##| ##85: napply neqop_to_neq85 ##| ##86: napply neqop_to_neq86 ##| ##87: napply neqop_to_neq87 ##| ##88: napply neqop_to_neq88
+ ##| ##89: napply neqop_to_neq89 ##| ##90: napply neqop_to_neq90 ##| ##91: napply neqop_to_neq91 ##]
 nqed.
 
-nlemma eq_to_eqop1 : ∀op2.ADC = op2 → eq_op ADC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##1: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop2 : ∀op2.ADD = op2 → eq_op ADD op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##2: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop3 : ∀op2.AIS = op2 → eq_op AIS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##3: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop4 : ∀op2.AIX = op2 → eq_op AIX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##4: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop5 : ∀op2.AND = op2 → eq_op AND op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##5: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop6 : ∀op2.ASL = op2 → eq_op ASL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##6: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop7 : ∀op2.ASR = op2 → eq_op ASR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##7: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop8 : ∀op2.BCC = op2 → eq_op BCC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##8: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop9 : ∀op2.BCLRn = op2 → eq_op BCLRn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##9: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop10 : ∀op2.BCS = op2 → eq_op BCS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##10: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop11 : ∀op2.BEQ = op2 → eq_op BEQ op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##11: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop12 : ∀op2.BGE = op2 → eq_op BGE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##12: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop13 : ∀op2.BGND = op2 → eq_op BGND op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##13: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop14 : ∀op2.BGT = op2 → eq_op BGT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##14: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop15 : ∀op2.BHCC = op2 → eq_op BHCC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##15: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop16 : ∀op2.BHCS = op2 → eq_op BHCS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##16: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop17 : ∀op2.BHI = op2 → eq_op BHI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##17: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop18 : ∀op2.BIH = op2 → eq_op BIH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##18: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop19 : ∀op2.BIL = op2 → eq_op BIL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##19: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop20 : ∀op2.BIT = op2 → eq_op BIT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##20: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop21 : ∀op2.BLE = op2 → eq_op BLE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##21: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop22 : ∀op2.BLS = op2 → eq_op BLS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##22: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop23 : ∀op2.BLT = op2 → eq_op BLT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##23: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop24 : ∀op2.BMC = op2 → eq_op BMC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##24: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop25 : ∀op2.BMI = op2 → eq_op BMI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##25: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop26 : ∀op2.BMS = op2 → eq_op BMS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##26: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop27 : ∀op2.BNE = op2 → eq_op BNE op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##27: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop28 : ∀op2.BPL = op2 → eq_op BPL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##28: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop29 : ∀op2.BRA = op2 → eq_op BRA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##29: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop30 : ∀op2.BRCLRn = op2 → eq_op BRCLRn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##30: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop31 : ∀op2.BRN = op2 → eq_op BRN op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##31: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop32 : ∀op2.BRSETn = op2 → eq_op BRSETn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##32: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop33 : ∀op2.BSETn = op2 → eq_op BSETn op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##33: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop34 : ∀op2.BSR = op2 → eq_op BSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##34: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop35 : ∀op2.CBEQA = op2 → eq_op CBEQA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##35: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop36 : ∀op2.CBEQX = op2 → eq_op CBEQX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##36: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop37 : ∀op2.CLC = op2 → eq_op CLC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##37: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop38 : ∀op2.CLI = op2 → eq_op CLI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##38: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop39 : ∀op2.CLR = op2 → eq_op CLR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##39: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop40 : ∀op2.CMP = op2 → eq_op CMP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##40: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop41 : ∀op2.COM = op2 → eq_op COM op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##41: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop42 : ∀op2.CPHX = op2 → eq_op CPHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##42: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop43 : ∀op2.CPX = op2 → eq_op CPX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##43: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop44 : ∀op2.DAA = op2 → eq_op DAA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##44: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop45 : ∀op2.DBNZ = op2 → eq_op DBNZ op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##45: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop46 : ∀op2.DEC = op2 → eq_op DEC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##46: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop47 : ∀op2.DIV = op2 → eq_op DIV op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##47: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop48 : ∀op2.EOR = op2 → eq_op EOR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##48: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop49 : ∀op2.INC = op2 → eq_op INC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##49: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop50 : ∀op2.JMP = op2 → eq_op JMP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##50: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop51 : ∀op2.JSR = op2 → eq_op JSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##51: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop52 : ∀op2.LDA = op2 → eq_op LDA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##52: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop53 : ∀op2.LDHX = op2 → eq_op LDHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##53: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop54 : ∀op2.LDX = op2 → eq_op LDX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##54: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop55 : ∀op2.LSR = op2 → eq_op LSR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##55: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop56 : ∀op2.MOV = op2 → eq_op MOV op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##56: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop57 : ∀op2.MUL = op2 → eq_op MUL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##57: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop58 : ∀op2.NEG = op2 → eq_op NEG op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##58: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop59 : ∀op2.NOP = op2 → eq_op NOP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##59: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop60 : ∀op2.NSA = op2 → eq_op NSA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##60: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop61 : ∀op2.ORA = op2 → eq_op ORA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##61: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop62 : ∀op2.PSHA = op2 → eq_op PSHA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##62: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop63 : ∀op2.PSHH = op2 → eq_op PSHH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##63: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop64 : ∀op2.PSHX = op2 → eq_op PSHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##64: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop65 : ∀op2.PULA = op2 → eq_op PULA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##65: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop66 : ∀op2.PULH = op2 → eq_op PULH op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##66: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop67 : ∀op2.PULX = op2 → eq_op PULX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##67: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop68 : ∀op2.ROL = op2 → eq_op ROL op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##68: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop69 : ∀op2.ROR = op2 → eq_op ROR op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##69: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop70 : ∀op2.RSP = op2 → eq_op RSP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##70: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop71 : ∀op2.RTI = op2 → eq_op RTI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##71: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop72 : ∀op2.RTS = op2 → eq_op RTS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##72: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop73 : ∀op2.SBC = op2 → eq_op SBC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##73: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop74 : ∀op2.SEC = op2 → eq_op SEC op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##74: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop75 : ∀op2.SEI = op2 → eq_op SEI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##75: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop76 : ∀op2.SHA = op2 → eq_op SHA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##76: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop77 : ∀op2.SLA = op2 → eq_op SLA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##77: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop78 : ∀op2.STA = op2 → eq_op STA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##78: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop79 : ∀op2.STHX = op2 → eq_op STHX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##79: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop80 : ∀op2.STOP = op2 → eq_op STOP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##80: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop81 : ∀op2.STX = op2 → eq_op STX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##81: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop82 : ∀op2.SUB = op2 → eq_op SUB op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##82: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop83 : ∀op2.SWI = op2 → eq_op SWI op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##83: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop84 : ∀op2.TAP = op2 → eq_op TAP op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##84: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop85 : ∀op2.TAX = op2 → eq_op TAX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##85: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop86 : ∀op2.TPA = op2 → eq_op TPA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##86: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop87 : ∀op2.TST = op2 → eq_op TST op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##87: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop88 : ∀op2.TSX = op2 → eq_op TSX op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##88: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop89 : ∀op2.TXA = op2 → eq_op TXA op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##89: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop90 : ∀op2.TXS = op2 → eq_op TXS op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##90: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
-nlemma eq_to_eqop91 : ∀op2.WAIT = op2 → eq_op WAIT op2 = true. #op2; ncases op2; nnormalize; #H; ##[ ##91: napply refl_eq ##| ##*: napply (opcode_destruct … (false = true) H) ##]nqed.
+nlemma neq_to_neqop1 : ∀op2.ADC ≠ op2 → eq_op ADC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##1: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop2 : ∀op2.ADD ≠ op2 → eq_op ADD op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##2: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop3 : ∀op2.AIS ≠ op2 → eq_op AIS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##3: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop4 : ∀op2.AIX ≠ op2 → eq_op AIX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##4: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop5 : ∀op2.AND ≠ op2 → eq_op AND op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##5: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop6 : ∀op2.ASL ≠ op2 → eq_op ASL op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##6: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop7 : ∀op2.ASR ≠ op2 → eq_op ASR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##7: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop8 : ∀op2.BCC ≠ op2 → eq_op BCC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##8: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop9 : ∀op2.BCLRn ≠ op2 → eq_op BCLRn op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##9: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop10 : ∀op2.BCS ≠ op2 → eq_op BCS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##10: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop11 : ∀op2.BEQ ≠ op2 → eq_op BEQ op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##11: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop12 : ∀op2.BGE ≠ op2 → eq_op BGE op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##12: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop13 : ∀op2.BGND ≠ op2 → eq_op BGND op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##13: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop14 : ∀op2.BGT ≠ op2 → eq_op BGT op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##14: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop15 : ∀op2.BHCC ≠ op2 → eq_op BHCC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##15: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop16 : ∀op2.BHCS ≠ op2 → eq_op BHCS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##16: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop17 : ∀op2.BHI ≠ op2 → eq_op BHI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##17: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop18 : ∀op2.BIH ≠ op2 → eq_op BIH op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##18: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop19 : ∀op2.BIL ≠ op2 → eq_op BIL op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##19: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop20 : ∀op2.BIT ≠ op2 → eq_op BIT op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##20: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop21 : ∀op2.BLE ≠ op2 → eq_op BLE op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##21: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop22 : ∀op2.BLS ≠ op2 → eq_op BLS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##22: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop23 : ∀op2.BLT ≠ op2 → eq_op BLT op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##23: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop24 : ∀op2.BMC ≠ op2 → eq_op BMC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##24: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop25 : ∀op2.BMI ≠ op2 → eq_op BMI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##25: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop26 : ∀op2.BMS ≠ op2 → eq_op BMS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##26: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop27 : ∀op2.BNE ≠ op2 → eq_op BNE op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##27: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop28 : ∀op2.BPL ≠ op2 → eq_op BPL op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##28: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop29 : ∀op2.BRA ≠ op2 → eq_op BRA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##29: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop30 : ∀op2.BRCLRn ≠ op2 → eq_op BRCLRn op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##30: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop31 : ∀op2.BRN ≠ op2 → eq_op BRN op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##31: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop32 : ∀op2.BRSETn ≠ op2 → eq_op BRSETn op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##32: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop33 : ∀op2.BSETn ≠ op2 → eq_op BSETn op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##33: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop34 : ∀op2.BSR ≠ op2 → eq_op BSR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##34: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop35 : ∀op2.CBEQA ≠ op2 → eq_op CBEQA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##35: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop36 : ∀op2.CBEQX ≠ op2 → eq_op CBEQX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##36: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop37 : ∀op2.CLC ≠ op2 → eq_op CLC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##37: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop38 : ∀op2.CLI ≠ op2 → eq_op CLI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##38: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop39 : ∀op2.CLR ≠ op2 → eq_op CLR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##39: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop40 : ∀op2.CMP ≠ op2 → eq_op CMP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##40: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop41 : ∀op2.COM ≠ op2 → eq_op COM op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##41: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop42 : ∀op2.CPHX ≠ op2 → eq_op CPHX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##42: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop43 : ∀op2.CPX ≠ op2 → eq_op CPX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##43: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop44 : ∀op2.DAA ≠ op2 → eq_op DAA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##44: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop45 : ∀op2.DBNZ ≠ op2 → eq_op DBNZ op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##45: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop46 : ∀op2.DEC ≠ op2 → eq_op DEC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##46: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop47 : ∀op2.DIV ≠ op2 → eq_op DIV op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##47: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop48 : ∀op2.EOR ≠ op2 → eq_op EOR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##48: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop49 : ∀op2.INC ≠ op2 → eq_op INC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##49: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop50 : ∀op2.JMP ≠ op2 → eq_op JMP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##50: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop51 : ∀op2.JSR ≠ op2 → eq_op JSR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##51: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop52 : ∀op2.LDA ≠ op2 → eq_op LDA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##52: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop53 : ∀op2.LDHX ≠ op2 → eq_op LDHX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##53: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop54 : ∀op2.LDX ≠ op2 → eq_op LDX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##54: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop55 : ∀op2.LSR ≠ op2 → eq_op LSR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##55: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop56 : ∀op2.MOV ≠ op2 → eq_op MOV op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##56: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop57 : ∀op2.MUL ≠ op2 → eq_op MUL op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##57: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop58 : ∀op2.NEG ≠ op2 → eq_op NEG op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##58: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop59 : ∀op2.NOP ≠ op2 → eq_op NOP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##59: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop60 : ∀op2.NSA ≠ op2 → eq_op NSA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##60: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop61 : ∀op2.ORA ≠ op2 → eq_op ORA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##61: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop62 : ∀op2.PSHA ≠ op2 → eq_op PSHA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##62: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop63 : ∀op2.PSHH ≠ op2 → eq_op PSHH op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##63: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop64 : ∀op2.PSHX ≠ op2 → eq_op PSHX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##64: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop65 : ∀op2.PULA ≠ op2 → eq_op PULA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##65: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop66 : ∀op2.PULH ≠ op2 → eq_op PULH op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##66: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop67 : ∀op2.PULX ≠ op2 → eq_op PULX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##67: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop68 : ∀op2.ROL ≠ op2 → eq_op ROL op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##68: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop69 : ∀op2.ROR ≠ op2 → eq_op ROR op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##69: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop70 : ∀op2.RSP ≠ op2 → eq_op RSP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##70: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop71 : ∀op2.RTI ≠ op2 → eq_op RTI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##71: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop72 : ∀op2.RTS ≠ op2 → eq_op RTS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##72: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop73 : ∀op2.SBC ≠ op2 → eq_op SBC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##73: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop74 : ∀op2.SEC ≠ op2 → eq_op SEC op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##74: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop75 : ∀op2.SEI ≠ op2 → eq_op SEI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##75: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop76 : ∀op2.SHA ≠ op2 → eq_op SHA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##76: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop77 : ∀op2.SLA ≠ op2 → eq_op SLA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##77: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop78 : ∀op2.STA ≠ op2 → eq_op STA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##78: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop79 : ∀op2.STHX ≠ op2 → eq_op STHX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##79: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop80 : ∀op2.STOP ≠ op2 → eq_op STOP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##80: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop81 : ∀op2.STX ≠ op2 → eq_op STX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##81: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop82 : ∀op2.SUB ≠ op2 → eq_op SUB op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##82: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop83 : ∀op2.SWI ≠ op2 → eq_op SWI op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##83: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop84 : ∀op2.TAP ≠ op2 → eq_op TAP op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##84: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop85 : ∀op2.TAX ≠ op2 → eq_op TAX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##85: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop86 : ∀op2.TPA ≠ op2 → eq_op TPA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##86: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop87 : ∀op2.TST ≠ op2 → eq_op TST op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##87: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop88 : ∀op2.TSX ≠ op2 → eq_op TSX op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##88: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop89 : ∀op2.TXA ≠ op2 → eq_op TXA op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##89: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop90 : ∀op2.TXS ≠ op2 → eq_op TXS op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##90: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
+nlemma neq_to_neqop91 : ∀op2.WAIT ≠ op2 → eq_op WAIT op2 = false. #op2; ncases op2; nnormalize; #H; ##[ ##91: nelim (H (refl_eq …)) ##| ##*: napply refl_eq ##] nqed.
 
-nlemma eq_to_eqop : ∀op1,op2.op1 = op2 → eq_op op1 op2 = true.
+nlemma neq_to_neqop : ∀op1,op2.op1 ≠ op2 → eq_op op1 op2 = false.
  #op1; ncases op1;
- ##[ ##1: napply eq_to_eqop1 ##| ##2: napply eq_to_eqop2 ##| ##3: napply eq_to_eqop3 ##| ##4: napply eq_to_eqop4
- ##| ##5: napply eq_to_eqop5 ##| ##6: napply eq_to_eqop6 ##| ##7: napply eq_to_eqop7 ##| ##8: napply eq_to_eqop8
- ##| ##9: napply eq_to_eqop9 ##| ##10: napply eq_to_eqop10 ##| ##11: napply eq_to_eqop11 ##| ##12: napply eq_to_eqop12
- ##| ##13: napply eq_to_eqop13 ##| ##14: napply eq_to_eqop14 ##| ##15: napply eq_to_eqop15 ##| ##16: napply eq_to_eqop16
- ##| ##17: napply eq_to_eqop17 ##| ##18: napply eq_to_eqop18 ##| ##19: napply eq_to_eqop19 ##| ##20: napply eq_to_eqop20
- ##| ##21: napply eq_to_eqop21 ##| ##22: napply eq_to_eqop22 ##| ##23: napply eq_to_eqop23 ##| ##24: napply eq_to_eqop24
- ##| ##25: napply eq_to_eqop25 ##| ##26: napply eq_to_eqop26 ##| ##27: napply eq_to_eqop27 ##| ##28: napply eq_to_eqop28
- ##| ##29: napply eq_to_eqop29 ##| ##30: napply eq_to_eqop30 ##| ##31: napply eq_to_eqop31 ##| ##32: napply eq_to_eqop32
- ##| ##33: napply eq_to_eqop33 ##| ##34: napply eq_to_eqop34 ##| ##35: napply eq_to_eqop35 ##| ##36: napply eq_to_eqop36
- ##| ##37: napply eq_to_eqop37 ##| ##38: napply eq_to_eqop38 ##| ##39: napply eq_to_eqop39 ##| ##40: napply eq_to_eqop40
- ##| ##41: napply eq_to_eqop41 ##| ##42: napply eq_to_eqop42 ##| ##43: napply eq_to_eqop43 ##| ##44: napply eq_to_eqop44
- ##| ##45: napply eq_to_eqop45 ##| ##46: napply eq_to_eqop46 ##| ##47: napply eq_to_eqop47 ##| ##48: napply eq_to_eqop48
- ##| ##49: napply eq_to_eqop49 ##| ##50: napply eq_to_eqop50 ##| ##51: napply eq_to_eqop51 ##| ##52: napply eq_to_eqop52
- ##| ##53: napply eq_to_eqop53 ##| ##54: napply eq_to_eqop54 ##| ##55: napply eq_to_eqop55 ##| ##56: napply eq_to_eqop56
- ##| ##57: napply eq_to_eqop57 ##| ##58: napply eq_to_eqop58 ##| ##59: napply eq_to_eqop59 ##| ##60: napply eq_to_eqop60
- ##| ##61: napply eq_to_eqop61 ##| ##62: napply eq_to_eqop62 ##| ##63: napply eq_to_eqop63 ##| ##64: napply eq_to_eqop64
- ##| ##65: napply eq_to_eqop65 ##| ##66: napply eq_to_eqop66 ##| ##67: napply eq_to_eqop67 ##| ##68: napply eq_to_eqop68
- ##| ##69: napply eq_to_eqop69 ##| ##70: napply eq_to_eqop70 ##| ##71: napply eq_to_eqop71 ##| ##72: napply eq_to_eqop72
- ##| ##73: napply eq_to_eqop73 ##| ##74: napply eq_to_eqop74 ##| ##75: napply eq_to_eqop75 ##| ##76: napply eq_to_eqop76
- ##| ##77: napply eq_to_eqop77 ##| ##78: napply eq_to_eqop78 ##| ##79: napply eq_to_eqop79 ##| ##80: napply eq_to_eqop80
- ##| ##81: napply eq_to_eqop81 ##| ##82: napply eq_to_eqop82 ##| ##83: napply eq_to_eqop83 ##| ##84: napply eq_to_eqop84
- ##| ##85: napply eq_to_eqop85 ##| ##86: napply eq_to_eqop86 ##| ##87: napply eq_to_eqop87 ##| ##88: napply eq_to_eqop88
- ##| ##89: napply eq_to_eqop89 ##| ##90: napply eq_to_eqop90 ##| ##91: napply eq_to_eqop91 ##]
+ ##[ ##1: napply neq_to_neqop1 ##| ##2: napply neq_to_neqop2 ##| ##3: napply neq_to_neqop3 ##| ##4: napply neq_to_neqop4
+ ##| ##5: napply neq_to_neqop5 ##| ##6: napply neq_to_neqop6 ##| ##7: napply neq_to_neqop7 ##| ##8: napply neq_to_neqop8
+ ##| ##9: napply neq_to_neqop9 ##| ##10: napply neq_to_neqop10 ##| ##11: napply neq_to_neqop11 ##| ##12: napply neq_to_neqop12
+ ##| ##13: napply neq_to_neqop13 ##| ##14: napply neq_to_neqop14 ##| ##15: napply neq_to_neqop15 ##| ##16: napply neq_to_neqop16
+ ##| ##17: napply neq_to_neqop17 ##| ##18: napply neq_to_neqop18 ##| ##19: napply neq_to_neqop19 ##| ##20: napply neq_to_neqop20
+ ##| ##21: napply neq_to_neqop21 ##| ##22: napply neq_to_neqop22 ##| ##23: napply neq_to_neqop23 ##| ##24: napply neq_to_neqop24
+ ##| ##25: napply neq_to_neqop25 ##| ##26: napply neq_to_neqop26 ##| ##27: napply neq_to_neqop27 ##| ##28: napply neq_to_neqop28
+ ##| ##29: napply neq_to_neqop29 ##| ##30: napply neq_to_neqop30 ##| ##31: napply neq_to_neqop31 ##| ##32: napply neq_to_neqop32
+ ##| ##33: napply neq_to_neqop33 ##| ##34: napply neq_to_neqop34 ##| ##35: napply neq_to_neqop35 ##| ##36: napply neq_to_neqop36
+ ##| ##37: napply neq_to_neqop37 ##| ##38: napply neq_to_neqop38 ##| ##39: napply neq_to_neqop39 ##| ##40: napply neq_to_neqop40
+ ##| ##41: napply neq_to_neqop41 ##| ##42: napply neq_to_neqop42 ##| ##43: napply neq_to_neqop43 ##| ##44: napply neq_to_neqop44
+ ##| ##45: napply neq_to_neqop45 ##| ##46: napply neq_to_neqop46 ##| ##47: napply neq_to_neqop47 ##| ##48: napply neq_to_neqop48
+ ##| ##49: napply neq_to_neqop49 ##| ##50: napply neq_to_neqop50 ##| ##51: napply neq_to_neqop51 ##| ##52: napply neq_to_neqop52
+ ##| ##53: napply neq_to_neqop53 ##| ##54: napply neq_to_neqop54 ##| ##55: napply neq_to_neqop55 ##| ##56: napply neq_to_neqop56
+ ##| ##57: napply neq_to_neqop57 ##| ##58: napply neq_to_neqop58 ##| ##59: napply neq_to_neqop59 ##| ##60: napply neq_to_neqop60
+ ##| ##61: napply neq_to_neqop61 ##| ##62: napply neq_to_neqop62 ##| ##63: napply neq_to_neqop63 ##| ##64: napply neq_to_neqop64
+ ##| ##65: napply neq_to_neqop65 ##| ##66: napply neq_to_neqop66 ##| ##67: napply neq_to_neqop67 ##| ##68: napply neq_to_neqop68
+ ##| ##69: napply neq_to_neqop69 ##| ##70: napply neq_to_neqop70 ##| ##71: napply neq_to_neqop71 ##| ##72: napply neq_to_neqop72
+ ##| ##73: napply neq_to_neqop73 ##| ##74: napply neq_to_neqop74 ##| ##75: napply neq_to_neqop75 ##| ##76: napply neq_to_neqop76
+ ##| ##77: napply neq_to_neqop77 ##| ##78: napply neq_to_neqop78 ##| ##79: napply neq_to_neqop79 ##| ##80: napply neq_to_neqop80
+ ##| ##81: napply neq_to_neqop81 ##| ##82: napply neq_to_neqop82 ##| ##83: napply neq_to_neqop83 ##| ##84: napply neq_to_neqop84
+ ##| ##85: napply neq_to_neqop85 ##| ##86: napply neq_to_neqop86 ##| ##87: napply neq_to_neqop87 ##| ##88: napply neq_to_neqop88
+ ##| ##89: napply neq_to_neqop89 ##| ##90: napply neq_to_neqop90 ##| ##91: napply neq_to_neqop91 ##]
 nqed.
index 661737793505a9660d138755d3ea7311128c3f9f..b7fc76f7a51da4b39297f959dec7daeae1ab3282 100755 (executable)
@@ -76,14 +76,6 @@ full_info_of_word16_aux m borw (opcode_table m).
 ninductive t_byte8 (m:mcu_type) : Type ≝
  TByte : byte8 → t_byte8 m.
 
-nlemma tbyte8_destruct : ∀m,b1,b2.TByte m b1 = TByte m b2 → b1 = b2.
- #m; #b1; #b2; #H;
- nchange with (match TByte m b2 with [ TByte a ⇒ b1 = a ]);
- nrewrite < H;
- nnormalize;
- napply refl_eq.
-nqed.
-
 (* introduzione di un tipo dipendente (dalla modalita') per gli argomenti *)
 ninductive MA_check : instr_mode → Type ≝
   maINH              : MA_check MODE_INH
diff --git a/helm/software/matita/contribs/ng_assembly/freescale/translation_lemmas.ma b/helm/software/matita/contribs/ng_assembly/freescale/translation_lemmas.ma
new file mode 100755 (executable)
index 0000000..a289826
--- /dev/null
@@ -0,0 +1,35 @@
+(**************************************************************************)
+(*       ___                                                              *)
+(*      ||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              *)
+(*   Ultima modifica: 05/08/2009                                          *)
+(*                                                                        *)
+(* ********************************************************************** *)
+
+include "freescale/translation.ma".
+
+(* ******************************************************* *)
+(* TRADUZIONE MCU+OPCODE+MODALITA'+ARGOMENTI → ESADECIMALE *)
+(* ******************************************************* *)
+
+nlemma tbyte8_destruct : ∀m,b1,b2.TByte m b1 = TByte m b2 → b1 = b2.
+ #m; #b1; #b2; #H;
+ nchange with (match TByte m b2 with [ TByte a ⇒ b1 = a ]);
+ nrewrite < H;
+ nnormalize;
+ napply refl_eq.
+nqed.
index 812f31a9d7e83ac2d63ba7d01d79e96274444974..9d9a95cbb844df10a98d6f520175a7af110bf716 100755 (executable)
@@ -27,431 +27,16 @@ include "num/bool_lemmas.ma".
 (* BITRIGESIMALI *)
 (* ************* *)
 
-ndefinition bitrigesim_destruct1 :
-Πt2:bitrigesim.ΠP:Prop.t00 = t2 → match t2 with [ t00 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##1: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t00 with [ t00 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct2 :
-Πt2:bitrigesim.ΠP:Prop.t01 = t2 → match t2 with [ t01 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##2: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t01 with [ t01 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct3 :
-Πt2:bitrigesim.ΠP:Prop.t02 = t2 → match t2 with [ t02 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##3: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t02 with [ t02 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct4 :
-Πt2:bitrigesim.ΠP:Prop.t03 = t2 → match t2 with [ t03 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##4: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t03 with [ t03 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct5 :
-Πt2:bitrigesim.ΠP:Prop.t04 = t2 → match t2 with [ t04 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##5: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t04 with [ t04 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct6 :
-Πt2:bitrigesim.ΠP:Prop.t05 = t2 → match t2 with [ t05 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##6: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t05 with [ t05 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct7 :
-Πt2:bitrigesim.ΠP:Prop.t06 = t2 → match t2 with [ t06 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##7: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t06 with [ t06 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct8 :
-Πt2:bitrigesim.ΠP:Prop.t07 = t2 → match t2 with [ t07 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##8: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t07 with [ t07 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct9 :
-Πt2:bitrigesim.ΠP:Prop.t08 = t2 → match t2 with [ t08 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##9: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t08 with [ t08 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct10 :
-Πt2:bitrigesim.ΠP:Prop.t09 = t2 → match t2 with [ t09 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##10: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t09 with [ t09 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct11 :
-Πt2:bitrigesim.ΠP:Prop.t0A = t2 → match t2 with [ t0A ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##11: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0A with [ t0A ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct12 :
-Πt2:bitrigesim.ΠP:Prop.t0B = t2 → match t2 with [ t0B ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##12: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0B with [ t0B ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct13 :
-Πt2:bitrigesim.ΠP:Prop.t0C = t2 → match t2 with [ t0C ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##13: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0C with [ t0C ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct14 :
-Πt2:bitrigesim.ΠP:Prop.t0D = t2 → match t2 with [ t0D ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##14: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0D with [ t0D ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct15 :
-Πt2:bitrigesim.ΠP:Prop.t0E = t2 → match t2 with [ t0E ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##15: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0E with [ t0E ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct16 :
-Πt2:bitrigesim.ΠP:Prop.t0F = t2 → match t2 with [ t0F ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##16: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t0F with [ t0F ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct17 :
-Πt2:bitrigesim.ΠP:Prop.t10 = t2 → match t2 with [ t10 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##17: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t10 with [ t10 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct18 :
-Πt2:bitrigesim.ΠP:Prop.t11 = t2 → match t2 with [ t11 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##18: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t11 with [ t11 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct19 :
-Πt2:bitrigesim.ΠP:Prop.t12 = t2 → match t2 with [ t12 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##19: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t12 with [ t12 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct20 :
-Πt2:bitrigesim.ΠP:Prop.t13 = t2 → match t2 with [ t13 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##20: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t13 with [ t13 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct21 :
-Πt2:bitrigesim.ΠP:Prop.t14 = t2 → match t2 with [ t14 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##21: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t14 with [ t14 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct22 :
-Πt2:bitrigesim.ΠP:Prop.t15 = t2 → match t2 with [ t15 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##22: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t15 with [ t15 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct23 :
-Πt2:bitrigesim.ΠP:Prop.t16 = t2 → match t2 with [ t16 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##23: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t16 with [ t16 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct24 :
-Πt2:bitrigesim.ΠP:Prop.t17 = t2 → match t2 with [ t17 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##24: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t17 with [ t17 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct25 :
-Πt2:bitrigesim.ΠP:Prop.t18 = t2 → match t2 with [ t18 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##25: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t18 with [ t18 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct26 :
-Πt2:bitrigesim.ΠP:Prop.t19 = t2 → match t2 with [ t19 ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##26: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t19 with [ t19 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct27 :
-Πt2:bitrigesim.ΠP:Prop.t1A = t2 → match t2 with [ t1A ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##27: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1A with [ t1A ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct28 :
-Πt2:bitrigesim.ΠP:Prop.t1B = t2 → match t2 with [ t1B ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##28: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1B with [ t1B ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct29 :
-Πt2:bitrigesim.ΠP:Prop.t1C = t2 → match t2 with [ t1C ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##29: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1C with [ t1C ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct30 :
-Πt2:bitrigesim.ΠP:Prop.t1D = t2 → match t2 with [ t1D ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##30: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1D with [ t1D ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct31 :
-Πt2:bitrigesim.ΠP:Prop.t1E = t2 → match t2 with [ t1E ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##31: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1E with [ t1E ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition bitrigesim_destruct32 :
-Πt2:bitrigesim.ΠP:Prop.t1F = t2 → match t2 with [ t1F ⇒ P → P | _ ⇒ P ].
- #t2; #P;
- ncases t2;
- nnormalize; #H;
- ##[ ##32: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match t1F with [ t1F ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
 ndefinition bitrigesim_destruct_aux ≝
 Πt1,t2:bitrigesim.ΠP:Prop.t1 = t2 →
- match t1 with
-  [ t00 ⇒ match t2 with [ t00 ⇒ P → P | _ ⇒ P ] | t01 ⇒ match t2 with [ t01 ⇒ P → P | _ ⇒ P ]
-  | t02 ⇒ match t2 with [ t02 ⇒ P → P | _ ⇒ P ] | t03 ⇒ match t2 with [ t03 ⇒ P → P | _ ⇒ P ]
-  | t04 ⇒ match t2 with [ t04 ⇒ P → P | _ ⇒ P ] | t05 ⇒ match t2 with [ t05 ⇒ P → P | _ ⇒ P ]
-  | t06 ⇒ match t2 with [ t06 ⇒ P → P | _ ⇒ P ] | t07 ⇒ match t2 with [ t07 ⇒ P → P | _ ⇒ P ]
-  | t08 ⇒ match t2 with [ t08 ⇒ P → P | _ ⇒ P ] | t09 ⇒ match t2 with [ t09 ⇒ P → P | _ ⇒ P ]
-  | t0A ⇒ match t2 with [ t0A ⇒ P → P | _ ⇒ P ] | t0B ⇒ match t2 with [ t0B ⇒ P → P | _ ⇒ P ]
-  | t0C ⇒ match t2 with [ t0C ⇒ P → P | _ ⇒ P ] | t0D ⇒ match t2 with [ t0D ⇒ P → P | _ ⇒ P ]
-  | t0E ⇒ match t2 with [ t0E ⇒ P → P | _ ⇒ P ] | t0F ⇒ match t2 with [ t0F ⇒ P → P | _ ⇒ P ]
-  | t10 ⇒ match t2 with [ t10 ⇒ P → P | _ ⇒ P ] | t11 ⇒ match t2 with [ t11 ⇒ P → P | _ ⇒ P ]
-  | t12 ⇒ match t2 with [ t12 ⇒ P → P | _ ⇒ P ] | t13 ⇒ match t2 with [ t13 ⇒ P → P | _ ⇒ P ]
-  | t14 ⇒ match t2 with [ t14 ⇒ P → P | _ ⇒ P ] | t15 ⇒ match t2 with [ t15 ⇒ P → P | _ ⇒ P ]
-  | t16 ⇒ match t2 with [ t16 ⇒ P → P | _ ⇒ P ] | t17 ⇒ match t2 with [ t17 ⇒ P → P | _ ⇒ P ]
-  | t18 ⇒ match t2 with [ t18 ⇒ P → P | _ ⇒ P ] | t19 ⇒ match t2 with [ t19 ⇒ P → P | _ ⇒ P ]
-  | t1A ⇒ match t2 with [ t1A ⇒ P → P | _ ⇒ P ] | t1B ⇒ match t2 with [ t1B ⇒ P → P | _ ⇒ P ]
-  | t1C ⇒ match t2 with [ t1C ⇒ P → P | _ ⇒ P ] | t1D ⇒ match t2 with [ t1D ⇒ P → P | _ ⇒ P ]
-  | t1E ⇒ match t2 with [ t1E ⇒ P → P | _ ⇒ P ] | t1F ⇒ match t2 with [ t1F ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_bit t1 t2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition bitrigesim_destruct : bitrigesim_destruct_aux.
- #t1;
- ncases t1;
- ##[ ##1: napply bitrigesim_destruct1 ##| ##2: napply bitrigesim_destruct2
- ##| ##3: napply bitrigesim_destruct3 ##| ##4: napply bitrigesim_destruct4
- ##| ##5: napply bitrigesim_destruct5 ##| ##6: napply bitrigesim_destruct6
- ##| ##7: napply bitrigesim_destruct7 ##| ##8: napply bitrigesim_destruct8
- ##| ##9: napply bitrigesim_destruct9 ##| ##10: napply bitrigesim_destruct10
- ##| ##11: napply bitrigesim_destruct11 ##| ##12: napply bitrigesim_destruct12
- ##| ##13: napply bitrigesim_destruct13 ##| ##14: napply bitrigesim_destruct14
- ##| ##15: napply bitrigesim_destruct15 ##| ##16: napply bitrigesim_destruct16
- ##| ##17: napply bitrigesim_destruct17 ##| ##18: napply bitrigesim_destruct18
- ##| ##19: napply bitrigesim_destruct19 ##| ##20: napply bitrigesim_destruct20
- ##| ##21: napply bitrigesim_destruct21 ##| ##22: napply bitrigesim_destruct22
- ##| ##23: napply bitrigesim_destruct23 ##| ##24: napply bitrigesim_destruct24
- ##| ##25: napply bitrigesim_destruct25 ##| ##26: napply bitrigesim_destruct26
- ##| ##27: napply bitrigesim_destruct27 ##| ##28: napply bitrigesim_destruct28
- ##| ##29: napply bitrigesim_destruct29 ##| ##30: napply bitrigesim_destruct30
- ##| ##31: napply bitrigesim_destruct31 ##| ##32: napply bitrigesim_destruct32
- ##]
+ #t1; #t2; #P; #H;
+ nrewrite < H;
+ nelim t1;
+ nnormalize;
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqbit : symmetricT bitrigesim bool eq_bit.
index 9190adda8e40f22174decaae0d3abfa2be6d3d52..241ee867562d49ba33e1e7e0479fc61d04b5c170 100755 (executable)
@@ -28,29 +28,14 @@ include "num/bool.ma".
 
 ndefinition bool_destruct_aux ≝
 Πb1,b2:bool.ΠP:Prop.b1 = b2 →
- match b1 with
-  [ true ⇒ match b2 with [ true ⇒ P → P | false ⇒ P ]
-  | false ⇒ match b2 with [ true ⇒ P | false ⇒ P → P ]
-  ].
+ match eq_bool b1 b2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition bool_destruct : bool_destruct_aux.
- #b1; #b2; #P;
+ #b1; #b2; #P; #H;
+ nrewrite < H;
  nelim b1;
- nelim b2;
  nnormalize;
- #H;
- ##[ ##2: napply False_ind;
-          nchange with (match true with [ true ⇒ False | false ⇒ True]);
-          nrewrite > H;
-          nnormalize;
-          napply I
- ##| ##3: napply False_ind;
-          nchange with (match true with [ true ⇒ False | false ⇒ True]);
-          nrewrite < H;
-          nnormalize;
-          napply I
- ##| ##1,4: napply (λx:P.x)
- ##]
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqbool : symmetricT bool bool eq_bool.
@@ -138,7 +123,10 @@ nlemma decidable_bool : ∀x,y:bool.decidable (x = y).
  nelim x;
  nelim y;
  ##[ ##1,4: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
- ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (bool_destruct … H)
+ ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …);
+          nnormalize; #H;
+          napply False_ind;
+          napply (bool_destruct … H)
  ##]
 nqed.
 
index 3165dd2553aae51cca481e4c1bfea29adb5356c6..38c472806f2cf135c0e96af833ffc254b129843b 100755 (executable)
@@ -143,20 +143,14 @@ nlemma symmetric_plusb8_dc_dc : ∀b1,b2,c.plus_b8_dc_dc b1 b2 c = plus_b8_dc_dc
  nelim b2;
  #e3; #e4;
  nchange with (
-  match plus_ex_dc_dc e2 e4 c with
-   [ pair l c ⇒ match plus_ex_dc_dc e1 e3 c with
-    [ pair h c' ⇒ pair … 〈h,l〉 c' ]] =
-  match plus_ex_dc_dc e4 e2 c with
-   [ pair l c ⇒ match plus_ex_dc_dc e3 e1 c with
-    [ pair h c' ⇒ pair … 〈h,l〉 c' ]]);
+  match plus_ex_dc_dc e2 e4 c with [ pair l c ⇒ match plus_ex_dc_dc e1 e3 c with [ pair h c' ⇒ pair … 〈h,l〉 c' ]] =
+  match plus_ex_dc_dc e4 e2 c with [ pair l c ⇒ match plus_ex_dc_dc e3 e1 c with [ pair h c' ⇒ pair … 〈h,l〉 c' ]]);
  nrewrite > (symmetric_plusex_dc_dc e4 e2 c);
  ncases (plus_ex_dc_dc e2 e4 c);
  #e5; #c1;
  nchange with (
-  match plus_ex_dc_dc e1 e3 c1 with
-   [ pair h c' ⇒ pair … 〈h,e5〉 c' ] =
-  match plus_ex_dc_dc e3 e1 c1 with
-   [ pair h c' ⇒ pair … 〈h,e5〉 c' ]);
+  match plus_ex_dc_dc e1 e3 c1 with [ pair h c' ⇒ pair … 〈h,e5〉 c' ] =
+  match plus_ex_dc_dc e3 e1 c1 with [ pair h c' ⇒ pair … 〈h,e5〉 c' ]);
  nrewrite > (symmetric_plusex_dc_dc e1 e3 c1);
  napply refl_eq.
 nqed.
@@ -168,10 +162,8 @@ nlemma symmetric_plusb8_dc_d : ∀b1,b2,c.plus_b8_dc_d b1 b2 c = plus_b8_dc_d b2
  nelim b2;
  #e3; #e4;
  nchange with (
-  match plus_ex_dc_dc e2 e4 c with
-   [ pair l c ⇒ 〈plus_ex_dc_d e1 e3 c,l〉 ] =
-  match plus_ex_dc_dc e4 e2 c with
-   [ pair l c ⇒ 〈plus_ex_dc_d e3 e1 c,l〉 ]);
+  match plus_ex_dc_dc e2 e4 c with [ pair l c ⇒ 〈plus_ex_dc_d e1 e3 c,l〉 ] =
+  match plus_ex_dc_dc e4 e2 c with [ pair l c ⇒ 〈plus_ex_dc_d e3 e1 c,l〉 ]);
  nrewrite > (symmetric_plusex_dc_dc e4 e2 c);
  ncases (plus_ex_dc_dc e2 e4 c);
  #e5; #c1;
@@ -201,20 +193,14 @@ nlemma symmetric_plusb8_d_dc : ∀b1,b2.plus_b8_d_dc b1 b2 = plus_b8_d_dc b2 b1.
  nelim b2;
  #e3; #e4;
  nchange with (
-  match plus_ex_d_dc e2 e4 with
-   [ pair l c ⇒ match plus_ex_dc_dc e1 e3 c with
-    [ pair h c' ⇒ pair … 〈h,l〉 c' ]] =
-  match plus_ex_d_dc e4 e2 with
-   [ pair l c ⇒ match plus_ex_dc_dc e3 e1 c with
-    [ pair h c' ⇒ pair … 〈h,l〉 c' ]]);
+  match plus_ex_d_dc e2 e4 with [ pair l c ⇒ match plus_ex_dc_dc e1 e3 c with [ pair h c' ⇒ pair … 〈h,l〉 c' ]] =
+  match plus_ex_d_dc e4 e2 with [ pair l c ⇒ match plus_ex_dc_dc e3 e1 c with [ pair h c' ⇒ pair … 〈h,l〉 c' ]]);
  nrewrite > (symmetric_plusex_d_dc e4 e2);
  ncases (plus_ex_d_dc e2 e4);
  #e5; #c;
  nchange with (
-  match plus_ex_dc_dc e1 e3 c with
-   [ pair h c' ⇒ pair … 〈h,e5〉 c' ] =
-  match plus_ex_dc_dc e3 e1 c with
-   [ pair h c' ⇒ pair … 〈h,e5〉 c' ]);
+  match plus_ex_dc_dc e1 e3 c with [ pair h c' ⇒ pair … 〈h,e5〉 c' ] =
+  match plus_ex_dc_dc e3 e1 c with [ pair h c' ⇒ pair … 〈h,e5〉 c' ]);
  nrewrite > (symmetric_plusex_dc_dc e1 e3 c);
  napply refl_eq.
 nqed.
@@ -226,10 +212,8 @@ nlemma symmetric_plusb8_d_d : ∀b1,b2.plus_b8_d_d b1 b2 = plus_b8_d_d b2 b1.
  nelim b2;
  #e3; #e4;
  nchange with (
-  match plus_ex_d_dc e2 e4 with
-   [ pair l c ⇒ 〈plus_ex_dc_d e1 e3 c,l〉 ] =
-  match plus_ex_d_dc e4 e2 with
-   [ pair l c ⇒ 〈plus_ex_dc_d e3 e1 c,l〉 ]);
+  match plus_ex_d_dc e2 e4 with [ pair l c ⇒ 〈plus_ex_dc_d e1 e3 c,l〉 ] =
+  match plus_ex_d_dc e4 e2 with [ pair l c ⇒ 〈plus_ex_dc_d e3 e1 c,l〉 ]);
  nrewrite > (symmetric_plusex_d_dc e4 e2);
  ncases (plus_ex_d_dc e2 e4);
  #e5; #c;
@@ -320,7 +304,7 @@ nlemma neqb8_to_neq : ∀b1,b2:byte8.(eq_b8 b1 b2 = false) → (b1 ≠ b2).
  #e1; #e2; #e3; #e4;
  nchange with ((((eq_ex e3 e1) ⊗ (eq_ex e4 e2)) = false) → ?);
  #H;
- napply (or2_elim ((eq_ex e3 e1) = false) ((eq_ex e4 e2) = false) ? (andb_false … H) …);
+ napply (or2_elim ((eq_ex e3 e1) = false) ((eq_ex e4 e2) = false) ? (andb_false2 … H) …);
  ##[ ##1: #H1; napply (decidable_b8_aux1 … (neqex_to_neq … H1))
  ##| ##2: #H1; napply (decidable_b8_aux2 … (neqex_to_neq … H1))
  ##]
index cbb03f412583c669396c5bded4a70b8494c7b47d..2ccd1e3c10e41af7f722aa8599ceae85bcd5f8d7 100755 (executable)
@@ -27,174 +27,16 @@ include "num/bool_lemmas.ma".
 (* ESADECIMALI *)
 (* *********** *)
 
-ndefinition exadecim_destruct1 : Πe2.ΠP:Prop.ΠH:x0 = e2.match e2 with [ x0 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##1: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x0 with [ x0 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct2 : Πe2.ΠP:Prop.ΠH:x1 = e2.match e2 with [ x1 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##2: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x1 with [ x1 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct3 : Πe2.ΠP:Prop.ΠH:x2 = e2.match e2 with [ x2 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##3: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x2 with [ x2 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct4 : Πe2.ΠP:Prop.ΠH:x3 = e2.match e2 with [ x3 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##4: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x3 with [ x3 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct5 : Πe2.ΠP:Prop.ΠH:x4 = e2.match e2 with [ x4 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##5: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x4 with [ x4 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct6 : Πe2.ΠP:Prop.ΠH:x5 = e2.match e2 with [ x5 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##6: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x5 with [ x5 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct7 : Πe2.ΠP:Prop.ΠH:x6 = e2.match e2 with [ x6 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##7: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x6 with [ x6 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct8 : Πe2.ΠP:Prop.ΠH:x7 = e2.match e2 with [ x7 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##8: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x7 with [ x7 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct9 : Πe2.ΠP:Prop.ΠH:x8 = e2.match e2 with [ x8 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##9: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x8 with [ x8 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct10 : Πe2.ΠP:Prop.ΠH:x9 = e2.match e2 with [ x9 ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##10: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match x9 with [ x9 ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct11 : Πe2.ΠP:Prop.ΠH:xA = e2.match e2 with [ xA ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##11: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xA with [ xA ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct12 : Πe2.ΠP:Prop.ΠH:xB = e2.match e2 with [ xB ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##12: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xB with [ xB ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct13 : Πe2.ΠP:Prop.ΠH:xC = e2.match e2 with [ xC ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##13: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xC with [ xC ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct14 : Πe2.ΠP:Prop.ΠH:xD = e2.match e2 with [ xD ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##14: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xD with [ xD ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct15 : Πe2.ΠP:Prop.ΠH:xE = e2.match e2 with [ xE ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##15: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xE with [ xE ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
-ndefinition exadecim_destruct16 : Πe2.ΠP:Prop.ΠH:xF = e2.match e2 with [ xF ⇒ P → P | _ ⇒ P ].
- #e2; #P; ncases e2; nnormalize; #H;
- ##[ ##16: napply (λx:P.x)
- ##| ##*: napply False_ind;
-          nchange with (match xF with [ xF ⇒ False | _ ⇒ True ]);
-          nrewrite > H; nnormalize; napply I
- ##]
-nqed.
-
 ndefinition exadecim_destruct_aux ≝
 Πe1,e2.ΠP:Prop.ΠH:e1 = e2.
- match e1 with
-  [ x0 ⇒ match e2 with [ x0 ⇒ P → P | _ ⇒ P ] | x1 ⇒ match e2 with [ x1 ⇒ P → P | _ ⇒ P ]
-  | x2 ⇒ match e2 with [ x2 ⇒ P → P | _ ⇒ P ] | x3 ⇒ match e2 with [ x3 ⇒ P → P | _ ⇒ P ]
-  | x4 ⇒ match e2 with [ x4 ⇒ P → P | _ ⇒ P ] | x5 ⇒ match e2 with [ x5 ⇒ P → P | _ ⇒ P ]
-  | x6 ⇒ match e2 with [ x6 ⇒ P → P | _ ⇒ P ] | x7 ⇒ match e2 with [ x7 ⇒ P → P | _ ⇒ P ]
-  | x8 ⇒ match e2 with [ x8 ⇒ P → P | _ ⇒ P ] | x9 ⇒ match e2 with [ x9 ⇒ P → P | _ ⇒ P ]
-  | xA ⇒ match e2 with [ xA ⇒ P → P | _ ⇒ P ] | xB ⇒ match e2 with [ xB ⇒ P → P | _ ⇒ P ]
-  | xC ⇒ match e2 with [ xC ⇒ P → P | _ ⇒ P ] | xD ⇒ match e2 with [ xD ⇒ P → P | _ ⇒ P ]
-  | xE ⇒ match e2 with [ xE ⇒ P → P | _ ⇒ P ] | xF ⇒ match e2 with [ xF ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_ex e1 e2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition exadecim_destruct : exadecim_destruct_aux.
- #e1; ncases e1;
- ##[ ##1: napply exadecim_destruct1 ##| ##2: napply exadecim_destruct2
- ##| ##3: napply exadecim_destruct3 ##| ##4: napply exadecim_destruct4
- ##| ##5: napply exadecim_destruct5 ##| ##6: napply exadecim_destruct6
- ##| ##7: napply exadecim_destruct7 ##| ##8: napply exadecim_destruct8
- ##| ##9: napply exadecim_destruct9 ##| ##10: napply exadecim_destruct10
- ##| ##11: napply exadecim_destruct11 ##| ##12: napply exadecim_destruct12
- ##| ##13: napply exadecim_destruct13 ##| ##14: napply exadecim_destruct14
- ##| ##15: napply exadecim_destruct15 ##| ##16: napply exadecim_destruct16
- ##]
+ #e1; #e2; #P; #H;
+ nrewrite < H;
+ nelim e1;
+ nnormalize;
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqex : symmetricT exadecim bool eq_ex.
@@ -484,7 +326,10 @@ nlemma decidable_ex : ∀x,y:exadecim.decidable (x = y).
  nelim x;
  nelim y;
  ##[ ##1,18,35,52,69,86,103,120,137,154,171,188,205,222,239,256: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
- ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (exadecim_destruct … H)
+ ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …);
+          nnormalize; #H;
+          napply False_ind;
+          napply (exadecim_destruct … H)
  ##]
 nqed.
 
index 2d754d79937f7d57beb2539560c58312fbf4d5a0..7cb82090dac1d0945cd867272545e200bea83d5d 100755 (executable)
@@ -29,69 +29,14 @@ include "num/bool_lemmas.ma".
 
 ndefinition oct_destruct_aux ≝
 Πn1,n2:oct.ΠP:Prop.n1 = n2 →
- match n1 with
-  [ o0 ⇒ match n2 with [ o0 ⇒ P → P | _ ⇒ P ]
-  | o1 ⇒ match n2 with [ o1 ⇒ P → P | _ ⇒ P ]
-  | o2 ⇒ match n2 with [ o2 ⇒ P → P | _ ⇒ P ]
-  | o3 ⇒ match n2 with [ o3 ⇒ P → P | _ ⇒ P ]
-  | o4 ⇒ match n2 with [ o4 ⇒ P → P | _ ⇒ P ]
-  | o5 ⇒ match n2 with [ o5 ⇒ P → P | _ ⇒ P ]
-  | o6 ⇒ match n2 with [ o6 ⇒ P → P | _ ⇒ P ]
-  | o7 ⇒ match n2 with [ o7 ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_oct n1 n2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition oct_destruct : oct_destruct_aux.
- #n1; #n2; #P;
+ #n1; #n2; #P; #H;
+ nrewrite < H;
  nelim n1;
- ##[ ##1: nelim n2; nnormalize; #H;
-          ##[ ##1: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o0 with [ o0 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##2: nelim n2; nnormalize; #H;
-          ##[ ##2: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o1 with [ o1 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##3: nelim n2; nnormalize; #H;
-          ##[ ##3: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o2 with [ o2 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##4: nelim n2; nnormalize; #H;
-          ##[ ##4: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o3 with [ o3 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##5: nelim n2; nnormalize; #H;
-          ##[ ##5: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o4 with [ o4 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##6: nelim n2; nnormalize; #H;
-          ##[ ##6: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o5 with [ o5 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##7: nelim n2; nnormalize; #H;
-          ##[ ##7: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o6 with [ o6 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##8: nelim n2; nnormalize; #H;
-          ##[ ##8: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match o7 with [ o7 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##]
+ nnormalize;
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqoct : symmetricT oct bool eq_oct.
@@ -128,7 +73,10 @@ nlemma decidable_oct : ∀x,y:oct.decidable (x = y).
  nelim x;
  nelim y;
  ##[ ##1,10,19,28,37,46,55,64: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
- ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (oct_destruct … H)
+ ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …);
+          nnormalize; #H;
+          napply False_ind;
+          napply (oct_destruct … H)
  ##]
 nqed.
 
index 00e559ed4b1b44b292fbcf0cb2cf777c51432278..339d4f701484e529cf85a24927c921e4bc319e62 100755 (executable)
@@ -29,41 +29,14 @@ include "num/bool_lemmas.ma".
 
 ndefinition quatern_destruct_aux ≝
 Πn1,n2:quatern.ΠP:Prop.n1 = n2 →
- match n1 with
-  [ q0 ⇒ match n2 with [ q0 ⇒ P → P | _ ⇒ P ]
-  | q1 ⇒ match n2 with [ q1 ⇒ P → P | _ ⇒ P ]
-  | q2 ⇒ match n2 with [ q2 ⇒ P → P | _ ⇒ P ]
-  | q3 ⇒ match n2 with [ q3 ⇒ P → P | _ ⇒ P ]
-  ].
+ match eq_qu n1 n2 with [ true ⇒ P → P | false ⇒ P ].
 
 ndefinition quatern_destruct : quatern_destruct_aux.
- #n1; #n2; #P;
+ #n1; #n2; #P; #H;
+ nrewrite < H;
  nelim n1;
- ##[ ##1: nelim n2; nnormalize; #H;
-          ##[ ##1: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match q0 with [ q0 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##2: nelim n2; nnormalize; #H;
-          ##[ ##2: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match q1 with [ q1 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##3: nelim n2; nnormalize; #H;
-          ##[ ##3: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match q2 with [ q2 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##| ##4: nelim n2; nnormalize; #H;
-          ##[ ##4: napply (λx:P.x)
-          ##| ##*: napply False_ind;
-                   nchange with (match q3 with [ q3 ⇒ False | _ ⇒ True ]);
-                   nrewrite > H; nnormalize; napply I
-          ##]
- ##]
+ nnormalize;
+ napply (λx.x).
 nqed.
 
 nlemma symmetric_eqqu : symmetricT quatern bool eq_qu.
@@ -100,7 +73,10 @@ nlemma decidable_qu : ∀x,y:quatern.decidable (x = y).
  nelim x;
  nelim y;
  ##[ ##1,6,11,16: napply (or2_intro1 (? = ?) (? ≠ ?) …); napply refl_eq
- ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …); nnormalize; #H; napply False_ind; napply (quatern_destruct … H)
+ ##| ##*: napply (or2_intro2 (? = ?) (? ≠ ?) …);
+          nnormalize; #H;
+          napply False_ind;
+          napply (quatern_destruct … H)
  ##]
 nqed.
 
index 06030fffb9ed0c5dae9f29052265261602722315..56a54ae999455fc1e429df0d168d354aaf1e704e 100755 (executable)
@@ -143,20 +143,14 @@ nlemma symmetric_plusw16_dc_dc : ∀w1,w2,c.plus_w16_dc_dc w1 w2 c = plus_w16_dc
  nelim w2;
  #b3; #b4;
  nchange with (
-  match plus_b8_dc_dc b2 b4 c with
-   [ pair l c ⇒ match plus_b8_dc_dc b1 b3 c with
-    [ pair h c' ⇒ pair … 〈h:l〉 c' ]] =
-  match plus_b8_dc_dc b4 b2 c with
-   [ pair l c ⇒ match plus_b8_dc_dc b3 b1 c with
-    [ pair h c' ⇒ pair … 〈h:l〉 c' ]]);
+  match plus_b8_dc_dc b2 b4 c with [ pair l c ⇒ match plus_b8_dc_dc b1 b3 c with [ pair h c' ⇒ pair … 〈h:l〉 c' ]] =
+  match plus_b8_dc_dc b4 b2 c with [ pair l c ⇒ match plus_b8_dc_dc b3 b1 c with [ pair h c' ⇒ pair … 〈h:l〉 c' ]]);
  nrewrite > (symmetric_plusb8_dc_dc b4 b2 c);
  ncases (plus_b8_dc_dc b2 b4 c);
  #b5; #c1;
  nchange with (
-  match plus_b8_dc_dc b1 b3 c1 with
-   [ pair h c' ⇒ pair … 〈h:b5〉 c' ] =
-  match plus_b8_dc_dc b3 b1 c1 with
-   [ pair h c' ⇒ pair … 〈h:b5〉 c' ]);
+  match plus_b8_dc_dc b1 b3 c1 with [ pair h c' ⇒ pair … 〈h:b5〉 c' ] =
+  match plus_b8_dc_dc b3 b1 c1 with [ pair h c' ⇒ pair … 〈h:b5〉 c' ]);
  nrewrite > (symmetric_plusb8_dc_dc b1 b3 c1);
  napply refl_eq.
 nqed.
@@ -168,10 +162,8 @@ nlemma symmetric_plusw16_dc_d : ∀w1,w2,c.plus_w16_dc_d w1 w2 c = plus_w16_dc_d
  nelim w2;
  #b3; #b4;
  nchange with (
-  match plus_b8_dc_dc b2 b4 c with
-   [ pair l c ⇒ 〈plus_b8_dc_d b1 b3 c:l〉 ] =
-  match plus_b8_dc_dc b4 b2 c with
-   [ pair l c ⇒ 〈plus_b8_dc_d b3 b1 c:l〉 ]);
+  match plus_b8_dc_dc b2 b4 c with [ pair l c ⇒ 〈plus_b8_dc_d b1 b3 c:l〉 ] =
+  match plus_b8_dc_dc b4 b2 c with [ pair l c ⇒ 〈plus_b8_dc_d b3 b1 c:l〉 ]);
  nrewrite > (symmetric_plusb8_dc_dc b4 b2 c);
  ncases (plus_b8_dc_dc b2 b4 c);
  #b5; #c1;
@@ -201,20 +193,14 @@ nlemma symmetric_plusw16_d_dc : ∀w1,w2.plus_w16_d_dc w1 w2 = plus_w16_d_dc w2
  nelim w2;
  #b3; #b4;
  nchange with (
-  match plus_b8_d_dc b2 b4 with
-   [ pair l c ⇒ match plus_b8_dc_dc b1 b3 c with
-    [ pair h c' ⇒ pair … 〈h:l〉 c' ]] =
-  match plus_b8_d_dc b4 b2 with
-   [ pair l c ⇒ match plus_b8_dc_dc b3 b1 c with
-    [ pair h c' ⇒ pair … 〈h:l〉 c' ]]);
+  match plus_b8_d_dc b2 b4 with [ pair l c ⇒ match plus_b8_dc_dc b1 b3 c with [ pair h c' ⇒ pair … 〈h:l〉 c' ]] =
+  match plus_b8_d_dc b4 b2 with [ pair l c ⇒ match plus_b8_dc_dc b3 b1 c with [ pair h c' ⇒ pair … 〈h:l〉 c' ]]);
  nrewrite > (symmetric_plusb8_d_dc b4 b2);
  ncases (plus_b8_d_dc b2 b4);
  #b5; #c;
  nchange with (
-  match plus_b8_dc_dc b1 b3 c with
-   [ pair h c' ⇒ pair … 〈h:b5〉 c' ] =
-  match plus_b8_dc_dc b3 b1 c with
-   [ pair h c' ⇒ pair … 〈h:b5〉 c' ]);
+  match plus_b8_dc_dc b1 b3 c with [ pair h c' ⇒ pair … 〈h:b5〉 c' ] =
+  match plus_b8_dc_dc b3 b1 c with [ pair h c' ⇒ pair … 〈h:b5〉 c' ]);
  nrewrite > (symmetric_plusb8_dc_dc b1 b3 c);
  napply refl_eq.
 nqed.
@@ -226,10 +212,8 @@ nlemma symmetric_plusw16_d_d : ∀w1,w2.plus_w16_d_d w1 w2 = plus_w16_d_d w2 w1.
  nelim w2;
  #b3; #b4;
  nchange with (
-  match plus_b8_d_dc b2 b4 with
-   [ pair l c ⇒ 〈plus_b8_dc_d b1 b3 c:l〉 ] =
-  match plus_b8_d_dc b4 b2 with
-   [ pair l c ⇒ 〈plus_b8_dc_d b3 b1 c:l〉 ]);
+  match plus_b8_d_dc b2 b4 with [ pair l c ⇒ 〈plus_b8_dc_d b1 b3 c:l〉 ] =
+  match plus_b8_d_dc b4 b2 with [ pair l c ⇒ 〈plus_b8_dc_d b3 b1 c:l〉 ]);
  nrewrite > (symmetric_plusb8_d_dc b4 b2);
  ncases (plus_b8_d_dc b2 b4);
  #b5; #c;
@@ -359,7 +343,7 @@ nlemma neqw16_to_neq : ∀w1,w2:word16.(eq_w16 w1 w2 = false) → (w1 ≠ w2).
  #b1; #b2; #b3; #b4;
  nchange with ((((eq_b8 b3 b1) ⊗ (eq_b8 b4 b2)) = false) → ?);
  #H;
- napply (or2_elim ((eq_b8 b3 b1) = false) ((eq_b8 b4 b2) = false) ? (andb_false … H) …);
+ napply (or2_elim ((eq_b8 b3 b1) = false) ((eq_b8 b4 b2) = false) ? (andb_false2 … H) …);
  ##[ ##1: #H1; napply (decidable_w16_aux1 … (neqb8_to_neq … H1))
  ##| ##2: #H1; napply (decidable_w16_aux2 … (neqb8_to_neq … H1))
  ##]
index 7f1c9ddc8d08d769ced18c0faf357fd23a6d7158..5f42bbc7bc22401e8c01f34dd5cf76b0ed63bd0a 100755 (executable)
@@ -143,20 +143,14 @@ nlemma symmetric_plusw32_dc_dc : ∀dw1,dw2,c.plus_w32_dc_dc dw1 dw2 c = plus_w3
  nelim dw2;
  #w3; #w4;
  nchange with (
-  match plus_w16_dc_dc w2 w4 c with
-   [ pair l c ⇒ match plus_w16_dc_dc w1 w3 c with
-    [ pair h c' ⇒ pair … 〈h.l〉 c' ]] =
-  match plus_w16_dc_dc w4 w2 c with
-   [ pair l c ⇒ match plus_w16_dc_dc w3 w1 c with
-    [ pair h c' ⇒ pair … 〈h.l〉 c' ]]);
+  match plus_w16_dc_dc w2 w4 c with [ pair l c ⇒ match plus_w16_dc_dc w1 w3 c with [ pair h c' ⇒ pair … 〈h.l〉 c' ]] =
+  match plus_w16_dc_dc w4 w2 c with [ pair l c ⇒ match plus_w16_dc_dc w3 w1 c with [ pair h c' ⇒ pair … 〈h.l〉 c' ]]);
  nrewrite > (symmetric_plusw16_dc_dc w4 w2 c);
  ncases (plus_w16_dc_dc w2 w4 c);
  #w5; #c1;
  nchange with (
-  match plus_w16_dc_dc w1 w3 c1 with
-   [ pair h c' ⇒ pair … 〈h.w5〉 c' ] =
-  match plus_w16_dc_dc w3 w1 c1 with
-   [ pair h c' ⇒ pair … 〈h.w5〉 c' ]);
+  match plus_w16_dc_dc w1 w3 c1 with [ pair h c' ⇒ pair … 〈h.w5〉 c' ] =
+  match plus_w16_dc_dc w3 w1 c1 with [ pair h c' ⇒ pair … 〈h.w5〉 c' ]);
  nrewrite > (symmetric_plusw16_dc_dc w1 w3 c1);
  napply refl_eq.
 nqed.
@@ -168,10 +162,8 @@ nlemma symmetric_plusw32_dc_d : ∀dw1,dw2,c.plus_w32_dc_d dw1 dw2 c = plus_w32_
  nelim dw2;
  #w3; #w4;
  nchange with (
-  match plus_w16_dc_dc w2 w4 c with
-   [ pair l c ⇒ 〈plus_w16_dc_d w1 w3 c.l〉 ] =
-  match plus_w16_dc_dc w4 w2 c with
-   [ pair l c ⇒ 〈plus_w16_dc_d w3 w1 c.l〉 ]);
+  match plus_w16_dc_dc w2 w4 c with [ pair l c ⇒ 〈plus_w16_dc_d w1 w3 c.l〉 ] =
+  match plus_w16_dc_dc w4 w2 c with [ pair l c ⇒ 〈plus_w16_dc_d w3 w1 c.l〉 ]);
  nrewrite > (symmetric_plusw16_dc_dc w4 w2 c);
  ncases (plus_w16_dc_dc w2 w4 c);
  #w5; #c1;
@@ -201,20 +193,14 @@ nlemma symmetric_plusw32_d_dc : ∀dw1,dw2.plus_w32_d_dc dw1 dw2 = plus_w32_d_dc
  nelim dw2;
  #w3; #w4;
  nchange with (
-  match plus_w16_d_dc w2 w4 with
-   [ pair l c ⇒ match plus_w16_dc_dc w1 w3 c with
-    [ pair h c' ⇒ pair … 〈h.l〉 c' ]] =
-  match plus_w16_d_dc w4 w2 with
-   [ pair l c ⇒ match plus_w16_dc_dc w3 w1 c with
-    [ pair h c' ⇒ pair … 〈h.l〉 c' ]]);
+  match plus_w16_d_dc w2 w4 with [ pair l c ⇒ match plus_w16_dc_dc w1 w3 c with [ pair h c' ⇒ pair … 〈h.l〉 c' ]] =
+  match plus_w16_d_dc w4 w2 with [ pair l c ⇒ match plus_w16_dc_dc w3 w1 c with [ pair h c' ⇒ pair … 〈h.l〉 c' ]]);
  nrewrite > (symmetric_plusw16_d_dc w4 w2);
  ncases (plus_w16_d_dc w2 w4);
  #w5; #c;
  nchange with (
-  match plus_w16_dc_dc w1 w3 c with
-   [ pair h c' ⇒ pair … 〈h.w5〉 c' ] =
-  match plus_w16_dc_dc w3 w1 c with
-   [ pair h c' ⇒ pair … 〈h.w5〉 c' ]);
+  match plus_w16_dc_dc w1 w3 c with [ pair h c' ⇒ pair … 〈h.w5〉 c' ] =
+  match plus_w16_dc_dc w3 w1 c with [ pair h c' ⇒ pair … 〈h.w5〉 c' ]);
  nrewrite > (symmetric_plusw16_dc_dc w1 w3 c);
  napply refl_eq.
 nqed.
@@ -226,10 +212,8 @@ nlemma symmetric_plusw32_d_d : ∀dw1,dw2.plus_w32_d_d dw1 dw2 = plus_w32_d_d dw
  nelim dw2;
  #w3; #w4;
  nchange with (
-  match plus_w16_d_dc w2 w4 with
-   [ pair l c ⇒ 〈plus_w16_dc_d w1 w3 c.l〉 ] =
-  match plus_w16_d_dc w4 w2 with
-   [ pair l c ⇒ 〈plus_w16_dc_d w3 w1 c.l〉 ]);
+  match plus_w16_d_dc w2 w4 with [ pair l c ⇒ 〈plus_w16_dc_d w1 w3 c.l〉 ] =
+  match plus_w16_d_dc w4 w2 with [ pair l c ⇒ 〈plus_w16_dc_d w3 w1 c.l〉 ]);
  nrewrite > (symmetric_plusw16_d_dc w4 w2);
  ncases (plus_w16_d_dc w2 w4);
  #w5; #c;
@@ -359,7 +343,7 @@ nlemma neqw32_to_neq : ∀dw1,dw2:word32.(eq_w32 dw1 dw2 = false) → (dw1 ≠ d
  #w1; #w2; #w3; #w4;
  nchange with ((((eq_w16 w3 w1) ⊗ (eq_w16 w4 w2)) = false) → ?);
  #H;
- napply (or2_elim ((eq_w16 w3 w1) = false) ((eq_w16 w4 w2) = false) ? (andb_false … H) …);
+ napply (or2_elim ((eq_w16 w3 w1) = false) ((eq_w16 w4 w2) = false) ? (andb_false2 … H) …);
  ##[ ##1: #H1; napply (decidable_w32_aux1 … (neqw16_to_neq … H1))
  ##| ##2: #H1; napply (decidable_w32_aux2 … (neqw16_to_neq … H1))
  ##]