diff --git a/theories/list_numbers.v b/theories/list_numbers.v index d6b0b99186d19116328906e29aa88695087ab2a4..0daef303c96279da4e7f68e100138b9f9590cdf9 100644 --- a/theories/list_numbers.v +++ b/theories/list_numbers.v @@ -30,7 +30,7 @@ Notation max_list := (max_list_with id). (** [Z_to_little_endian m n z] converts [z] into a list of [m] [n]-bit integers in the little endian format. A negative [z] is encoded using two's-complement. If [z] uses more than [m * n] bits, these additional -bits are discarded (see [Z_of_to_little_endian]). [n] should be non-negative. +bits are discarded (see [Z_to_little_endian_to_Z]). [n] should be non-negative. *) Fixpoint Z_to_little_endian (m : nat) (n : Z) (z : Z) : list Z := match m with @@ -38,13 +38,13 @@ Fixpoint Z_to_little_endian (m : nat) (n : Z) (z : Z) : list Z := | S m' => Z.land z (Z.ones n) :: Z_to_little_endian m' n (z ≫ n) end. -(** [Z_of_little_endian n bs] converts the list [bs] of [n]-bit integers +(** [little_endian_to_Z n bs] converts the list [bs] of [n]-bit integers into a number by interpreting [bs] as the little endian encoding. The integers [b] in [bs] should be in the range [0 ≤ b < 2 ^ n]. *) -Fixpoint Z_of_little_endian (n : Z) (bs : list Z) : Z := +Fixpoint little_endian_to_Z (n : Z) (bs : list Z) : Z := match bs with | [] => 0 - | b :: bs => Z.lor b (Z_of_little_endian n bs ≪ n) + | b :: bs => Z.lor b (little_endian_to_Z n bs ≪ n) end. @@ -215,16 +215,16 @@ Section sum_list. Proof. induction 1; simpl; lia. Qed. End sum_list. -(** ** Properties of the [Z_to_little_endian] and [Z_of_little_endian] functions *) +(** ** Properties of the [Z_to_little_endian] and [little_endian_to_Z] functions *) Section Z_little_endian. Local Open Scope Z_scope. Implicit Types m : nat. Implicit Types n z : Z. - Lemma Z_to_of_little_endian m n bs: + Lemma little_endian_to_Z_to_little_endian m n bs: m = length bs → 0 ≤ n → Forall (λ b, 0 ≤ b < 2 ^ n) bs → - Z_to_little_endian m n (Z_of_little_endian n bs) = bs. + Z_to_little_endian m n (little_endian_to_Z n bs) = bs. Proof. intros -> ?. induction 1 as [|b bs ? ? IH]; [done|]; csimpl. f_equal. @@ -243,9 +243,9 @@ Section Z_little_endian. Qed. (* TODO: replace the calls to [nia] by [lia] after dropping support for Coq 8.10.2. *) - Lemma Z_of_to_little_endian m n z: + Lemma Z_to_little_endian_to_Z m n z: 0 ≤ n → - Z_of_little_endian n (Z_to_little_endian m n z) = z `mod` 2 ^ (m * n). + little_endian_to_Z n (Z_to_little_endian m n z) = z `mod` 2 ^ ((Z.of_nat m) * n). Proof. intros. rewrite <-Z.land_ones by nia. revert z. induction m as [|m IH]; intros z; simpl. @@ -274,10 +274,10 @@ Section Z_little_endian. apply Z.mod_pos_bound, Z.pow_pos_nonneg; lia. Qed. - Lemma Z_of_little_endian_bound n bs: + Lemma little_endian_to_Z_bound n bs: 0 ≤ n → Forall (λ b, 0 ≤ b < 2 ^ n) bs → - 0 ≤ Z_of_little_endian n bs < 2 ^ (length bs * n). + 0 ≤ little_endian_to_Z n bs < 2 ^ (Z.of_nat (length bs) * n). Proof. intros ?. induction 1 as [|b bs Hb ? IH]; [done|]; simpl. apply Z_bounded_iff_bits_nonneg'; [nia|..]. @@ -285,6 +285,6 @@ Section Z_little_endian. intros z' ?. rewrite Z.lor_spec. rewrite Z_bounded_iff_bits_nonneg' in Hb by lia. rewrite Hb, orb_false_l, Z.shiftl_spec by nia. - apply (Z_bounded_iff_bits_nonneg' (length bs * n)); nia. + apply (Z_bounded_iff_bits_nonneg' (Z.of_nat (length bs) * n)); nia. Qed. End Z_little_endian.