Skip to content

Commit 79c96bd

Browse files
authored
feat: mprotect and koala bear constraint changes (#83)
1 parent b8a2f9d commit 79c96bd

File tree

126 files changed

+6650
-6775
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+6650
-6775
lines changed

SP1Chips.lean

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import SP1Chips.Addw.Constraints
66
import SP1Chips.AddwChip
77
import SP1Chips.Bitwise.Constraints
88
import SP1Chips.BitwiseChip
9-
import SP1Chips.Branch.BEQ
10-
import SP1Chips.Branch.BGE
11-
import SP1Chips.Branch.BGEU
12-
import SP1Chips.Branch.BLT
13-
import SP1Chips.Branch.BLTU
14-
import SP1Chips.Branch.BNE
9+
-- import SP1Chips.Branch.BEQ
10+
-- import SP1Chips.Branch.BGE
11+
-- import SP1Chips.Branch.BGEU
12+
-- import SP1Chips.Branch.BLT
13+
-- import SP1Chips.Branch.BLTU
14+
-- import SP1Chips.Branch.BNE
1515
import SP1Chips.Branch.Constraints
1616
import SP1Chips.BranchChip
1717
import SP1Chips.DivRem.Constraints

SP1Chips/Add/Constraints.lean

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace Add
77
section constraints
88

99
-- Generated Lean code for chip AddChip
10-
@[irreducible] def constraints (Main : Vector (Fin BB) 33) : SP1ConstraintList :=
11-
let E0 : Fin BB := Main[32] - 1
12-
let E1 : Fin BB := Main[32] * E0
13-
let CS0 : SP1ConstraintList := AddOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[22], Main[23], Main[24], Main[25]] { value := #v[Main[28], Main[29], Main[30], Main[31]] } Main[32]
14-
let E2 : Fin BB := Main[3] + 4
15-
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E2, Main[4], Main[5]] 8 Main[32]
16-
let E3 : Fin BB := Main[1] * 65536
17-
let E4 : Fin BB := Main[2] + E3
18-
let CS2 : SP1ConstraintList := RTypeReader.constraints Main[0] E4 #v[Main[3], Main[4], Main[5]] 0 #v[51, 0, 0] #v[Main[28], Main[29], Main[30], Main[31]] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c := Main[21], op_c_memory := { prev_value := #v[Main[22], Main[23], Main[24], Main[25]], access_timestamp := { prev_low := Main[26], diff_low_limb := Main[27] } } } Main[32]
10+
@[irreducible] def constraints (Main : Vector (Fin KB) 34) : SP1ConstraintList :=
11+
let E0 : Fin KB := Main[33] - 1
12+
let E1 : Fin KB := Main[33] * E0
13+
let CS0 : SP1ConstraintList := AddOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[22], Main[23], Main[24], Main[25]] { value := #v[Main[29], Main[30], Main[31], Main[32]] } Main[33]
14+
let E2 : Fin KB := Main[3] + 4
15+
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E2, Main[4], Main[5]] 8 Main[33]
16+
let E3 : Fin KB := Main[1] * 65536
17+
let E4 : Fin KB := Main[2] + E3
18+
let CS2 : SP1ConstraintList := RTypeReader.constraints Main[0] E4 #v[Main[3], Main[4], Main[5]] 0 #v[8, 51, 0, 0] #v[Main[29], Main[30], Main[31], Main[32]] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c := Main[21], op_c_memory := { prev_value := #v[Main[22], Main[23], Main[24], Main[25]], access_timestamp := { prev_low := Main[26], diff_low_limb := Main[27] } }, is_trusted := Main[28] } Main[33]
1919
CS0 ++ CS1 ++ CS2 ++ [
2020
(.assertZero E1),
2121
]

SP1Chips/AddChip.lean

Lines changed: 22 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -11,103 +11,69 @@ open LeanRV64D.Functions BitVec
1111
namespace Add
1212

1313
variable
14-
(Main : Vector (Fin BB) 33)
14+
(Main : Vector (Fin KB) 34)
1515
(s : SailState)
1616
(cstrs : (constraints Main).allHold)
17-
(h_is_real : Main[32] = 1)
17+
(h_is_real : Main[33] = 1)
1818

