Skip to content

Commit e9bf4ac

Browse files
authored
Merge pull request #4 from l-adic/circuit-builder-more-types
Implement Sharing and separate out language lib
2 parents fd8b3d1 + 86ff39c commit e9bf4ac

File tree

25 files changed

+963
-614
lines changed

25 files changed

+963
-614
lines changed

Diff for: arithmetic-circuits.cabal

+60-13
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,11 @@ common deps
4747
, filepath >=1.4.2
4848
, finite-typelits >=0.1.0
4949
, galois-field >=2.0.0
50-
, microlens
5150
, process
5251
, propagators
5352
, protolude >=0.2
5453
, semirings >=0.7
5554
, text >=1.2.3
56-
, vector-sized
5755
, wl-pprint-text >=1.2.0
5856

5957
library
@@ -65,18 +63,39 @@ library
6563
Circuit.Dataflow
6664
Circuit.Solver
6765
Circuit.Dot
68-
Circuit.Expr
69-
Circuit.Lang
7066
R1CS
7167
Fresh
7268

7369
other-modules: Paths_arithmetic_circuits
74-
hs-source-dirs: src
70+
hs-source-dirs: circuit/src
7571

7672
ghc-options: -freverse-errors -O2 -Wall
7773

7874
default-language: GHC2021
7975

76+
library language
77+
import: deps, extensions, warnings
78+
visibility: public
79+
exposed-modules:
80+
Circuit.Language.Compile
81+
Circuit.Language.Expr
82+
Circuit.Language.TExpr
83+
Circuit.Language.DSL
84+
Circuit.Language
85+
86+
hs-source-dirs: language/src
87+
build-depends:
88+
arithmetic-circuits
89+
, hashable
90+
, microlens
91+
, vector
92+
, vector-sized
93+
94+
ghc-options: -freverse-errors -O2 -Wall
95+
96+
default-language: GHC2021
97+
98+
8099
library circom-compat
81100
import: deps, extensions, warnings
82101
visibility: public
@@ -97,12 +116,47 @@ library circom-compat
97116

98117
default-language: GHC2021
99118

119+
test-suite language-tests
120+
import: deps, extensions
121+
type: exitcode-stdio-1.0
122+
main-is: Main.hs
123+
124+
other-modules:
125+
Test.Circuit.Expr
126+
Test.Circuit.Sudoku
127+
Test.Circuit.Lang
128+
129+
hs-source-dirs: language/test
130+
131+
ghc-options: -freverse-errors -O2 -Wall -main-is Main
132+
build-depends:
133+
arithmetic-circuits
134+
, arithmetic-circuits:language
135+
, array
136+
, distributive
137+
, fin
138+
, quickcheck-instances >=0.3
139+
, QuickCheck
140+
, random
141+
, hspec
142+
, tasty >=1.2
143+
, tasty-hunit >=0.10
144+
, tasty-hspec
145+
, tasty-quickcheck >=0.10
146+
, vec
147+
148+
build-tool-depends: tasty-discover:tasty-discover >=4.2
149+
150+
default-language: GHC2021
151+
152+
100153
executable factors
101154
import: warnings, extensions, deps
102155
main-is: Main.hs
103156
build-depends:
104157
binary
105158
, arithmetic-circuits
159+
, arithmetic-circuits:language
106160
, arithmetic-circuits:circom-compat
107161

108162
hs-source-dirs: circom-compat/app
@@ -117,20 +171,14 @@ test-suite circuit-tests
117171
Paths_arithmetic_circuits
118172
Test.Circuit.Affine
119173
Test.Circuit.Arithmetic
120-
Test.Circuit.Expr
121174
Test.Circuit.R1CS
122-
Test.Circuit.Sudoku
123-
Test.Circuit.Lang
124175

125-
hs-source-dirs: test
176+
hs-source-dirs: circuit/test
126177

127178
ghc-options: -freverse-errors -O2 -Wall -main-is Main
128179
build-depends:
129180
arithmetic-circuits
130181
, array
131-
, distributive
132-
, fin
133-
, integer-logarithms
134182
, quickcheck-instances >=0.3
135183
, QuickCheck
136184
, random
@@ -139,7 +187,6 @@ test-suite circuit-tests
139187
, tasty-hunit >=0.10
140188
, tasty-hspec
141189
, tasty-quickcheck >=0.10
142-
, vec
143190

144191
build-tool-depends: tasty-discover:tasty-discover >=4.2
145192

Diff for: circom-compat/app/Main.hs

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
module Main where
55

