@@ -2726,14 +2726,53 @@ theorem sumPackedVec_setWidth {x : BitVec ((k + 1) * w)} :
27262726 rw [BitVec.add_comm]
27272727 rw [BitVec.add_sub_cancel]
27282728
2729- theorem sumPackedVec_eq_add_head {x : BitVec ((k + 1 ) * w)} :
2730- x.sumPackedVec = extractLsb' 0 w x + (extractLsb' w (k * w) x).sumPackedVec := by
2731- simp [sumPackedVec]
2732- sorry
2729+ theorem append_extractAndExtendPopulate_eq (x : BitVec w) :
2730+ (0 #1 ++ x).extractAndExtendPopulate w =
2731+ (0 #w ++ (x.extractAndExtendPopulate w)).cast (by simp [Nat.add_mul]) := by
2732+ conv =>
2733+ lhs
2734+ unfold extractAndExtendPopulate extractAndExtendPopulateAux
2735+ split
2736+ · omega
2737+ · case _ n heq =>
2738+ simp
2739+ unfold extractAndExtendPopulate
2740+ simp
2741+
2742+
2743+ sorry
2744+
2745+ theorem append_sumPackedVec (x : BitVec w) :
2746+ ((0 #w ++ extractAndExtendPopulate w x).cast (by simp [Nat.add_mul, Nat.add_comm])).sumPackedVec (n := (1 + w)) (w := w) =
2747+ 0 #w + (x.extractAndExtendPopulate w).sumPackedVec := by sorry
27332748
2734- theorem extractAndExtendPopulate_sumPackedVec_extractLsb' (x : BitVec (w + 1 )):
2735- ((extractLsb' 1 w x).extractAndExtendPopulate w).sumPackedVec =
2736- (((extractLsb' 1 w x).zeroExtend (w + 1 )).extractAndExtendPopulate w).sumPackedVec := by sorry
2749+ -- ((y.zeroExtend (w + 1)).extractAndExtendPopulate w).sumPackedVec
2750+ -- = ((0#1 ++ y).extractAndExtendPopulate w).sumPackedVec
2751+ theorem append_extractAndExtendPopulate_sumPackedVec (x : BitVec w) :
2752+ ((0 #1 ++ x).extractAndExtendPopulate w).sumPackedVec =
2753+ 0 #w + (x.extractAndExtendPopulate w).sumPackedVec := by
2754+ rcases w with _|w
2755+ · simp [of_length_zero]
2756+ · simp
2757+ rw [append_extractAndExtendPopulate_eq]
2758+ rw [append_sumPackedVec (x := x) (w := w + 1 )]
2759+ simp
2760+
2761+ -- = (0#w ++ y.extractAndExtendPopulate w).sumPackedVec
2762+ --
2763+ -- = (0#w + (y.extractAndExtendPopulate w).sumPackedVec
2764+ -- = (y.extractAndExtendPopulate w).sumPackedVec
2765+
2766+ theorem extractAndExtendPopulate_sumPackedVec_extractLsb' (y : BitVec w):
2767+ (y.extractAndExtendPopulate w).sumPackedVec =
2768+ ((y.zeroExtend (w + 1 )).extractAndExtendPopulate w).sumPackedVec := by
2769+ induction w
2770+ · case zero =>
2771+ simp [extractAndExtendPopulate, extractAndExtendPopulateAux]
2772+ simp [of_length_zero]
2773+ · case _ w' ihw' =>
2774+
2775+ sorry
27372776
27382777
27392778theorem extractAndExtendPopulate_sumPackedVec_eq_add (x : BitVec (w + 1 )):
0 commit comments