1919
noncomputable def spec_add (rs2 rs1 rd : regidx) : SailM Unit := do
2020
Sail.writeReg Register.nextPC ((← Sail.readReg Register.PC) + 4#64)
2121
_ ← execute_RTYPE rs2 rs1 rd rop.ADD
2222
pure ()
2323

24-
def sp1_op_a : BitVec 5 :=
25-
by
26-
refine BitVec.ofNatLT Main[6] ?_
27-
simp
28-
show Main[6] < 32
24+
def sp1_op_a : BitVec 5 := BitVec.ofNat 5 Main[6]
2925

30-
have reader_cstrs := by
31-
simp [SP1ConstraintList.allHold, constraints, SP1Constraint.toProp] at cstrs
32-
exact cstrs.2.2.1
26+
def sp1_op_b : BitVec 5 := BitVec.ofNat 5 Main[14]
3327

34-
clear cstrs
35-
simp [RTypeReader.constraints, h_is_real, Opcode.ofNat, Nat.ble, Nat.beq, SP1Constraint.toProp] at reader_cstrs
36-
37-
exact reader_cstrs.1.2.1
38-
39-
def sp1_op_b : BitVec 5 :=
40-
by
41-
refine BitVec.ofNatLT Main[14] ?_
42-
simp
43-
show Main[14] < 32
44-
45-
have reader_cstrs := by
46-
simp [SP1ConstraintList.allHold, constraints, SP1Constraint.toProp] at cstrs
47-
exact cstrs.2.2.1
48-
49-
clear cstrs
50-
simp [RTypeReader.constraints, h_is_real, Opcode.ofNat, Nat.ble, Nat.beq, SP1Constraint.toProp] at reader_cstrs
51-
52-
exact reader_cstrs.1.1.1
53-
54-
def sp1_op_c : BitVec 5 :=
55-
by
56-
refine BitVec.ofNatLT Main[21] ?_
57-
simp
58-
show Main[21] < 32
59-
60-
have reader_cstrs := by
61-
simp [SP1ConstraintList.allHold, constraints, SP1Constraint.toProp] at cstrs
62-
exact cstrs.2.2.1
63-
64-
clear cstrs
65-
simp [RTypeReader.constraints, h_is_real, Opcode.ofNat, Nat.ble, Nat.beq, SP1Constraint.toProp] at reader_cstrs
66-
67-
exact reader_cstrs.1.1.2
28+
def sp1_op_c : BitVec 5 := BitVec.ofNat 5 Main[21]
6829

6930
def sp1_add : SailM Unit := do
70-
let op_a := sp1_op_a Main cstrs h_is_real
31+
let op_a := sp1_op_a Main
7132
Sail.writeReg Register.nextPC (Word.toBitVec64 #v[Main[3] + 4, Main[4], Main[5], 0])
72-
Sail.write_reg op_a (Word.toBitVec64 #v[Main[28], Main[29], Main[30], Main[31]])
33+
Sail.write_reg op_a (Word.toBitVec64 #v[Main[29], Main[30], Main[31], Main[32]])
7334

7435
open Sail
7536

7637
set_option pp.parens true in
7738
theorem correct_add
39+
(Main : Vector (Fin KB) 34)
40+
(s : SailState)
41+
(cstrs : (constraints Main).allHold)
42+
(h_is_real : Main[33] = 1)
7843
(state_cstrs : (constraints Main).initialState s) :
79-
let op_c := sp1_op_c Main cstrs h_is_real
80-
let op_b := sp1_op_b Main cstrs h_is_real
81-
let op_a := sp1_op_a Main cstrs h_is_real
82-
(spec_add (.Regidx op_c) (.Regidx op_b) (.Regidx op_a)).run s = (sp1_add Main cstrs h_is_real).run s
44+
let op_c := sp1_op_c Main
45+
let op_b := sp1_op_b Main
46+
let op_a := sp1_op_a Main
47+
(spec_add (.Regidx op_c) (.Regidx op_b) (.Regidx op_a)).run s = (sp1_add Main).run s
8348
:= by
84-
simp [SP1ConstraintList.initialState, constraints, SP1Constraint.toStateProp, List.Forall, AddOperation.constraints, CPUState.constraints, RTypeReader.constraints, h_is_real] at state_cstrs
49+
simp [SP1ConstraintList.initialState, constraints, SP1Constraint.toStateProp, List.Forall, AddOperation.constraints, CPUState.constraints, RTypeReader.constraints] at state_cstrs
8550
obtain ⟨read_pc, trusted_instr_state, _, read_op_b, read_op_c⟩ := state_cstrs
8651
simp [constraints] at cstrs
8752
obtain ⟨add_op_cstrs, cpu_cstrs, reader_cstrs, rest⟩ := cstrs
8853
rw [CPUState.allHold_constraints_iff_is_real h_is_real] at cpu_cstrs
8954
rw [RTypeReader.allHold_constraints_iff_is_real h_is_real] at reader_cstrs
90-
obtain ⟨ trusted_instr_prop, _, _, _, _, _, _, ⟨ ⟨ _, _, ⟨ _, is_U64_b, is_U64_c ⟩ ⟩, _ ⟩⟩ := reader_cstrs
55+
simp [Opcode.ofNat, Nat.ble] at reader_cstrs
56+
obtain ⟨ trusted_instr_prop, _, _, _, _, _, _, _, ⟨ ⟨ _, _, ⟨ _, is_U64_b, is_U64_c ⟩ ⟩, _ ⟩⟩ := reader_cstrs
9157
simp [Opcode.ofNat, Nat.ble] at trusted_instr_state trusted_instr_prop
9258

9359
rw [h_is_real] at *
9460
apply AddOperation.spec is_U64_b is_U64_c at add_op_cstrs
9561
obtain ⟨ is_U64_val, is_add ⟩ := add_op_cstrs
96-
simp at *
62+
simp [BitVec.ofNatLT_eq_ofNat] at *
9763

9864
-- Now the monadic manipulation
9965
simp [spec_add, sp1_add, execute, execute_RTYPE']
10066
rw [run_readReg, read_pc]
10167
simp [sp1_op_b, read_op_b (by omega)]
10268
simp [sp1_op_c, read_op_c (by omega)]
10369
simp [sp1_op_a]
104-
rw [BabyBear.add4_into_pc_ofNat (by omega)]
70+
rw [KoalaBear.add4_into_pc_ofNat (by omega)]
10571

10672
by_cases h_is_op_a_0 : Main[6] = 0 <;> simp_all
10773
. rw [← is_add]
10874
simp [Word.toBitVec64, Word.toNat]
109-
. rw [if_neg (by simpa [← BitVec.toNat_inj])]
110-
rw [if_neg (by simpa [← BitVec.toNat_inj])]
75+
. rw [if_neg (by simp [← BitVec.toNat_inj]; omega)]
76+
rw [if_neg (by simp [← BitVec.toNat_inj]; omega)]
11177
simp [Word.toBitVec64, Word.toNat]
11278
rfl
11379

SP1Chips/Addi/Constraints.lean

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace Addi
77
section constraints
88

99
-- Generated Lean code for chip AddiChip
10-
@[irreducible] def constraints (Main : Vector (Fin BB) 30) : SP1ConstraintList :=
11-
let E0 : Fin BB := Main[29] - 1
12-
let E1 : Fin BB := Main[29] * E0
13-
let CS0 : SP1ConstraintList := AddOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[21], Main[22], Main[23], Main[24]] { value := #v[Main[25], Main[26], Main[27], Main[28]] } Main[29]
14-
let E2 : Fin BB := Main[3] + 4
15-
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E2, Main[4], Main[5]] 8 Main[29]
16-
let E3 : Fin BB := Main[1] * 65536
17-
let E4 : Fin BB := Main[2] + E3
18-
let CS2 : SP1ConstraintList := ITypeReader.constraints Main[0] E4 #v[Main[3], Main[4], Main[5]] 1 #v[19, 0, 0] #v[Main[25], Main[26], Main[27], Main[28]] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c_imm := #v[Main[21], Main[22], Main[23], Main[24]] } Main[29]
10+
@[irreducible] def constraints (Main : Vector (Fin KB) 31) : SP1ConstraintList :=
11+
let E0 : Fin KB := Main[30] - 1
12+
let E1 : Fin KB := Main[30] * E0
13+
let CS0 : SP1ConstraintList := AddOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[21], Main[22], Main[23], Main[24]] { value := #v[Main[26], Main[27], Main[28], Main[29]] } Main[30]
14+
let E2 : Fin KB := Main[3] + 4
15+
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E2, Main[4], Main[5]] 8 Main[30]
16+
let E3 : Fin KB := Main[1] * 65536
17+
let E4 : Fin KB := Main[2] + E3
18+
let CS2 : SP1ConstraintList := ITypeReader.constraints Main[0] E4 #v[Main[3], Main[4], Main[5]] 1 #v[4, 19, 0, 0] #v[Main[26], Main[27], Main[28], Main[29]] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c_imm := #v[Main[21], Main[22], Main[23], Main[24]], is_trusted := Main[25] } Main[30]
1919
CS0 ++ CS1 ++ CS2 ++ [
2020
(.assertZero E1),
2121
]

SP1Chips/AddiChip.lean

Lines changed: 26 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,61 +10,35 @@ open LeanRV64D.Functions BitVec
1010
namespace Addi
1111

1212
variable
13-
(Main : Vector (Fin BB) 30)
13+
(Main : Vector (Fin KB) 31)
1414
(s : SailState)
15-
(cstrs : (constraints Main).allHold)
16-
(h_is_real : Main[29] = 1)
1715

1816
noncomputable def spec_addi (imm : BitVec 12) (rs1 rd : regidx) : SailM Unit := do
1917
Sail.writeReg Register.nextPC ((← Sail.readReg Register.PC) + 4#64)
2018
_ ← execute_ITYPE imm rs1 rd iop.ADDI
2119
pure ()
2220

23-
def sp1_op_a : BitVec 5 :=
24-
by
25-
refine BitVec.ofNatLT Main[6] ?_
26-
simp
27-
show Main[6] < 32
28-
29-
have reader_cstrs := by
30-
simp [SP1ConstraintList.allHold, constraints, SP1Constraint.toProp] at cstrs
31-
exact cstrs.2.2.1
32-
33-
clear cstrs
34-
simp [ITypeReader.constraints, h_is_real, Opcode.ofNat, Nat.ble, Nat.beq, SP1Constraint.toProp] at reader_cstrs
35-
36-
exact reader_cstrs.1.2.1
37-
38-
def sp1_op_b : BitVec 5 :=
39-
by
40-
refine BitVec.ofNatLT Main[14] ?_
41-
simp
42-
show Main[14] < 32
43-
44-
have reader_cstrs := by
45-
simp [SP1ConstraintList.allHold, constraints, SP1Constraint.toProp] at cstrs
46-
exact cstrs.2.2.1
47-
48-
clear cstrs
49-
simp [ITypeReader.constraints, h_is_real, Opcode.ofNat, Nat.ble, Nat.beq, SP1Constraint.toProp] at reader_cstrs
21+
def sp1_op_a : BitVec 5 := BitVec.ofNat 5 Main[6]
5022

51-
exact reader_cstrs.1.1.1
23+
def sp1_op_b : BitVec 5 := BitVec.ofNat 5 Main[14]
5224

53-
def sp1_op_c : BitVec 12 := BitVec.ofNat 12 Main[21].val
25+
def sp1_op_c : BitVec 12 := BitVec.ofNat 12 Main[21]
5426

5527
def sp1_addi : SailM Unit := do
56-
let op_a := sp1_op_a Main cstrs h_is_real
28+
let op_a := sp1_op_a Main
5729
Sail.writeReg Register.nextPC (Word.toBitVec64 #v[Main[3] + 4, Main[4], Main[5], 0])
58-
Sail.write_reg op_a (Word.toBitVec64 #v[Main[25], Main[26], Main[27], Main[28]])
30+
Sail.write_reg op_a (Word.toBitVec64 #v[Main[26], Main[27], Main[28], Main[29]])
5931

6032
open Sail
6133

6234
theorem correct_addi
35+
(cstrs : (constraints Main).allHold)
36+
(h_is_real : Main[30] = 1)
6337
(state_cstrs : (constraints Main).initialState s) :
6438
let op_c := sp1_op_c Main
65-
let op_b := sp1_op_b Main cstrs h_is_real
66-
let op_a := sp1_op_a Main cstrs h_is_real
67-
(spec_addi op_c (.Regidx op_b) (.Regidx op_a)).run s = (sp1_addi Main cstrs h_is_real).run s
39+
let op_b := sp1_op_b Main
40+
let op_a := sp1_op_a Main
41+
(spec_addi op_c (.Regidx op_b) (.Regidx op_a)).run s = (sp1_addi Main).run s
6842
:= by
6943
-- Obtain and simplify state and pure constraints
7044
simp [SP1ConstraintList.initialState, constraints, SP1Constraint.toStateProp, List.Forall, AddOperation.constraints, CPUState.constraints, ITypeReader.constraints, h_is_real] at state_cstrs
@@ -73,7 +47,9 @@ theorem correct_addi
7347
obtain ⟨add_op_cstrs, cpu_cstrs, reader_cstrs, rest⟩ := cstrs
7448
rw [CPUState.allHold_constraints_iff_is_real h_is_real] at cpu_cstrs
7549
rw [ITypeReader.allHold_constraints_iff_is_real h_is_real] at reader_cstrs
76-
obtain ⟨ trusted_instr_prop, _, _, c0, c1, c2, c3, _, _, _, _, _, _, _, _, _, _, ⟨ is_U64_a, is_U64_b, _ ⟩⟩ := reader_cstrs
50+
51+
obtain ⟨ _, trusted_instr_prop, hcm1, hcm2, c0, c1, c2, c3, h11, h12, h13, h14, h15, h16, h17, h18, h19, h20, ⟨ is_U64_a, is_U64_b, hu64 ⟩⟩ := reader_cstrs
52+
7753
simp_all [Opcode.ofNat, Nat.ble]
7854
have is_U64_c : Word.isU64 #v[Main[21], Main[22], Main[23], Main[24]]
7955
:= by apply Word.isU64_of_cases c0 c1 c2 c3
@@ -82,20 +58,24 @@ theorem correct_addi
8258
apply AddOperation.spec is_U64_b is_U64_c at add_op_cstrs
8359
obtain ⟨ is_U64_val, is_add ⟩ := add_op_cstrs
8460
simp at *
85-
61+
simp [BitVec.ofNatLT_eq_ofNat] at *
8662
-- Now the monadic manipulation
8763
simp [spec_addi, sp1_addi, execute, execute_ITYPE]
8864
rw [run_readReg, read_pc]
8965
simp [sp1_op_b, read_op_b]
9066
simp [sp1_op_c, read_op_c]
9167
simp [sp1_op_a]
92-
rw [BabyBear.add4_into_pc_ofNat (by omega)]
93-
94-
by_cases h_is_op_a_0 : Main[6] = 0 <;> simp_all
95-
. rw [← is_add]
96-
simp [Word.toBitVec64, Word.toNat]
97-
. rw [if_neg (by simpa [← BitVec.toNat_inj])]
98-
rw [if_neg (by simpa [← BitVec.toNat_inj])]
68+
rw [KoalaBear.add4_into_pc_ofNat (by omega)]
69+
70+
by_cases h_is_op_a_0 : Main[6] = 0
71+
. have : Main[13] = 1 := by clear *- h12 h_is_op_a_0; aesop
72+
rw [← is_add] at *
73+
simp [Word.toBitVec64, Word.toNat, h_is_op_a_0]
74+
clear *- this hu64
75+
aesop
76+
. rw [if_neg (by simp [← BitVec.toNat_inj]; omega)]
77+
rw [if_neg (by simp [← BitVec.toNat_inj]; omega)]
78+
rw [is_add, trusted_instr_prop.2]
9979
simp [Word.toBitVec64, Word.toNat]
10080
rfl
10181

SP1Chips/Addw/Constraints.lean

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,23 @@ namespace Addw
77
section constraints
88

99
-- Generated Lean code for chip AddwChip
10-
@[irreducible] def constraints (Main : Vector (Fin BB) 37) : SP1ConstraintList :=
11-
let E0 : Fin BB := Main[35] - 1
12-
let E1 : Fin BB := Main[35] * E0
13-
let E2 : Fin BB := Main[31] * 27
14-
let E3 : Fin BB := 1 - Main[31]
15-
let E4 : Fin BB := E3 * 59
16-
let E5 : Fin BB := E2 + E4
17-
let E6 : Fin BB := Main[36] - E5
18-
let E7 : Fin BB := Main[35] * E6
19-
let CS0 : SP1ConstraintList := AddwOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[25], Main[26], Main[27], Main[28]] { value := #v[Main[32], Main[33]], msb := { msb := Main[34] } } Main[35]
20-
let E8 : Fin BB := Main[3] + 4
21-
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E8, Main[4], Main[5]] 8 Main[35]
22-
let E9 : Fin BB := Main[34] * 65535
23-
let E10 : Fin BB := Main[34] * 65535
24-
let E11 : Fin BB := Main[1] * 65536
25-
let E12 : Fin BB := Main[2] + E11
26-
let CS2 : SP1ConstraintList := ALUTypeReader.constraints Main[0] E12 #v[Main[3], Main[4], Main[5]] 39 #v[Main[36], 0, 0] #v[Main[32], Main[33], E9, E10] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c := #v[Main[21], Main[22], Main[23], Main[24]], op_c_memory := { prev_value := #v[Main[25], Main[26], Main[27], Main[28]], access_timestamp := { prev_low := Main[29], diff_low_limb := Main[30] } }, imm_c := Main[31] } Main[35]
10+
@[irreducible] def constraints (Main : Vector (Fin KB) 37) : SP1ConstraintList :=
11+
let E0 : Fin KB := Main[36] - 1
12+
let E1 : Fin KB := Main[36] * E0
13+
let E2 : Fin KB := 4 * Main[31]
14+
let E3 : Fin KB := 8 - E2
15+
let E4 : Fin KB := 32 * Main[31]
16+
let E5 : Fin KB := 59 - E4
17+
let CS0 : SP1ConstraintList := AddwOperation.constraints #v[Main[15], Main[16], Main[17], Main[18]] #v[Main[25], Main[26], Main[27], Main[28]] { value := #v[Main[33], Main[34]], msb := { msb := Main[35] } } Main[36]
18+
let E6 : Fin KB := Main[3] + 4
19+
let CS1 : SP1ConstraintList := CPUState.constraints { clk_high := Main[0], clk_16_24 := Main[1], clk_0_16 := Main[2], pc := #v[Main[3], Main[4], Main[5]] } #v[E6, Main[4], Main[5]] 8 Main[36]
20+
let E7 : Fin KB := Main[35] * 65535
21+
let E8 : Fin KB := Main[35] * 65535
22+
let E9 : Fin KB := Main[1] * 65536
23+
let E10 : Fin KB := Main[2] + E9
24+
let CS2 : SP1ConstraintList := ALUTypeReader.constraints Main[0] E10 #v[Main[3], Main[4], Main[5]] 39 #v[E3, E5, 0, 0] #v[Main[33], Main[34], E7, E8] { op_a := Main[6], op_a_memory := { prev_value := #v[Main[7], Main[8], Main[9], Main[10]], access_timestamp := { prev_low := Main[11], diff_low_limb := Main[12] } }, op_a_0 := Main[13], op_b := Main[14], op_b_memory := { prev_value := #v[Main[15], Main[16], Main[17], Main[18]], access_timestamp := { prev_low := Main[19], diff_low_limb := Main[20] } }, op_c := #v[Main[21], Main[22], Main[23], Main[24]], op_c_memory := { prev_value := #v[Main[25], Main[26], Main[27], Main[28]], access_timestamp := { prev_low := Main[29], diff_low_limb := Main[30] } }, imm_c := Main[31], is_trusted := Main[32] } Main[36]
2725
CS0 ++ CS1 ++ CS2 ++ [
2826
(.assertZero E1),
29-
(.assertZero E7),
3027
]
3128

3229
end constraints

0 commit comments

Comments
 (0)