]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/library/freescale/medium_tests.ma
A) New version.
[helm.git] / helm / software / matita / library / freescale / medium_tests.ma
index 41cc96ae9ccfcfe255853171d788a09758f3e990..20a0da441095905c70ae6a5942766170fc130a7f 100644 (file)
 (*                    data ultima modifica 15/11/2007                     *)
 (* ********************************************************************** *)
 
-set "baseuri" "cic:/matita/freescale/medium_tests/".
-
-(*include "/media/VIRTUOSO/freescale/medium_tests_tools.ma".*)
-include "freescale/medium_tests_tools.ma".
-
+include "freescale/medium_tests_lemmas.ma".
 (* ************************ *)
 (* HCS08GB60 String Reverse *)
 (* ************************ *)
@@ -117,7 +114,7 @@ let m ≝ HCS08 in source_to_byte8 m (
 (* [0x1929] 22 BD BHI *-65 ; 18E8 *) (compile m ? BHI (maIMM1 〈xB,xD〉) I)
 
 (* [0x192B] attraverso simulazione in CodeWarrior si puo' enunciare che dopo
-            42+79*n+(n>>9) ci sara' il reverse di n byte (PARI) e
+            42+79*n+5*(n>>9) ci sara' il reverse di n byte (PARI) e
             H:X=n/2 *)
  ).
 
@@ -157,8 +154,8 @@ lemma dTest_HCS08_sReverse_dump_aux ≝
  (match execute HCS08 t
   (* parametri IN: t,H:X,strlen(string),string *)
   (TickOK ? (dTest_HCS08_sReverse_status t 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen string) string))
-  (* tempo di esecuzione 25700+150*n *)
-  (42+79*(byte8_strlen string)+((byte8_strlen string)/512)) with
+  (* tempo di esecuzione 42+79*n+5*(n>>9) *)
+  (42+79*(byte8_strlen string)+5*((byte8_strlen string)/512)) with
    [ TickERR s _ ⇒ None ?
    (* azzeramento tutta RAM tranne dati *)
    | TickSUSP s _ ⇒ None ? 
@@ -166,7 +163,8 @@ lemma dTest_HCS08_sReverse_dump_aux ≝
    ] =
   Some ? (byte8_reverse string)).
 
-(* primo sbozzo: confronto esecuzione con hexdump... *)
+(* confronto esecuzione con hexdump... *)
+(*
 lemma dTest_HCS08_sReverse_dump :
  dTest_HCS08_sReverse_dump_aux MEM_TREE dTest_random_32.
  unfold dTest_HCS08_sReverse_dump_aux;
@@ -174,6 +172,7 @@ lemma dTest_HCS08_sReverse_dump :
  [ split; [ normalize in ⊢ (%); autobatch ] reflexivity ]
  reflexivity.
 qed.
+*)
 
 (* parametrizzazione dell'enunciato del teorema *)
 (* dimostrazione senza svolgimento degli stati *)
@@ -187,29 +186,84 @@ lemma dTest_HCS08_sReverse_aux ≝
  (match execute HCS08 t
   (* parametri IN: t,H:X,strlen(string),string *)
   (TickOK ? (dTest_HCS08_sReverse_status t 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen string) string))
-  (* tempo di esecuzione 25700+150*n *)
-  (42+79*(byte8_strlen string)+((byte8_strlen string)/512)) with
+  (* tempo di esecuzione 42+79*n+5*(n>>9) *)
+  (42+79*(byte8_strlen string)+5*((byte8_strlen string)/512)) with
    [ TickERR s _ ⇒ None ?
    (* azzeramento tutta RAM tranne dati *)
    | TickSUSP s _ ⇒ None ? 
-   | TickOK s ⇒ Some ? (set_mem_desc HCS08 t s (load_from_source_at t (get_mem_desc HCS08 t s) dTest_bytes 〈〈x0,xD〉:〈x0,x0〉〉))
+   | TickOK s ⇒ Some ? (set_mem_desc HCS08 t s (load_from_source_at t (get_mem_desc HCS08 t s) dTest_zeros 〈〈x0,xD〉:〈x0,x0〉〉))
    ] =
   Some ? (set_pc_reg HCS08 t
-   (dTest_HCS08_sReverse_status t (fstT ?? (shr_w16 (byte8_strlen string))) (byte8_strlen string) (byte8_reverse string)) 
+   (dTest_HCS08_sReverse_status t (fst ?? (shr_w16 (byte8_strlen string))) (byte8_strlen string) (byte8_reverse string)) 
    (mk_word16 (mk_byte8 x1 x9) (mk_byte8 x2 xB)))).
 
