@@ -2955,14 +2955,53 @@ theorem sumPackedVec_setWidth {x : BitVec ((k + 1) * w)} :
29552955 rw [BitVec.add_comm]
29562956 rw [BitVec.add_sub_cancel]
29572957
2958- theorem sumPackedVec_eq_add_head {x : BitVec ((k + 1 ) * w)} :
2959- x.sumPackedVec = extractLsb' 0 w x + (extractLsb' w (k * w) x).sumPackedVec := by
2960- simp [sumPackedVec]
2961- sorry
2958+ theorem append_extractAndExtendPopulate_eq (x : BitVec w) :
2959+ (0 #1 ++ x).extractAndExtendPopulate w =
2960+ (0 #w ++ (x.extractAndExtendPopulate w)).cast (by simp [Nat.add_mul]) := by
2961+ conv =>
2962+ lhs
2963+ unfold extractAndExtendPopulate extractAndExtendPopulateAux
2964+ split
2965+ · omega
2966+ · case _ n heq =>
2967+ simp
2968+ unfold extractAndExtendPopulate
2969+ simp
2970+
2971+
2972+ sorry
2973+
2974+ theorem append_sumPackedVec (x : BitVec w) :
2975+ ((0 #w ++ extractAndExtendPopulate w x).cast (by simp [Nat.add_mul, Nat.add_comm])).sumPackedVec (n := (1 + w)) (w := w) =
2976+ 0 #w + (x.extractAndExtendPopulate w).sumPackedVec := by sorry
29622977
2963- theorem extractAndExtendPopulate_sumPackedVec_extractLsb' (x : BitVec (w + 1 )):
2964- ((extractLsb' 1 w x).extractAndExtendPopulate w).sumPackedVec =
2965- (((extractLsb' 1 w x).zeroExtend (w + 1 )).extractAndExtendPopulate w).sumPackedVec := by sorry
2978+ -- ((y.zeroExtend (w + 1)).extractAndExtendPopulate w).sumPackedVec
2979+ -- = ((0#1 ++ y).extractAndExtendPopulate w).sumPackedVec
2980+ theorem append_extractAndExtendPopulate_sumPackedVec (x : BitVec w) :
2981+ ((0 #1 ++ x).extractAndExtendPopulate w).sumPackedVec =
2982+ 0 #w + (x.extractAndExtendPopulate w).sumPackedVec := by
2983+ rcases w with _|w
2984+ · simp [of_length_zero]
2985+ · simp
2986+ rw [append_extractAndExtendPopulate_eq]
2987+ rw [append_sumPackedVec (x := x) (w := w + 1 )]
2988+ simp
2989+
2990+ -- = (0#w ++ y.extractAndExtendPopulate w).sumPackedVec
2991+ --
2992+ -- = (0#w + (y.extractAndExtendPopulate w).sumPackedVec
2993+ -- = (y.extractAndExtendPopulate w).sumPackedVec
2994+
2995+ theorem extractAndExtendPopulate_sumPackedVec_extractLsb' (y : BitVec w):
2996+ (y.extractAndExtendPopulate w).sumPackedVec =
2997+ ((y.zeroExtend (w + 1 )).extractAndExtendPopulate w).sumPackedVec := by
2998+ induction w
2999+ · case zero =>
3000+ simp [extractAndExtendPopulate, extractAndExtendPopulateAux]
3001+ simp [of_length_zero]
3002+ · case _ w' ihw' =>
3003+
3004+ sorry
29663005
29673006
29683007theorem extractAndExtendPopulate_sumPackedVec_eq_add (x : BitVec (w + 1 )):
0 commit comments