66
import Circuit
7+
import Circuit.Language
78
import Data.Binary (encodeFile)
8-
import Data.Field.Galois (GaloisField, Prime)
9+
import Data.Field.Galois (Prime)
910
import Data.Map qualified as Map
1011
import Data.Set qualified as Set
1112
import Protolude
@@ -14,7 +15,7 @@ import R1CS.Circom (r1csToCircomR1CS, witnessToCircomWitness)
1415

1516
main :: IO ()
1617
main = do
17-
let BuilderState {..} = snd $ runCircuitBuilder $ program @Fr
18+
let BuilderState {..} = snd $ runCircuitBuilder program
1819
publicInputs = Map.fromList $ zip (Set.toAscList $ cvPublicInputs bsVars) [6]
1920
privateInputs = Map.fromList $ zip (Set.toAscList $ cvPrivateInputs bsVars) [2, 3]
2021
inputs = publicInputs <> privateInputs
@@ -25,7 +26,7 @@ main = do
2526

2627
type Fr = Prime 21888242871839275222246405745257275088548364400416034343698204186575808495617
2728

28-
program :: (GaloisField f) => ExprM f Wire
29+
program :: ExprM Fr Wire
2930
program = do
3031
n <- deref <$> fieldInput Public "n"
3132
a <- deref <$> fieldInput Private "a"

Diff for: src/Circuit.hs renamed to circuit/src/Circuit.hs

-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
module Circuit
22
( module Circuit.Affine,
33
module Circuit.Arithmetic,
4-
module Circuit.Lang,
5-
module Circuit.Expr,
64
module Circuit.Dataflow,
75
module Circuit.Solver,
86
)
@@ -11,6 +9,4 @@ where
119
import Circuit.Affine
1210
import Circuit.Arithmetic
1311
import Circuit.Dataflow
14-
import Circuit.Expr
15-
import Circuit.Lang
1612
import Circuit.Solver
File renamed without changes.

Diff for: src/Circuit/Arithmetic.hs renamed to circuit/src/Circuit/Arithmetic.hs

+4-1
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@ instance FromJSON Wire
5555

5656
instance ToJSON Wire
5757

58+
instance Hashable Wire where
59+
hashWithSalt s w = s `hashWithSalt` (0 :: Int) `hashWithSalt` (wireName w)
60+
5861
instance Pretty Wire where
5962
pretty (InputWire label t v) =
6063
let a = case t of
6164
Public -> "pub"
6265
Private -> "priv"
63-
in text (a <> "_input_") <> pretty v <> "_{\"" <> pretty label <> "\"}"
66+
in text (a <> "_input_") <> pretty v <> "_" <> pretty label
6467
pretty (IntermediateWire v) = text "imm_" <> pretty v
6568
pretty (OutputWire v) = text "output_" <> pretty v
6669

File renamed without changes.
File renamed without changes.
File renamed without changes.

Diff for: src/Fresh.hs renamed to circuit/src/Fresh.hs

File renamed without changes.

Diff for: src/R1CS.hs renamed to circuit/src/R1CS.hs

File renamed without changes.

Diff for: test/Main.hs renamed to circuit/test/Main.hs

File renamed without changes.
File renamed without changes.

Diff for: test/Test/Circuit/Arithmetic.hs renamed to circuit/test/Test/Circuit/Arithmetic.hs

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ module Test.Circuit.Arithmetic where
66
import Circuit.Affine
77
import Circuit.Arithmetic
88
import Circuit.Solver
9-
import Data.Field.Galois (Prime, char, fromP)
9+
import Data.Field.Galois (Prime, fromP)
1010
import Data.List ((\\))
1111
import Data.Map qualified as Map
12-
import Math.NumberTheory.Logarithms (naturalLog2)
1312
import Protolude
1413
import Test.Tasty.QuickCheck
1514

@@ -181,7 +180,7 @@ prop_division (a, b) =
181180
in Map.lookup 3 solution == Just (a / b)
182181

183182
nBits :: Int
184-
nBits = 1 + naturalLog2 (char (1 :: Fr))
183+
nBits = 254
185184

186185
prop_bitSummingForward :: Fr -> Bool
187186
prop_bitSummingForward a =
File renamed without changes.

Diff for: language/src/Circuit/Language.hs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module Circuit.Language
2+
( module Circuit.Language.Compile,
3+
module Circuit.Language.DSL,
4+
module Circuit.Language.TExpr,
5+
)
6+
where
7+
8+
import Circuit.Language.Compile
9+
import Circuit.Language.DSL
10+
import Circuit.Language.TExpr

0 commit comments

Comments
 (0)