-(* dimostrazione senza svolgimento degli stati *)
-(* sembra corretta, ma non basta la memoria per arrivare in fondo con quelli grandi! *)
-(* NB: sono gia' pronti dei pattern piu' impegnativi in medium_tests_tool: *)
-(*     dTest_random_32/64/128/256/512/1024/2048/3072 generati con Mathematica *)
-(*     ex: dTest_HCS08_sReverse_aux MEM_TREE dTest_random_3072 sarebbe gia' un bell'obbiettivo! *)
+(*
 lemma dTest_HCS08_sReverse :
  dTest_HCS08_sReverse_aux MEM_TREE dTest_random_32.
  unfold dTest_HCS08_sReverse_aux;
  split;
  [ split; [ normalize in ⊢ (%); autobatch ] reflexivity ]
+
+ rewrite > (breakpoint HCS08 MEM_TREE (TickOK ? (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉   (byte8_strlen dTest_random_32) dTest_random_32)) 3 (39+79*byte8_strlen dTest_random_32+5*(byte8_strlen dTest_random_32/512))) in ⊢ (? ? match % in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?);
+ letin status0 ≝ (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen dTest_random_32) dTest_random_32);
+ change in ⊢ (? ? match ? ? ? (? ? ? % ?) ? in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?) with
+  (TickOK ? status0); 
+ rewrite > (execute_HCS08_LDHX_maIMM2 MEM_TREE status0 〈x0,x0〉 〈x2,x0〉) in ⊢ (? ? match ? ? ? % ? in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?);
+ [ 2,3,4,5: reflexivity; ]
+
+ letin status1 ≝ (set_pc_reg HCS08 MEM_TREE (setweak_v_flag HCS08 MEM_TREE (setweak_n_flag HCS08 MEM_TREE (set_z_flag HCS08 MEM_TREE (set_alu HCS08 MEM_TREE (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen dTest_random_32) dTest_random_32) (set_indX_16_reg_HC08 (alu HCS08 MEM_TREE (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen dTest_random_32) dTest_random_32)) 〈〈x0,x0〉:〈x2,x0〉〉)) (eq_w16 〈〈x0,x0〉:〈x2,x0〉〉 〈〈x0,x0〉:〈x0,x0〉〉)) (MSB_w16 〈〈x0,x0〉:〈x2,x0〉〉)) false) (filtered_plus_w16 HCS08 MEM_TREE (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen dTest_random_32) dTest_random_32) (get_pc_reg HCS08 MEM_TREE (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen dTest_random_32) dTest_random_32)) 3));
+ change in ⊢ (? ? match ? ? ? % ? in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?) with (TickOK ? status1);
+
+ rewrite > (breakpoint HCS08 MEM_TREE (TickOK ? status1) 5 (34+79*byte8_strlen dTest_random_32+5*(byte8_strlen dTest_random_32/512))) in ⊢ (? ? match % in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?);
+ change in ⊢ (? ? match ? ? ? (? ? ? % ?) ? in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?) with (TickOK ? status1);
+ rewrite > (execute_HCS08_STHX_maSP1 status1 〈x0,x4〉)
+  in ⊢ (? ? match ? ? ? % ? in tick_result return ? with [TickERR⇒?|TickSUSP⇒?|TickOK⇒?] ?);
+ [ 2,3,4,5,6,7: reflexivity; ]
+
+ elim daemon.
+
+qed.
+*)
+
+definition sReverseCalc ≝
+λstring:list byte8.
+ match execute HCS08 MEM_TREE
+  (TickOK ? (dTest_HCS08_sReverse_status MEM_TREE 〈〈x0,xD〉:〈x4,xB〉〉 (byte8_strlen string) string))
+  (42+79*(byte8_strlen string)+5*((byte8_strlen string)/512)) with
+   [ TickERR s _ ⇒ None ?
+   | TickSUSP s _ ⇒ None ? 
+   | TickOK s ⇒ Some ? (set_mem_desc HCS08 MEM_TREE s (load_from_source_at MEM_TREE (get_mem_desc HCS08 MEM_TREE s) dTest_zeros 〈〈x0,xD〉:〈x0,x0〉〉))
+   ]. 
+
+definition sReverseNoCalc ≝
+λstring:list byte8.
+ Some ? (set_pc_reg HCS08 MEM_TREE
+   (dTest_HCS08_sReverse_status MEM_TREE (fst ?? (shr_w16 (byte8_strlen string))) (byte8_strlen string) (byte8_reverse string)) 
+   (mk_word16 (mk_byte8 x1 x9) (mk_byte8 x2 xB))).
+
+definition sReverseCalc32   ≝ sReverseCalc dTest_random_32.
+definition sReverseCalc64   ≝ sReverseCalc dTest_random_64.
+definition sReverseCalc128  ≝ sReverseCalc dTest_random_128.
+definition sReverseCalc256  ≝ sReverseCalc dTest_random_256.
+definition sReverseCalc512  ≝ sReverseCalc dTest_random_512.
+definition sReverseCalc1024 ≝ sReverseCalc dTest_random_1024.
+definition sReverseCalc2048 ≝ sReverseCalc dTest_random_2048.
+definition sReverseCalc3072 ≝ sReverseCalc dTest_random_3072.
+
+definition sReverseNoCalc32   ≝ sReverseNoCalc dTest_random_32.
+definition sReverseNoCalc64   ≝ sReverseNoCalc dTest_random_64.
+definition sReverseNoCalc128  ≝ sReverseNoCalc dTest_random_128.
+definition sReverseNoCalc256  ≝ sReverseNoCalc dTest_random_256.
+definition sReverseNoCalc512  ≝ sReverseNoCalc dTest_random_512.
+definition sReverseNoCalc1024 ≝ sReverseNoCalc dTest_random_1024.
+definition sReverseNoCalc2048 ≝ sReverseNoCalc dTest_random_2048.
+definition sReverseNoCalc3072 ≝ sReverseNoCalc dTest_random_3072.
+
+(*
+lemma ver : sReverseCalc128 = sReverseNoCalc128.
  reflexivity.
 qed.
+*)
 
 (* *********************** *)
 (* HCS08GB60 Counting Sort *)
