@@ -40,7 +40,7 @@ lemma testBit_true_eq_getBit_eq_1 (k n : Nat) : n.testBit k = ((Nat.getBit k n)
4040 simp only [one_and_eq_mod_two, mod_two_bne_zero, beq_iff_eq, and_one_is_mod]
4141
4242lemma testBit_false_eq_getBit_eq_0 (k n : Nat) :
43- (n.testBit k = false ) = ((Nat.getBit k n) = 0 ) := by
43+ (n.testBit k = false ) = ((Nat.getBit k n) = 0 ) := by
4444 unfold getBit
4545 rw [Nat.testBit]
4646 simp only [one_and_eq_mod_two, mod_two_bne_zero, beq_eq_false_iff_ne, ne_eq, mod_two_not_eq_one,
@@ -73,7 +73,7 @@ lemma getBit_zero_eq_zero {k : Nat} : getBit k 0 = 0 := by
7373 rw [Nat.and_one_is_mod]
7474
7575lemma getBit_eq_zero_or_one {k n : Nat} :
76- getBit k n = 0 ∨ getBit k n = 1 := by
76+ getBit k n = 0 ∨ getBit k n = 1 := by
7777 unfold getBit
7878 rw [Nat.and_one_is_mod]
7979 simp only [Nat.mod_two_eq_zero_or_one]
@@ -96,7 +96,7 @@ lemma getLowBits_zero_eq_zero {n : ℕ} : getLowBits 0 n = 0 := by
9696 simp only [Nat.shiftLeft_zero, Nat.sub_self, Nat.and_zero]
9797
9898lemma getLowBits_eq_mod_two_pow {numLowBits : ℕ} (n : ℕ) :
99- getLowBits numLowBits n = n % (2 ^ numLowBits) := by
99+ getLowBits numLowBits n = n % (2 ^ numLowBits) := by
100100 unfold getLowBits
101101 rw [Nat.shiftLeft_eq, one_mul]
102102 exact Nat.and_two_pow_sub_one_eq_mod n numLowBits
@@ -237,8 +237,8 @@ lemma and_two_pow_eq_two_pow_of_getBit_1 {n i : ℕ} (h_getBit : getBit i n = 1)
237237 conv_lhs => rw [Nat.and_two_pow (n:=n) (i:=i)]
238238 simp only [h_testBit_i_eq_1, Bool.toNat_true, one_mul]
239239
240- lemma and_two_pow_eq_two_pow_of_getBit_eq_one {n i : ℕ} (h_getBit : getBit i n = 1 )
241- : n &&& (2 ^i) = 2 ^i := by
240+ lemma and_two_pow_eq_two_pow_of_getBit_eq_one {n i : ℕ} (h_getBit : getBit i n = 1 ) :
241+ n &&& (2 ^i) = 2 ^i := by
242242 apply eq_iff_eq_all_getBits.mpr; unfold getBit
243243 intro k
244244 have h_getBit_two_pow := getBit_two_pow (i := i) (k := k)
@@ -267,13 +267,13 @@ lemma eq_zero_or_eq_one_of_lt_two {n : ℕ} (h_lt : n < 2) : n = 0 ∨ n = 1 :=
267267 · right; rfl
268268
269269lemma div_2_form {nD2 b : ℕ} (h_b : b < 2 ) :
270- (nD2 * 2 + b) / 2 = nD2 := by
270+ (nD2 * 2 + b) / 2 = nD2 := by
271271 rw [←add_comm, ←mul_comm]
272272 rw [Nat.add_mul_div_left (x := b) (y := 2 ) (z := nD2) (H := by norm_num)]
273273 norm_num; exact h_b;
274274
275275lemma and_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2 ) (h_bm : bm < 2 )
276- (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
276+ (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
277277 n &&& m = (n1 &&& m1) * 2 + (bn &&& bm) := by -- main tool : Nat.div_add_mod /2
278278 rw [h_n, h_m]
279279 -- ⊢ (n1 * 2 + bn) &&& (m1 * 2 + bm) = (n1 &&& m1) * 2 + (bn &&& bm)
@@ -302,7 +302,7 @@ lemma and_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2) (h_bm : bm <
302302 rw [←Nat.div_add_mod ((n1 * 2 + bn) &&& (m1 * 2 + bm)) 2 , h_div_eq, h_mod_eq, Nat.div_add_mod]
303303
304304lemma xor_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2 ) (h_bm : bm < 2 )
305- (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
305+ (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
306306 n ^^^ m = (n1 ^^^ m1) * 2 + (bn ^^^ bm) := by
307307 rw [h_n, h_m]
308308 -- ⊢ (n1 * 2 + bn) ^^^ (m1 * 2 + bm) = (n1 ^^^ m1) * 2 + (bn ^^^ bm)
@@ -333,7 +333,7 @@ lemma xor_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2) (h_bm : bm <
333333 rw [←Nat.div_add_mod ((n1 * 2 + bn) ^^^ (m1 * 2 + bm)) 2 , h_div_eq, h_mod_eq, Nat.div_add_mod]
334334
335335lemma or_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2 ) (h_bm : bm < 2 )
336- (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
336+ (h_n : n = n1 * 2 + bn) (h_m : m = m1 * 2 + bm) :
337337 n ||| m = (n1 ||| m1) * 2 + (bn ||| bm) := by
338338 rw [h_n, h_m]
339339 -- ⊢ (n1 * 2 + bn) ||| (m1 * 2 + bm) = (n1 ||| m1) * 2 + (bn ||| bm)
@@ -365,10 +365,10 @@ lemma or_by_split_lowBits {n m n1 m1 bn bm : ℕ} (h_bn : bn < 2) (h_bm : bm < 2
365365
366366lemma sum_eq_xor_plus_twice_and (n : Nat) : ∀ m : ℕ, n + m = (n ^^^ m) + 2 * (n &&& m) := by
367367 induction n using Nat.binaryRec with
368- | z =>
368+ | zero =>
369369 intro m
370370 rw [zero_add, Nat.zero_and, mul_zero, add_zero, Nat.zero_xor]
371- | f bn n2 ih =>
371+ | bit bn n2 ih =>
372372 intro m
373373 let resDiv2M := Nat.boddDiv2 m
374374 let bm := resDiv2M.fst
@@ -397,7 +397,7 @@ lemma sum_eq_xor_plus_twice_and (n : Nat) : ∀ m : ℕ, n + m = (n ^^^ m) + 2 *
397397 rw [←h_m]
398398 unfold mVal
399399 simp only [h_bm, h_m2]
400- exact Nat.bit_decomp m
400+ exact Nat.bit_bodd_div2 m
401401 rw [←h_mVal_eq_m]
402402 have h_and : nVal &&& mVal = (n2 &&& m2) * 2 + (getBitN &&& getBitM) :=
403403 and_by_split_lowBits (h_bn := h_getBitN) (h_bm := h_getBitM) (h_n := h_n) (h_m := h_m)
@@ -409,7 +409,7 @@ lemma sum_eq_xor_plus_twice_and (n : Nat) : ∀ m : ℕ, n + m = (n ^^^ m) + 2 *
409409 omega
410410
411411lemma add_shiftRight_distrib {n m k : ℕ} (h_and_zero : n &&& m = 0 ) :
412- (n + m) >>> k = (n >>> k) + (m >>> k) := by
412+ (n + m) >>> k = (n >>> k) + (m >>> k) := by
413413 rw [sum_eq_xor_plus_twice_and, h_and_zero, mul_zero, add_zero]
414414 conv =>
415415 rhs
@@ -482,7 +482,7 @@ lemma xor_eq_sub_iff_submask {n m : ℕ} (h : m ≤ n) : n ^^^ m = n - m ↔ n &
482482 rw [Nat.and_self, Nat.xor_self, mul_zero, add_zero]
483483
484484lemma getBit_of_add_distrib {n m k : ℕ}
485- (h_n_AND_m : n &&& m = 0 ) : getBit k (n + m) = getBit k n + getBit k m := by
485+ (h_n_AND_m : n &&& m = 0 ) : getBit k (n + m) = getBit k n + getBit k m := by
486486 unfold getBit
487487 rw [sum_of_and_eq_zero_is_xor h_n_AND_m]
488488 rw [Nat.shiftRight_xor_distrib, Nat.and_xor_distrib_right]
@@ -499,7 +499,7 @@ lemma getBit_of_add_distrib {n m k : ℕ}
499499 exact (sum_of_and_eq_zero_is_xor (n := getBitN) (m := getBitM) h_getBitN_and_getBitM).symm
500500
501501lemma add_two_pow_of_getBit_eq_zero_lt_two_pow {n m i : ℕ} (h_n : n < 2 ^ m) (h_i : i < m)
502- (h_getBit_at_i_eq_zero : getBit i n = 0 ) :
502+ (h_getBit_at_i_eq_zero : getBit i n = 0 ) :
503503 n + 2 ^i < 2 ^m := by
504504 have h_j_and: n &&& (2 ^i) = 0 := by
505505 rw [and_two_pow_eq_zero_of_getBit_0 (n:=n) (i:=i)]
@@ -511,7 +511,7 @@ lemma add_two_pow_of_getBit_eq_zero_lt_two_pow {n m i : ℕ} (h_n : n < 2 ^ m) (
511511 exact h_and_lt
512512
513513lemma getBit_of_multiple_of_power_of_two {n p : ℕ} : ∀ k,
514- getBit (k) (2 ^p * n) = if k < p then 0 else getBit (k-p) n := by
514+ getBit (k) (2 ^p * n) = if k < p then 0 else getBit (k-p) n := by
515515 intro k
516516 have h_test := Nat.testBit_two_pow_mul (i := p) (a := n) (j:=k)
517517 simp only [Nat.testBit, Nat.and_comm 1 ] at h_test
@@ -541,14 +541,14 @@ lemma getBit_of_multiple_of_power_of_two {n p : ℕ} : ∀ k,
541541 simp only [getBit, Nat.and_one_is_mod, h_test]
542542
543543lemma getBit_of_shiftLeft {n p : ℕ} :
544- ∀ k, getBit (k) (n <<< p) = if k < p then 0 else getBit (k - p) n := by
544+ ∀ k, getBit (k) (n <<< p) = if k < p then 0 else getBit (k - p) n := by
545545 intro k
546546 rw [getBit_of_multiple_of_power_of_two (n:=n) (p:=p) (k:=k).symm]
547547 congr
548548 rw [Nat.shiftLeft_eq, mul_comm]
549549
550550lemma getBit_of_shiftRight {n p : ℕ} :
551- ∀ k, getBit k (n >>> p) = getBit (k+p) n := by
551+ ∀ k, getBit k (n >>> p) = getBit (k+p) n := by
552552 intro k
553553 unfold getBit
554554 rw [←Nat.shiftRight_add]
@@ -588,7 +588,7 @@ lemma getBit_of_two_pow_sub_one {i k : ℕ} : getBit k (2^i - 1) =
588588 simp only [h_test]
589589
590590lemma getBit_of_sub_two_pow_of_bit_1 {n i j : ℕ} (h_getBit_eq_1 : getBit i n = 1 ) :
591- getBit j (n - 2 ^i) = (if j = i then 0 else getBit j n) := by
591+ getBit j (n - 2 ^i) = (if j = i then 0 else getBit j n) := by
592592 have h_2_pow_i_lt_n: 2 ^i ≤ n := by
593593 apply Nat.ge_two_pow_of_testBit
594594 rw [Nat.testBit_true_eq_getBit_eq_1]
@@ -657,7 +657,7 @@ lemma getBit_eq_pred_getBit_of_div_two {n k : ℕ} (h_k : k > 0) :
657657
658658-- TODO: uniqueness of this representation?
659659theorem getBit_repr {ℓ : Nat} : ∀ j, j < 2 ^ℓ →
660- j = ∑ k ∈ Finset.Icc 0 (ℓ-1 ), (getBit k j) * 2 ^k := by
660+ j = ∑ k ∈ Finset.Icc 0 (ℓ-1 ), (getBit k j) * 2 ^k := by
661661 induction ℓ with
662662 | zero =>
663663 -- Base case : ℓ = 0
@@ -782,7 +782,7 @@ theorem getBit_repr {ℓ : Nat} : ∀ j, j < 2^ℓ →
782782 rw [←h_j_eq]
783783
784784theorem getBit_repr_univ {ℓ : Nat} : ∀ j, j < 2 ^ℓ →
785- j = ∑ k ∈ Finset.univ (α:=Fin ℓ), (getBit k j) * 2 ^k.val := by
785+ j = ∑ k ∈ Finset.univ (α:=Fin ℓ), (getBit k j) * 2 ^k.val := by
786786 intro j h_j
787787 have h_repr_Icc := getBit_repr (ℓ:=ℓ) (j:=j) (by omega)
788788 rw [h_repr_Icc]
@@ -905,7 +905,7 @@ theorem and_highBits_lowBits_eq_zero {n : ℕ} (numLowBits : ℕ) :
905905 rw [h_getBit_right_eq_0, Nat.and_zero]
906906
907907lemma num_eq_highBits_add_lowBits {n : ℕ} (numLowBits : ℕ) :
908- n = getHighBits numLowBits n + getLowBits numLowBits n := by
908+ n = getHighBits numLowBits n + getLowBits numLowBits n := by
909909 apply eq_iff_eq_all_getBits.mpr; unfold getBit
910910 intro k
911911 --- use 2 getBit extractions to get the condition for getLowBits of ((n >>> numLowBits) <<<
@@ -932,7 +932,7 @@ lemma num_eq_highBits_add_lowBits {n : ℕ} (numLowBits : ℕ) :
932932 rw [Nat.sub_add_cancel (n:=k) (m:=numLowBits) (by omega)]
933933
934934lemma num_eq_highBits_xor_lowBits {n : ℕ} (numLowBits : ℕ) :
935- n = getHighBits numLowBits n ^^^ getLowBits numLowBits n := by
935+ n = getHighBits numLowBits n ^^^ getLowBits numLowBits n := by
936936 rw [←sum_of_and_eq_zero_is_xor]
937937 · exact num_eq_highBits_add_lowBits (n := n) (numLowBits := numLowBits)
938938 · exact and_highBits_lowBits_eq_zero (n := n) (numLowBits := numLowBits)
@@ -957,7 +957,7 @@ lemma getBit_of_highBits_no_shl {n : ℕ} (numLowBits : ℕ) :
957957 exact getBit_of_shiftRight k
958958
959959lemma getBit_of_lt_two_pow {n : ℕ} (a : Fin (2 ^ n)) (k : ℕ) :
960- getBit k a = if k < n then getBit k a else 0 := by
960+ getBit k a = if k < n then getBit k a else 0 := by
961961 if h_k: k < n then
962962 simp only [h_k, ↓reduceIte]
963963 else
@@ -971,7 +971,7 @@ lemma getBit_of_lt_two_pow {n : ℕ} (a : Fin (2 ^ n)) (k : ℕ) :
971971
972972-- Note: maybe we can generalize this into a non-empty set of diff bits
973973lemma exist_bit_diff_if_diff {n : ℕ} (a : Fin (2 ^ n)) (b : Fin (2 ^ n)) (h_a_ne_b : a ≠ b) :
974- ∃ k: Fin n, getBit k a ≠ getBit k b := by
974+ ∃ k: Fin n, getBit k a ≠ getBit k b := by
975975 by_contra h_no_diff
976976 push_neg at h_no_diff
977977 have h_a_eq_b: a = b := by
0 commit comments