X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2Fng_assembly%2Ffreescale%2Fopcode_base_lemmas1.ma;h=78a284c30224a49246ee638633eb3bf76d543e1e;hb=9dc61a4f11210bccf34f63f48968afca4261c1b4;hp=db51eb145e39c470b006b43b2102a4f04ec3efb5;hpb=38fccc2b774e493a94eedef76342b56079c0e694;p=helm.git diff --git a/helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas1.ma b/helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas1.ma index db51eb145..78a284c30 100755 --- a/helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas1.ma +++ b/helm/software/matita/contribs/ng_assembly/freescale/opcode_base_lemmas1.ma @@ -20,8 +20,8 @@ (* *) (* ********************************************************************** *) -include "freescale/opcode_base_lemmas_opcode2.ma". -include "freescale/opcode_base_lemmas_instrmode2.ma". +include "freescale/opcode_base_lemmas_opcode.ma". +include "freescale/opcode_base_lemmas_instrmode.ma". include "num/word16_lemmas.ma". (* ********************************************** *) @@ -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.