@@ -356,7 +410,7 @@ lemma dTest_HCS08_cSort_aux ≝
   ((nat_of_word16 〈〈x6,x4〉:〈x6,x4〉〉)+(nat_of_byte8 〈x9,x6〉)*(nat_of_word16 (byte8_strlen string))) with
    [ TickERR s _ ⇒ None ?
    (* azzeramento tutta RAM tranne dati *)
-   | TickSUSP s _ ⇒ Some ? (set_mem_desc HCS08 t s (load_from_source_at t (get_mem_desc HCS08 t s) dTest_bytes 〈〈x0,xD〉:〈x0,x0〉〉))
+   | TickSUSP s _ ⇒ Some ? (set_mem_desc HCS08 t s (load_from_source_at t (get_mem_desc HCS08 t s) dTest_zeros 〈〈x0,xD〉:〈x0,x0〉〉))
    | TickOK s ⇒ None ?
    ] =
   Some ? (set_pc_reg HCS08 t
@@ -364,11 +418,6 @@ lemma dTest_HCS08_cSort_aux ≝
    (mk_word16 (mk_byte8 x1 x9) (mk_byte8 x3 xC)))).
 
 (* dimostrazione senza svolgimento degli stati *)
-(* sembra corretta, ma non basta la memoria per arrivare in fondo nemmeno col piccolo! *)
-(* NB: sono gia' pronti dei pattern piu' impegnativi in medium_tests_tool: *)
-(*     dTest_random_32/64/128/256/512/1024/2048/3072 generati con Mathematica *)
-(*     ex: dTest_HCS08_cSort_aux MEM_TREE dTest_random_3072 sarebbe gia' un bell'obbiettivo! *)
-
 (*
 lemma dTest_HCS08_cSort :
  dTest_HCS08_cSort_aux MEM_TREE dTest_random_32.
@@ -378,3 +427,43 @@ lemma dTest_HCS08_cSort :
  reflexivity.
 qed.
 *)
