Skip to content

Commit 3df0ce5

Browse files
authored
version bump to v.26.0 (#46)
* feat: v.26.0 bump first commit * fix: add proof TODO * fix: straightforward proof fixes * fix: moved fork into verified-zkevm and ready to upgrade now * fix: linter fixes
1 parent acac8db commit 3df0ce5

8 files changed

Lines changed: 76 additions & 64 deletions

File tree

CompPoly/Data/Nat/Bitwise.lean

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4242
lemma 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

7575
lemma 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

9898
lemma 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

269269
lemma 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

275275
lemma 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

304304
lemma 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

335335
lemma 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

366366
lemma 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

411411
lemma 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

484484
lemma 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

501501
lemma 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

513513
lemma 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

543543
lemma 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

550550
lemma 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

590590
lemma 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?
659659
theorem 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

784784
theorem 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

907907
lemma 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

934934
lemma 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

959959
lemma 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
973973
lemma 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

CompPoly/Multivariate/CMvMonomial.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Mathlib.Algebra.Group.TypeTags.Basic
1010
import Mathlib.Algebra.GroupWithZero.Nat
1111
import Mathlib.Algebra.Ring.Defs
1212
import Mathlib.Data.Nat.Lattice
13-
import Std.Classes.Ord.Vector
13+
import Batteries.Data.Vector.Basic
1414

1515
/-!
1616
# Computable monomials

CompPoly/Multivariate/Lawful.lean

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
/-
2+
Copyright (c) 2025 CompPoly. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Frantisek Silvasi
5+
-/
6+
17
import CompPoly.Multivariate.Unlawful
28
import Mathlib.Analysis.Normed.Ring.Lemmas
39

@@ -80,7 +86,7 @@ def fromUnlawful (p : Unlawful n R) : Lawful n R :=
8086

8187
@[grind←]
8288
protected lemma grind_fromUnlawful_congr {p₁ p₂ : Unlawful n R}
83-
(h : p₁ = p₂) : Lawful.fromUnlawful p₁ = Lawful.fromUnlawful p₂ := by grind
89+
(h : p₁ = p₂) : Lawful.fromUnlawful p₁ = Lawful.fromUnlawful p₂ := by grind
8490

8591
def C (c : R) : Lawful n R :=
8692
⟨Unlawful.C c, by grind⟩
@@ -112,8 +118,7 @@ lemma cast_fromUnlawful : (fromUnlawful p.1).1 = p.1 := by
112118
unfold fromUnlawful
113119
rcases p with ⟨p, hp⟩
114120
simp; ext1 x
115-
erw [ExtTreeMap.getElem?_filter, Option.filter_irrel (by intros; specialize hp x; grind)]
116-
rfl
121+
grind
117122

118123
section
119124

@@ -127,23 +132,23 @@ instance [Add R] : Add (Lawful n R) := ⟨add⟩
127132

128133
@[grind=]
129134
protected lemma grind_add_skip [Add R] {p₁ p₂ : Lawful n R} :
130-
p₁ + p₂ = Lawful.fromUnlawful (p₁.1.add p₂.1) := rfl
135+
p₁ + p₂ = Lawful.fromUnlawful (p₁.1.add p₂.1) := rfl
131136

132137
/--
133138
Note to self: This goes too far.
134139
-/
135140
@[grind=]
136141
protected lemma grind_add_skip_aggressive [Add R] {p₁ p₂ : Lawful n R} :
137-
p₁ + p₂ = fromUnlawful (ExtTreeMap.mergeWith (fun _ c₁ c₂ => c₁ + c₂) p₁.1 p₂.1) := rfl
142+
p₁ + p₂ = fromUnlawful (ExtTreeMap.mergeWith (fun _ c₁ c₂ => c₁ + c₂) p₁.1 p₂.1) := rfl
138143

139144
def mul [Mul R] [Add R] (p₁ p₂ : Lawful n R) : Lawful n R :=
140145
fromUnlawful <| p₁.val * p₂.val
141146

142147
instance [Mul R] [Add R] [Zero R] : Mul (Lawful n R) := ⟨mul⟩
143148

144149
def npow [NatCast R] [Add R] [Mul R] : ℕ → Lawful n R → Lawful n R
145-
| .zero , _ => 1
146-
| .succ n, p => (npow n p) * p
150+
| .zero , _ => 1
151+
| .succ n, p => (npow n p) * p
147152

148153
instance [NatCast R] [Add R] [Mul R] : NatPow (Lawful n R) := ⟨fun e b ↦ npow b e⟩
149154

@@ -202,19 +207,19 @@ section
202207
variable {n₁ n₂ : ℕ}
203208

204209
def align
205-
(p₁ : Lawful n₁ R) (p₂ : Lawful n₂ R) :
206-
Lawful (n₁ ⊔ n₂) R × Lawful (n₁ ⊔ n₂) R :=
210+
(p₁ : Lawful n₁ R) (p₂ : Lawful n₂ R) :
211+
Lawful (n₁ ⊔ n₂) R × Lawful (n₁ ⊔ n₂) R :=
207212
letI sup := n₁ ⊔ n₂
208213
(
209214
cast (by congr 1; grind) (p₁.extend sup),
210215
cast (by congr 1; grind) (p₂.extend sup)
211216
)
212217

213218
def liftPoly
214-
(f : Lawful (n₁ ⊔ n₂) R →
215-
Lawful (n₁ ⊔ n₂) R →
216-
Lawful (n₁ ⊔ n₂) R)
217-
(p₁ : Lawful n₁ R) (p₂ : Lawful n₂ R) : Lawful (n₁ ⊔ n₂) R :=
219+
(f : Lawful (n₁ ⊔ n₂) R →
220+
Lawful (n₁ ⊔ n₂) R →
221+
Lawful (n₁ ⊔ n₂) R)
222+
(p₁ : Lawful n₁ R) (p₂ : Lawful n₂ R) : Lawful (n₁ ⊔ n₂) R :=
218223
Function.uncurry f (align p₁ p₂)
219224

220225
section

CompPoly/Multivariate/MvPolyEquiv.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import CompPoly.Multivariate.CMvPolynomial
99
import Mathlib.Algebra.MvPolynomial.Basic
1010
import Mathlib.Algebra.Ring.Defs
1111
import CompPoly.Multivariate.Lawful
12-
import Std.Classes.Ord.Vector
12+
import Batteries.Data.Vector.Basic
1313

1414
/-!
1515
# `Equiv` and `RingEquiv` between `CMvPolynomial` and `MvPolynomial`.
@@ -364,7 +364,7 @@ lemma map_mul (a b : CMvPolynomial n R) :
364364
getElem?_neg
365365
]
366366
unfold MvPolynomial.coeff MonoidAlgebra.single
367-
rw [Finsupp.single_eq_of_ne (by symm; exact m_in)]
367+
rw [Finsupp.single_eq_of_ne (by symm; grind)]
368368
split
369369
next h contra =>
370370
exfalso; apply m_in; symm

0 commit comments

Comments
 (0)