+
+definition cSortCalc ≝
+λstring:list byte8.
+ match execute HCS08 MEM_TREE
+  (TickOK ? (dTest_HCS08_cSort_status MEM_TREE 〈x0,x0〉 〈〈x0,xF〉:〈x4,xC〉〉 (byte8_strlen string) string))
+  ((nat_of_word16 〈〈x6,x4〉:〈x6,x4〉〉)+(nat_of_byte8 〈x9,x6〉)*(nat_of_word16 (byte8_strlen string))) with
+   [ TickERR s _ ⇒ None ?
+   | TickSUSP s _ ⇒ Some ? (set_mem_desc HCS08 MEM_TREE s (load_from_source_at MEM_TREE (get_mem_desc HCS08 MEM_TREE s) dTest_zeros 〈〈x0,xD〉:〈x0,x0〉〉))
+   | TickOK s ⇒ None ?
+   ].
+
+definition cSortNoCalc ≝
+λstring:list byte8.
+ Some ? (set_pc_reg HCS08 MEM_TREE
+   (dTest_HCS08_cSort_status MEM_TREE 〈xF,xF〉 〈〈x0,x1〉:〈x0,x0〉〉 (byte8_strlen string) (byte8_list_ordering string)) 
+   (mk_word16 (mk_byte8 x1 x9) (mk_byte8 x3 xC))).
+
+definition cSortCalc32   ≝ cSortCalc dTest_random_32.
+definition cSortCalc64   ≝ cSortCalc dTest_random_64.
+definition cSortCalc128  ≝ cSortCalc dTest_random_128.
+definition cSortCalc256  ≝ cSortCalc dTest_random_256.
+definition cSortCalc512  ≝ cSortCalc dTest_random_512.
+definition cSortCalc1024 ≝ cSortCalc dTest_random_1024.
+definition cSortCalc2048 ≝ cSortCalc dTest_random_2048.
+definition cSortCalc3072 ≝ cSortCalc dTest_random_3072.
+
+definition cSortNoCalc32   ≝ cSortNoCalc dTest_random_32.
+definition cSortNoCalc64   ≝ cSortNoCalc dTest_random_64.
+definition cSortNoCalc128  ≝ cSortNoCalc dTest_random_128.
+definition cSortNoCalc256  ≝ cSortNoCalc dTest_random_256.
+definition cSortNoCalc512  ≝ cSortNoCalc dTest_random_512.
+definition cSortNoCalc1024 ≝ cSortNoCalc dTest_random_1024.
+definition cSortNoCalc2048 ≝ cSortNoCalc dTest_random_2048.
+definition cSortNoCalc3072 ≝ cSortNoCalc dTest_random_3072.
+
+(*
+lemma ver : cSortCalc32 = cSortNoCalc32.
+ reflexivity.
+qed.
+*)