mirror of
https://github.com/Veridise/Picus.git
synced 2026-05-11 03:00:06 -04:00
WIP: new range interface
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,4 @@
|
||||
#lang rosette
|
||||
; (provide (prefix-out config: (all-defined-out)))
|
||||
(provide (rename-out
|
||||
[p config:p] [bvp config:bvp]
|
||||
[b config:b] [bvb config:bvb]
|
||||
@@ -32,18 +31,8 @@
|
||||
; (fixme) quick fix for mul function to speed up
|
||||
|
||||
; uncomment this for normal mul
|
||||
(define (mul x y)
|
||||
(define (mul x y)
|
||||
(define res (bvmul x y))
|
||||
; (assert (&& (bvsge res x) (bvsge res y)))
|
||||
res
|
||||
)
|
||||
|
||||
; uncomment this for uninterpreted mul
|
||||
; (define-symbolic smul (~> bvtyp bvtyp bvtyp))
|
||||
; (define (mul x y)
|
||||
; (define res (smul x y))
|
||||
; ; (assert (&& (bvsge res x) (bvsge res y)))
|
||||
; ; (assert (&& (bvsgt x (bv 0 bvtyp)) (bvsgt y (bv 0 bvtyp))))
|
||||
; ; (assert (&& (not (bvzero? x)) (not (bvzero? y))))
|
||||
; res
|
||||
; )
|
||||
)
|
||||
@@ -1,88 +0,0 @@
|
||||
#lang rosette
|
||||
(require "./tokamak.rkt")
|
||||
(require "./utils.rkt")
|
||||
(require "./config.rkt")
|
||||
(require "./r1cs.rkt")
|
||||
; (provide (all-defined-out))
|
||||
(provide (rename-out
|
||||
[interpret-r1cs interpret-r1cs]
|
||||
))
|
||||
|
||||
; helper function
|
||||
(define (next-symbolic-integer)
|
||||
(define-symbolic* r1cs.x config:bvtyp)
|
||||
r1cs.x
|
||||
)
|
||||
|
||||
; constants
|
||||
(define bv-zero (bv 0 config:bvtyp))
|
||||
(define bv-one (bv 1 config:bvtyp))
|
||||
|
||||
(define (interpret-r1cs arg-r1cs arg-xlist)
|
||||
; first create a list of all symbolic variables according to nwires
|
||||
(define nwires (get-nwires arg-r1cs))
|
||||
; strictly align with wid
|
||||
(define xlist (if (null? arg-xlist)
|
||||
; create fresh new
|
||||
(for/list ([_ nwires]) (next-symbolic-integer))
|
||||
; use existing one
|
||||
arg-xlist
|
||||
))
|
||||
|
||||
; then start creating constraints
|
||||
(define m (get-mconstraints arg-r1cs))
|
||||
(define rconstraints (get-constraints arg-r1cs)) ; r1cs constraints
|
||||
|
||||
; symbolic constraints
|
||||
(define sconstraints (for/list ([cnst rconstraints])
|
||||
|
||||
; get block
|
||||
(define curr-block-a (constraint-a cnst))
|
||||
(define curr-block-b (constraint-b cnst))
|
||||
(define curr-block-c (constraint-c cnst))
|
||||
|
||||
; process block a
|
||||
(define nnz-a (constraint-block-nnz curr-block-a))
|
||||
(define wids-a (constraint-block-wids curr-block-a))
|
||||
(define factors-a (constraint-block-factors curr-block-a))
|
||||
|
||||
; process block b
|
||||
(define nnz-b (constraint-block-nnz curr-block-b))
|
||||
(define wids-b (constraint-block-wids curr-block-b))
|
||||
(define factors-b (constraint-block-factors curr-block-b))
|
||||
|
||||
; process block c
|
||||
(define nnz-c (constraint-block-nnz curr-block-c))
|
||||
(define wids-c (constraint-block-wids curr-block-c))
|
||||
(define factors-c (constraint-block-factors curr-block-c))
|
||||
|
||||
; assemble symbolic terms
|
||||
; note that terms could be empty, in which case 0 is used
|
||||
(define terms-a (cons bv-zero (for/list ([w0 wids-a] [f0 factors-a])
|
||||
(config:mul (bv f0 config:bvtyp) (list-ref xlist w0))
|
||||
)))
|
||||
(define terms-b (cons bv-zero (for/list ([w0 wids-b] [f0 factors-b])
|
||||
(config:mul (bv f0 config:bvtyp) (list-ref xlist w0))
|
||||
)))
|
||||
(define terms-c (cons bv-zero (for/list ([w0 wids-c] [f0 factors-c])
|
||||
(config:mul (bv f0 config:bvtyp) (list-ref xlist w0))
|
||||
)))
|
||||
|
||||
; assemble equation: A*B = C
|
||||
(define sum-a (apply bvadd terms-a))
|
||||
(define sum-b (apply bvadd terms-b))
|
||||
(define sum-c (apply bvadd terms-c))
|
||||
(define ret-cnst (bveq sum-c (config:mul sum-a sum-b)))
|
||||
|
||||
; return this assembled constraint
|
||||
ret-cnst
|
||||
))
|
||||
|
||||
; return symbolic variable list and symbolic constraint list
|
||||
; note that according to r1cs spec,
|
||||
; "https://github.com/iden3/r1csfile/blob/master/doc/r1cs_bin_format.md#general-considerations"
|
||||
; so we append an additional constraint here
|
||||
; see: https://github.com/iden3/r1csfile/blob/master/doc/r1cs_bin_format.md#general-considerations
|
||||
; (values xlist sconstraints)
|
||||
(values xlist (cons (bveq bv-one (list-ref xlist 0)) sconstraints))
|
||||
)
|
||||
@@ -342,4 +342,79 @@
|
||||
)
|
||||
"")
|
||||
|
||||
)
|
||||
|
||||
; mathematica string
|
||||
(define (r1cs->mstring arg-r1cs arg-id)
|
||||
(define w2l (w2l-section-v (r1cs-w2l arg-r1cs))) ; w2l mapping, a list
|
||||
(define clist (constraint-section-constraints (r1cs-constraint arg-r1cs))) ; a list of constraints
|
||||
|
||||
(define example-constraint (list-ref clist arg-id)) ; a constraint
|
||||
(define example-block-a (constraint-a example-constraint))
|
||||
(define example-block-b (constraint-b example-constraint))
|
||||
(define example-block-c (constraint-c example-constraint))
|
||||
|
||||
; process block a
|
||||
(define nnz-a (constraint-block-nnz example-block-a))
|
||||
(define wids-a (constraint-block-wids example-block-a))
|
||||
(define factors-a (constraint-block-factors example-block-a))
|
||||
(define str-a (string-join
|
||||
(for/list ([w0 wids-a] [f0 factors-a])
|
||||
(string-join (list
|
||||
"("
|
||||
(number->string f0)
|
||||
" * x"
|
||||
(number->string w0)
|
||||
")"
|
||||
) "")
|
||||
)
|
||||
" + "
|
||||
))
|
||||
|
||||
; process block b
|
||||
(define nnz-b (constraint-block-nnz example-block-b))
|
||||
(define wids-b (constraint-block-wids example-block-b))
|
||||
(define factors-b (constraint-block-factors example-block-b))
|
||||
(define str-b (string-join
|
||||
(for/list ([w0 wids-b] [f0 factors-b])
|
||||
(string-join (list
|
||||
"("
|
||||
(number->string f0)
|
||||
" * x"
|
||||
(number->string w0)
|
||||
")"
|
||||
) "")
|
||||
)
|
||||
" + "
|
||||
))
|
||||
|
||||
; process block c
|
||||
(define nnz-c (constraint-block-nnz example-block-c))
|
||||
(define wids-c (constraint-block-wids example-block-c))
|
||||
(define factors-c (constraint-block-factors example-block-c))
|
||||
(define str-c (string-join
|
||||
(for/list ([w0 wids-c] [f0 factors-c])
|
||||
(string-join (list
|
||||
"("
|
||||
(number->string f0)
|
||||
" * x"
|
||||
(number->string w0)
|
||||
")"
|
||||
) "")
|
||||
)
|
||||
" + "
|
||||
))
|
||||
|
||||
(string-join
|
||||
(list
|
||||
"(( "
|
||||
(if (zero? (string-length str-a)) "0" str-a)
|
||||
" ) * ( "
|
||||
(if (zero? (string-length str-b)) "0" str-b)
|
||||
" )) mod p == ("
|
||||
(if (zero? (string-length str-c)) "0" str-c)
|
||||
") mod p"
|
||||
)
|
||||
"")
|
||||
|
||||
)
|
||||
@@ -22,6 +22,7 @@
|
||||
(define inputs0 (r1cs-inputs r0))
|
||||
(define outputs0 (r1cs-outputs r0))
|
||||
(for ([i (range t0)]) (printf "~a\n" (r1cs->string r0 i)))
|
||||
; (for ([i (range t0)]) (printf "~a\n" (r1cs->mstring r0 i)))
|
||||
(printf "# total constraints: ~a.\n" t0)
|
||||
(printf "# total number of wires: ~a (+1)\n" (get-nwires r0))
|
||||
(printf "# inputs: ~a.\n" inputs0)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#lang rosette
|
||||
(require json)
|
||||
(require rosette/solver/smt/z3)
|
||||
(current-solver (z3 #:logic 'QF_NIA))
|
||||
(printf "# using solver: ~a\n" (current-solver))
|
||||
@@ -12,18 +13,34 @@
|
||||
|
||||
; parse command line arguments
|
||||
(define arg-r1cs null)
|
||||
(define arg-range null)
|
||||
(command-line
|
||||
#:once-any
|
||||
#:once-each
|
||||
[("--r1cs") p-r1cs "path to target r1cs"
|
||||
(begin
|
||||
(printf "# r1cs file: ~a\n" p-r1cs)
|
||||
(set! arg-r1cs p-r1cs)
|
||||
(printf "# r1cs file: ~a\n" arg-r1cs)
|
||||
(when (! (string-suffix? arg-r1cs ".r1cs"))
|
||||
(printf "# error: file need to be *.r1cs\n")
|
||||
(exit 0)
|
||||
)
|
||||
)
|
||||
]
|
||||
#:once-any
|
||||
[("--range") "enable range analysis"
|
||||
(begin
|
||||
(set! arg-range (string-replace arg-r1cs ".r1cs" ".range.json"))
|
||||
(printf "# range file: ~a\n" arg-range)
|
||||
)
|
||||
]
|
||||
)
|
||||
(when (null? arg-r1cs) (tokamak:exit "r1cs should not be null."))
|
||||
|
||||
(define r0 (read-r1cs arg-r1cs))
|
||||
(define j0 (if (null? arg-range)
|
||||
null
|
||||
(string->jsexpr (file->string arg-range) #:null null)
|
||||
))
|
||||
|
||||
; restrict reasoning precision, not applicable on bv
|
||||
; (current-bitwidth 4) ; hmm...
|
||||
@@ -55,24 +72,6 @@
|
||||
; fix inputs, create alternative outputs
|
||||
; (note) need nwires+1 to account for 1st input
|
||||
|
||||
; witness verification (anything not in input list, which is output + witness)
|
||||
; (define xlist0 (for/list ([i (range (+ 1 nwires))])
|
||||
; (if (contains? input-list i) (list-ref xlist i) (next-symbolic-integer-alternative))))
|
||||
|
||||
; ; =======================================
|
||||
; ; (fixme)
|
||||
; ; witness verification (anything not in input list, which is output + witness)
|
||||
; (define xlist0 (for/list ([i (range (+ 1 nwires))])
|
||||
; (if (contains? input-list i) (list-ref xlist i) (next-symbolic-integer-alternative))))
|
||||
; (printf "# xlist0: ~a.\n" xlist0)
|
||||
; ; then interpret again
|
||||
; (printf "# interpreting alternative r1cs...\n")
|
||||
; (define-values (_ sconstraints0) (interpret-r1cs r0 xlist0))
|
||||
; ; existence of different valuation of outputs
|
||||
; (define dconstraints (for/list ([i (range (+ 1 nwires))])
|
||||
; (if (contains? input-list i) #t (! (= (list-ref xlist i) (list-ref xlist0 i))))))
|
||||
; ; =======================================
|
||||
|
||||
; =======================================
|
||||
; output verification (weak verification)
|
||||
; clara fixed version
|
||||
@@ -80,13 +79,29 @@
|
||||
; |- but restrict output variables as weak verification states
|
||||
(define xlist0 (for/list ([i (range (+ 1 nwires))])
|
||||
(if (not (contains? input-list i)) (next-symbolic-integer-alternative) (list-ref xlist i))))
|
||||
(when (! (null? j0))
|
||||
; range support: see if a stricter range should be applied or not
|
||||
(for ([i (range (+ 1 nwires))])
|
||||
(let ([rg (list-ref j0 i)][vv (list-ref xlist i)][vv0 (list-ref xlist0 i)])
|
||||
(when (! (null? rg))
|
||||
; has new range
|
||||
(assert (&&
|
||||
(<= (list-ref rg 0) vv)
|
||||
(<= vv (list-ref rg 1))
|
||||
))
|
||||
(assert (&&
|
||||
(<= (list-ref rg 0) vv0)
|
||||
(<= vv0 (list-ref rg 1))
|
||||
))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(printf "# xlist0: ~a.\n" xlist0)
|
||||
; then interpret again
|
||||
(printf "# interpreting alternative r1cs...\n")
|
||||
(define-values (_ sconstraints0) (interpret-r1cs r0 xlist0))
|
||||
; existence of different valuation of outputs
|
||||
; (define dconstraints (for/list ([i (range (+ 1 nwires))])
|
||||
; (if (contains? output-list i) (! (= (list-ref xlist i) (list-ref xlist0 i))) #t)))
|
||||
; (note) we are using || later, so we need #f for all matching cases
|
||||
(define dconstraints (for/list ([i (range (+ 1 nwires))])
|
||||
(if (contains? output-list i) (! (= (list-ref xlist i) (list-ref xlist0 i))) #f)))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 8.6 MiB |
@@ -1,108 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600pt" height="400pt" viewBox="0 0 600 400" version="1.1">
|
||||
<g id="surface8">
|
||||
<rect x="0" y="0" width="600" height="400" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.25 164.945312 C 545.25 165.945312 543.75 165.945312 543.75 164.945312 C 543.75 163.945312 545.25 163.945312 545.25 164.945312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 543.972656 165.472656 C 515.148438 168.519531 498.167969 184.304688 493.019531 212.824219 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 543.972656 165.472656 C 538.824219 193.996094 521.839844 209.777344 493.019531 212.824219 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 494.300781 212.292969 C 494.300781 213.292969 492.800781 213.292969 492.800781 212.292969 C 492.800781 211.292969 494.300781 211.292969 494.300781 212.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 492.179688 308.839844 C 492.179688 309.839844 490.679688 309.839844 490.679688 308.839844 C 490.679688 307.839844 492.179688 307.839844 492.179688 308.839844 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 490.898438 309.371094 C 520.609375 307.089844 538.53125 291.367188 544.660156 262.207031 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 490.898438 309.371094 C 497.027344 280.210938 514.949219 264.488281 544.660156 262.207031 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.9375 261.679688 C 545.9375 262.679688 544.4375 262.679688 544.4375 261.679688 C 544.4375 260.679688 545.9375 260.679688 545.9375 261.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 561.28125 219.941406 C 561.28125 220.941406 559.78125 220.941406 559.78125 219.941406 C 559.78125 218.941406 561.28125 218.941406 561.28125 219.941406 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 543.972656 165.472656 C 535.566406 187.8125 540.90625 206.148438 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 543.972656 165.472656 C 563.0625 179.800781 568.40625 198.132812 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.25 164.945312 C 545.25 165.945312 543.75 165.945312 543.75 164.945312 C 543.75 163.945312 545.25 163.945312 545.25 164.945312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 479.25 253.984375 C 479.25 254.984375 477.75 254.984375 477.75 253.984375 C 477.75 252.984375 479.25 252.984375 479.25 253.984375 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 490.898438 309.371094 C 500.304688 287.851562 495.992188 269.566406 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 490.898438 309.371094 C 472.875 294.320312 468.566406 276.03125 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 492.179688 308.839844 C 492.179688 309.839844 490.679688 309.839844 490.679688 308.839844 C 490.679688 307.839844 492.179688 307.839844 492.179688 308.839844 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 41.28125 156.773438 C 41.28125 157.773438 39.78125 157.773438 39.78125 156.773438 C 39.78125 155.773438 41.28125 155.773438 41.28125 156.773438 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40 157.304688 C 34.253906 181.835938 42.351562 200.296875 64.296875 212.683594 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40 157.304688 C 61.945312 169.6875 70.042969 188.148438 64.296875 212.683594 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 65.578125 212.152344 C 65.578125 213.152344 64.078125 213.152344 64.078125 212.152344 C 64.078125 211.152344 65.578125 211.152344 65.578125 212.152344 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 197.027344 359.46875 C 197.027344 360.46875 195.527344 360.46875 195.527344 359.46875 C 195.527344 358.46875 197.027344 358.46875 197.027344 359.46875 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.746094 360 C 188.929688 329.71875 170.03125 313.613281 139.054688 311.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.746094 360 C 164.769531 358.066406 145.871094 341.960938 139.054688 311.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 140.335938 311.148438 C 140.335938 312.148438 138.835938 312.148438 138.835938 311.148438 C 138.835938 310.148438 140.335938 310.148438 140.335938 311.148438 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 272.925781 69.550781 C 272.925781 70.550781 271.425781 70.550781 271.425781 69.550781 C 271.425781 68.550781 272.925781 68.550781 272.925781 69.550781 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 253.484375 39.46875 C 253.484375 40.46875 251.984375 40.46875 251.984375 39.46875 C 251.984375 38.46875 253.484375 38.46875 253.484375 39.46875 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 338.75 42.128906 C 338.75 43.128906 337.25 43.128906 337.25 42.128906 C 337.25 41.128906 338.75 41.128906 338.75 42.128906 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 70.050781 269.292969 C 70.050781 270.292969 68.550781 270.292969 68.550781 269.292969 C 68.550781 268.292969 70.050781 268.292969 70.050781 269.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 272.925781 69.550781 C 272.925781 70.550781 271.425781 70.550781 271.425781 69.550781 C 271.425781 68.550781 272.925781 68.550781 272.925781 69.550781 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 268.925781 57.621094 262.445312 47.597656 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 261.40625 62.484375 254.925781 52.457031 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 253.484375 39.46875 C 253.484375 40.46875 251.984375 40.46875 251.984375 39.46875 C 251.984375 38.46875 253.484375 38.46875 253.484375 39.46875 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 253.484375 39.46875 C 253.484375 40.46875 251.984375 40.46875 251.984375 39.46875 C 251.984375 38.46875 253.484375 38.46875 253.484375 39.46875 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 272.6875 55.191406 266.203125 45.164062 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 252.203125 40 C 279.960938 62.203125 308.382812 63.089844 337.46875 42.65625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 257.644531 64.914062 251.164062 54.886719 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 272.925781 69.550781 C 272.925781 70.550781 271.425781 70.550781 271.425781 69.550781 C 271.425781 68.550781 272.925781 68.550781 272.925781 69.550781 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 300.441406 77.394531 322.382812 68.253906 337.46875 42.65625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 252.203125 40 C 281.289062 19.570312 309.710938 20.457031 337.46875 42.65625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 286.730469 44.484375 308.671875 35.34375 337.46875 42.65625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 338.75 42.128906 C 338.75 43.128906 337.25 43.128906 337.25 42.128906 C 337.25 41.128906 338.75 41.128906 338.75 42.128906 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 494.300781 212.292969 C 494.300781 213.292969 492.800781 213.292969 492.800781 212.292969 C 492.800781 211.292969 494.300781 211.292969 494.300781 212.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 481.054688 224.210938 476.039062 238.109375 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 494.953125 229.230469 489.933594 243.125 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 479.25 253.984375 C 479.25 254.984375 477.75 254.984375 477.75 253.984375 C 477.75 252.984375 479.25 252.984375 479.25 253.984375 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.9375 261.679688 C 545.9375 262.679688 544.4375 262.679688 544.4375 261.679688 C 544.4375 260.679688 545.9375 260.679688 545.9375 261.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 556.726562 250.851562 561.84375 236.941406 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 542.816406 245.738281 547.929688 231.828125 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 561.28125 219.941406 C 561.28125 220.941406 559.78125 220.941406 559.78125 219.941406 C 559.78125 218.941406 561.28125 218.941406 561.28125 219.941406 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 494.300781 212.292969 C 494.300781 213.292969 492.800781 213.292969 492.800781 212.292969 C 492.800781 211.292969 494.300781 211.292969 494.300781 212.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 497.886719 242.195312 515.101562 258.65625 544.660156 262.207031 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 513.433594 232.117188 535.761719 234.667969 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 474.105469 221.703125 469.089844 235.601562 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 522.578125 216.375 539.792969 232.835938 544.660156 262.207031 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.9375 261.679688 C 545.9375 262.679688 544.4375 262.679688 544.4375 261.679688 C 544.4375 260.679688 545.9375 260.679688 545.9375 261.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 563.683594 253.410156 568.796875 239.496094 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 524.351562 242.972656 502.121094 240.40625 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 517.257812 198.628906 539.585938 201.179688 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 535.859375 243.183594 540.972656 229.269531 560 220.472656 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 561.28125 219.941406 C 561.28125 220.941406 559.78125 220.941406 559.78125 219.941406 C 559.78125 218.941406 561.28125 218.941406 561.28125 219.941406 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 560 220.472656 C 524.144531 211.3125 496.800781 222.660156 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.019531 212.824219 C 501.898438 231.738281 496.882812 245.636719 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.660156 262.207031 C 520.503906 276.316406 498.273438 273.75 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 560 220.472656 C 541.167969 252.328125 513.824219 263.675781 477.96875 254.515625 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 479.25 253.984375 C 479.25 254.984375 477.75 254.984375 477.75 253.984375 C 477.75 252.984375 479.25 252.984375 479.25 253.984375 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 272.925781 69.550781 C 272.925781 70.550781 271.425781 70.550781 271.425781 69.550781 C 271.425781 68.550781 272.925781 68.550781 272.925781 69.550781 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 276.445312 52.761719 269.964844 42.734375 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 271.648438 70.078125 C 253.886719 67.34375 247.40625 57.316406 252.203125 40 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 253.484375 39.46875 C 253.484375 40.46875 251.984375 40.46875 251.984375 39.46875 C 251.984375 38.46875 253.484375 38.46875 253.484375 39.46875 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 70.050781 269.292969 C 70.050781 270.292969 68.550781 270.292969 68.550781 269.292969 C 68.550781 268.292969 70.050781 268.292969 70.050781 269.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 104.097656 251.5 85.316406 255.964844 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 64.296875 212.683594 C 51.503906 232.847656 52.992188 251.894531 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 108.5625 270.28125 89.78125 274.746094 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 126.394531 255.894531 C 126.394531 256.894531 124.894531 256.894531 124.894531 255.894531 C 124.894531 254.894531 126.394531 254.894531 126.394531 255.894531 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 115.777344 226.640625 95.503906 212.058594 64.296875 212.683594 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 64.296875 212.683594 C 80.074219 230.613281 81.5625 249.65625 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 93.90625 257.050781 73.632812 242.46875 64.296875 212.683594 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 65.578125 212.152344 C 65.578125 213.152344 64.078125 213.152344 64.078125 212.152344 C 64.078125 211.152344 65.578125 211.152344 65.578125 212.152344 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 126.394531 255.894531 C 126.394531 256.894531 124.894531 256.894531 124.894531 255.894531 C 124.894531 254.894531 126.394531 254.894531 126.394531 255.894531 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 101.867188 242.109375 83.085938 246.574219 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 115.945312 278.328125 120.59375 296.746094 139.054688 311.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 110.796875 279.671875 92.015625 284.136719 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 70.050781 269.292969 C 70.050781 270.292969 68.550781 270.292969 68.550781 269.292969 C 68.550781 268.292969 70.050781 268.292969 70.050781 269.292969 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 139.054688 311.679688 C 126.089844 280.15625 102.664062 266.203125 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.113281 256.425781 C 143.574219 271.359375 148.222656 289.777344 139.054688 311.679688 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 139.054688 311.679688 C 105.164062 315.296875 81.734375 301.34375 68.769531 269.820312 "/>
|
||||
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(26.666667%,26.666667%,26.666667%);stroke-opacity:1;stroke-miterlimit:10;" d="M 140.335938 311.148438 C 140.335938 312.148438 138.835938 312.148438 138.835938 311.148438 C 138.835938 310.148438 140.335938 310.148438 140.335938 311.148438 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 125.613281 256.425781 C 125.613281 257.09375 124.613281 257.09375 124.613281 256.425781 C 124.613281 255.757812 125.613281 255.757812 125.613281 256.425781 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40.5 157.304688 C 40.5 157.96875 39.5 157.96875 39.5 157.304688 C 39.5 156.636719 40.5 156.636719 40.5 157.304688 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 196.246094 360 C 196.246094 360.667969 195.246094 360.667969 195.246094 360 C 195.246094 359.332031 196.246094 359.332031 196.246094 360 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 544.472656 165.472656 C 544.472656 166.140625 543.472656 166.140625 543.472656 165.472656 C 543.472656 164.808594 544.472656 164.808594 544.472656 165.472656 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 491.398438 309.371094 C 491.398438 310.039062 490.398438 310.039062 490.398438 309.371094 C 490.398438 308.703125 491.398438 308.703125 491.398438 309.371094 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 64.796875 212.683594 C 64.796875 213.351562 63.796875 213.351562 63.796875 212.683594 C 63.796875 212.015625 64.796875 212.015625 64.796875 212.683594 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 139.554688 311.679688 C 139.554688 312.347656 138.554688 312.347656 138.554688 311.679688 C 138.554688 311.011719 139.554688 311.011719 139.554688 311.679688 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 493.519531 212.824219 C 493.519531 213.492188 492.519531 213.492188 492.519531 212.824219 C 492.519531 212.15625 493.519531 212.15625 493.519531 212.824219 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 545.160156 262.207031 C 545.160156 262.875 544.160156 262.875 544.160156 262.207031 C 544.160156 261.542969 545.160156 261.542969 545.160156 262.207031 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 560.5 220.472656 C 560.5 221.136719 559.5 221.136719 559.5 220.472656 C 559.5 219.804688 560.5 219.804688 560.5 220.472656 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 478.46875 254.515625 C 478.46875 255.179688 477.46875 255.179688 477.46875 254.515625 C 477.46875 253.847656 478.46875 253.847656 478.46875 254.515625 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 272.148438 70.078125 C 272.148438 70.746094 271.148438 70.746094 271.148438 70.078125 C 271.148438 69.414062 272.148438 69.414062 272.148438 70.078125 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 252.703125 40 C 252.703125 40.667969 251.703125 40.667969 251.703125 40 C 251.703125 39.332031 252.703125 39.332031 252.703125 40 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 337.96875 42.65625 C 337.96875 43.324219 336.96875 43.324219 336.96875 42.65625 C 336.96875 41.992188 337.96875 41.992188 337.96875 42.65625 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(100%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 69.269531 269.820312 C 69.269531 270.488281 68.269531 270.488281 68.269531 269.820312 C 68.269531 269.15625 69.269531 269.15625 69.269531 269.820312 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 30 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,599 +0,0 @@
|
||||
/* Created by igraph 0.9.3 */
|
||||
graph {
|
||||
0;
|
||||
1;
|
||||
2;
|
||||
3;
|
||||
4;
|
||||
5;
|
||||
6;
|
||||
7;
|
||||
8;
|
||||
9;
|
||||
10;
|
||||
11;
|
||||
12;
|
||||
13;
|
||||
14;
|
||||
15;
|
||||
16;
|
||||
17;
|
||||
18;
|
||||
19;
|
||||
20;
|
||||
21;
|
||||
22;
|
||||
23;
|
||||
24;
|
||||
25;
|
||||
26;
|
||||
27;
|
||||
28;
|
||||
29;
|
||||
30;
|
||||
31;
|
||||
32;
|
||||
33;
|
||||
34;
|
||||
35;
|
||||
36;
|
||||
37;
|
||||
38;
|
||||
39;
|
||||
40;
|
||||
41;
|
||||
42;
|
||||
43;
|
||||
44;
|
||||
45;
|
||||
46;
|
||||
47;
|
||||
48;
|
||||
49;
|
||||
50;
|
||||
51;
|
||||
52;
|
||||
53;
|
||||
54;
|
||||
55;
|
||||
56;
|
||||
57;
|
||||
58;
|
||||
59;
|
||||
60;
|
||||
61;
|
||||
62;
|
||||
63;
|
||||
64;
|
||||
65;
|
||||
66;
|
||||
67;
|
||||
68;
|
||||
69;
|
||||
70;
|
||||
71;
|
||||
72;
|
||||
73;
|
||||
74;
|
||||
75;
|
||||
76;
|
||||
77;
|
||||
78;
|
||||
79;
|
||||
80;
|
||||
81;
|
||||
82;
|
||||
83;
|
||||
84;
|
||||
85;
|
||||
86;
|
||||
87;
|
||||
88;
|
||||
89;
|
||||
90;
|
||||
91;
|
||||
92;
|
||||
93;
|
||||
94;
|
||||
95;
|
||||
96;
|
||||
97;
|
||||
98;
|
||||
99;
|
||||
100;
|
||||
101;
|
||||
102;
|
||||
103;
|
||||
104;
|
||||
105;
|
||||
106;
|
||||
107;
|
||||
108;
|
||||
109;
|
||||
110;
|
||||
111;
|
||||
112;
|
||||
113;
|
||||
114;
|
||||
115;
|
||||
116;
|
||||
|
||||
57 -- 55;
|
||||
36 -- 33;
|
||||
68 -- 67;
|
||||
85 -- 81;
|
||||
100 -- 88;
|
||||
100 -- 99;
|
||||
58 -- 52;
|
||||
113 -- 107;
|
||||
109 -- 99;
|
||||
112 -- 81;
|
||||
41 -- 40;
|
||||
37 -- 34;
|
||||
109 -- 103;
|
||||
69 -- 66;
|
||||
114 -- 106;
|
||||
110 -- 100;
|
||||
68 -- 29;
|
||||
113 -- 80;
|
||||
42 -- 41;
|
||||
19 -- 18;
|
||||
74 -- 73;
|
||||
87 -- 81;
|
||||
102 -- 99;
|
||||
115 -- 107;
|
||||
111 -- 99;
|
||||
15 -- 14;
|
||||
28 -- 22;
|
||||
43 -- 40;
|
||||
75 -- 74;
|
||||
111 -- 103;
|
||||
16 -- 0;
|
||||
61 -- 29;
|
||||
116 -- 84;
|
||||
112 -- 100;
|
||||
116 -- 95;
|
||||
48 -- 47;
|
||||
115 -- 80;
|
||||
44 -- 41;
|
||||
76 -- 73;
|
||||
104 -- 99;
|
||||
98 -- 81;
|
||||
92 -- 39;
|
||||
113 -- 99;
|
||||
49 -- 48;
|
||||
80 -- 28;
|
||||
100 -- 84;
|
||||
77 -- 74;
|
||||
113 -- 103;
|
||||
54 -- 29;
|
||||
86 -- 85;
|
||||
67 -- 24;
|
||||
101 -- 92;
|
||||
99 -- 80;
|
||||
50 -- 47;
|
||||
82 -- 81;
|
||||
101 -- 96;
|
||||
61 -- 59;
|
||||
114 -- 102;
|
||||
70 -- 59;
|
||||
106 -- 99;
|
||||
100 -- 81;
|
||||
115 -- 99;
|
||||
78 -- 77;
|
||||
51 -- 48;
|
||||
47 -- 29;
|
||||
115 -- 103;
|
||||
98 -- 87;
|
||||
94 -- 92;
|
||||
101 -- 80;
|
||||
116 -- 87;
|
||||
91 -- 32;
|
||||
56 -- 55;
|
||||
58 -- 54;
|
||||
35 -- 33;
|
||||
84 -- 81;
|
||||
63 -- 59;
|
||||
116 -- 91;
|
||||
93 -- 46;
|
||||
108 -- 99;
|
||||
83 -- 31;
|
||||
86 -- 84;
|
||||
40 -- 29;
|
||||
30 -- 14;
|
||||
68 -- 66;
|
||||
100 -- 87;
|
||||
96 -- 92;
|
||||
103 -- 80;
|
||||
64 -- 62;
|
||||
58 -- 55;
|
||||
37 -- 33;
|
||||
109 -- 91;
|
||||
86 -- 81;
|
||||
82 -- 73;
|
||||
101 -- 99;
|
||||
110 -- 99;
|
||||
33 -- 29;
|
||||
88 -- 84;
|
||||
98 -- 26;
|
||||
65 -- 61;
|
||||
42 -- 40;
|
||||
70 -- 66;
|
||||
102 -- 87;
|
||||
6 -- 2;
|
||||
73 -- 35;
|
||||
105 -- 80;
|
||||
99 -- 27;
|
||||
28 -- 10;
|
||||
75 -- 73;
|
||||
111 -- 91;
|
||||
34 -- 32;
|
||||
103 -- 99;
|
||||
84 -- 38;
|
||||
116 -- 83;
|
||||
7 -- 3;
|
||||
43 -- 32;
|
||||
116 -- 94;
|
||||
71 -- 69;
|
||||
44 -- 40;
|
||||
116 -- 98;
|
||||
112 -- 79;
|
||||
108 -- 84;
|
||||
108 -- 106;
|
||||
75 -- 0;
|
||||
95 -- 91;
|
||||
55 -- 54;
|
||||
49 -- 47;
|
||||
104 -- 102;
|
||||
100 -- 83;
|
||||
77 -- 73;
|
||||
105 -- 99;
|
||||
105 -- 103;
|
||||
88 -- 87;
|
||||
101 -- 95;
|
||||
114 -- 79;
|
||||
110 -- 106;
|
||||
20 -- 17;
|
||||
50 -- 39;
|
||||
77 -- 0;
|
||||
78 -- 76;
|
||||
57 -- 54;
|
||||
51 -- 47;
|
||||
106 -- 102;
|
||||
102 -- 83;
|
||||
85 -- 84;
|
||||
102 -- 98;
|
||||
62 -- 61;
|
||||
111 -- 98;
|
||||
107 -- 103;
|
||||
107 -- 101;
|
||||
103 -- 95;
|
||||
116 -- 90;
|
||||
116 -- 101;
|
||||
112 -- 106;
|
||||
112 -- 82;
|
||||
70 -- 0;
|
||||
86 -- 83;
|
||||
63 -- 62;
|
||||
27 -- 9;
|
||||
112 -- 110;
|
||||
95 -- 94;
|
||||
108 -- 102;
|
||||
36 -- 35;
|
||||
87 -- 84;
|
||||
64 -- 61;
|
||||
100 -- 79;
|
||||
96 -- 95;
|
||||
109 -- 90;
|
||||
109 -- 101;
|
||||
63 -- 0;
|
||||
76 -- 30;
|
||||
37 -- 36;
|
||||
72 -- 0;
|
||||
92 -- 91;
|
||||
69 -- 68;
|
||||
88 -- 83;
|
||||
65 -- 62;
|
||||
101 -- 91;
|
||||
114 -- 110;
|
||||
95 -- 60;
|
||||
97 -- 94;
|
||||
110 -- 102;
|
||||
116 -- 109;
|
||||
33 -- 32;
|
||||
29 -- 13;
|
||||
44 -- 42;
|
||||
93 -- 90;
|
||||
70 -- 69;
|
||||
102 -- 79;
|
||||
98 -- 95;
|
||||
111 -- 101;
|
||||
56 -- 0;
|
||||
69 -- 30;
|
||||
34 -- 31;
|
||||
65 -- 0;
|
||||
116 -- 82;
|
||||
94 -- 91;
|
||||
71 -- 68;
|
||||
103 -- 91;
|
||||
116 -- 97;
|
||||
116 -- 86;
|
||||
112 -- 102;
|
||||
108 -- 83;
|
||||
66 -- 23;
|
||||
44 -- 43;
|
||||
111 -- 80;
|
||||
95 -- 90;
|
||||
72 -- 69;
|
||||
104 -- 79;
|
||||
49 -- 0;
|
||||
62 -- 30;
|
||||
100 -- 82;
|
||||
94 -- 53;
|
||||
40 -- 39;
|
||||
58 -- 0;
|
||||
113 -- 90;
|
||||
17 -- 5;
|
||||
19 -- 17;
|
||||
113 -- 101;
|
||||
51 -- 49;
|
||||
115 -- 113;
|
||||
100 -- 86;
|
||||
77 -- 76;
|
||||
76 -- 0;
|
||||
89 -- 30;
|
||||
56 -- 54;
|
||||
96 -- 91;
|
||||
111 -- 109;
|
||||
86 -- 52;
|
||||
15 -- 13;
|
||||
101 -- 94;
|
||||
110 -- 83;
|
||||
18 -- 6;
|
||||
37 -- 32;
|
||||
107 -- 105;
|
||||
97 -- 90;
|
||||
110 -- 98;
|
||||
55 -- 30;
|
||||
112 -- 108;
|
||||
106 -- 79;
|
||||
51 -- 0;
|
||||
48 -- 46;
|
||||
115 -- 101;
|
||||
44 -- 38;
|
||||
57 -- 46;
|
||||
85 -- 83;
|
||||
78 -- 0;
|
||||
98 -- 91;
|
||||
113 -- 109;
|
||||
107 -- 89;
|
||||
116 -- 89;
|
||||
109 -- 105;
|
||||
103 -- 98;
|
||||
48 -- 30;
|
||||
86 -- 82;
|
||||
63 -- 61;
|
||||
44 -- 0;
|
||||
99 -- 79;
|
||||
114 -- 108;
|
||||
22 -- 20;
|
||||
108 -- 79;
|
||||
116 -- 93;
|
||||
85 -- 45;
|
||||
104 -- 82;
|
||||
44 -- 39;
|
||||
114 -- 112;
|
||||
87 -- 83;
|
||||
104 -- 86;
|
||||
104 -- 97;
|
||||
96 -- 94;
|
||||
113 -- 97;
|
||||
115 -- 109;
|
||||
109 -- 89;
|
||||
55 -- 53;
|
||||
105 -- 94;
|
||||
64 -- 53;
|
||||
41 -- 30;
|
||||
43 -- 42;
|
||||
37 -- 35;
|
||||
37 -- 0;
|
||||
92 -- 90;
|
||||
88 -- 82;
|
||||
111 -- 105;
|
||||
101 -- 90;
|
||||
97 -- 82;
|
||||
116 -- 108;
|
||||
110 -- 79;
|
||||
39 -- 38;
|
||||
33 -- 31;
|
||||
88 -- 86;
|
||||
42 -- 31;
|
||||
97 -- 86;
|
||||
73 -- 0;
|
||||
76 -- 75;
|
||||
112 -- 104;
|
||||
70 -- 68;
|
||||
93 -- 91;
|
||||
93 -- 89;
|
||||
98 -- 83;
|
||||
111 -- 89;
|
||||
34 -- 30;
|
||||
72 -- 71;
|
||||
94 -- 90;
|
||||
113 -- 105;
|
||||
103 -- 101;
|
||||
116 -- 85;
|
||||
62 -- 60;
|
||||
41 -- 38;
|
||||
108 -- 82;
|
||||
71 -- 60;
|
||||
35 -- 31;
|
||||
66 -- 0;
|
||||
50 -- 49;
|
||||
78 -- 75;
|
||||
114 -- 104;
|
||||
72 -- 68;
|
||||
95 -- 89;
|
||||
14 -- 13;
|
||||
46 -- 45;
|
||||
113 -- 89;
|
||||
95 -- 93;
|
||||
51 -- 50;
|
||||
83 -- 82;
|
||||
100 -- 85;
|
||||
96 -- 90;
|
||||
115 -- 105;
|
||||
105 -- 90;
|
||||
105 -- 101;
|
||||
80 -- 22;
|
||||
47 -- 46;
|
||||
41 -- 39;
|
||||
59 -- 0;
|
||||
37 -- 31;
|
||||
68 -- 0;
|
||||
84 -- 83;
|
||||
114 -- 81;
|
||||
5 -- 1;
|
||||
97 -- 89;
|
||||
20 -- 19;
|
||||
16 -- 13;
|
||||
48 -- 45;
|
||||
115 -- 89;
|
||||
97 -- 93;
|
||||
57 -- 56;
|
||||
85 -- 82;
|
||||
102 -- 85;
|
||||
97 -- 25;
|
||||
52 -- 0;
|
||||
53 -- 52;
|
||||
72 -- 67;
|
||||
61 -- 0;
|
||||
58 -- 57;
|
||||
90 -- 89;
|
||||
116 -- 81;
|
||||
112 -- 97;
|
||||
54 -- 53;
|
||||
18 -- 0;
|
||||
65 -- 63;
|
||||
114 -- 100;
|
||||
91 -- 90;
|
||||
104 -- 85;
|
||||
87 -- 82;
|
||||
81 -- 29;
|
||||
45 -- 0;
|
||||
54 -- 0;
|
||||
55 -- 52;
|
||||
32 -- 31;
|
||||
51 -- 46;
|
||||
87 -- 86;
|
||||
92 -- 89;
|
||||
105 -- 97;
|
||||
101 -- 89;
|
||||
11 -- 0;
|
||||
88 -- 85;
|
||||
65 -- 64;
|
||||
101 -- 93;
|
||||
116 -- 100;
|
||||
97 -- 85;
|
||||
38 -- 0;
|
||||
106 -- 85;
|
||||
47 -- 0;
|
||||
79 -- 21;
|
||||
8 -- 4;
|
||||
25 -- 7;
|
||||
40 -- 38;
|
||||
61 -- 60;
|
||||
72 -- 70;
|
||||
49 -- 38;
|
||||
102 -- 81;
|
||||
98 -- 97;
|
||||
77 -- 75;
|
||||
94 -- 89;
|
||||
36 -- 34;
|
||||
103 -- 89;
|
||||
13 -- 0;
|
||||
26 -- 8;
|
||||
58 -- 53;
|
||||
94 -- 93;
|
||||
90 -- 74;
|
||||
103 -- 93;
|
||||
31 -- 0;
|
||||
40 -- 0;
|
||||
110 -- 108;
|
||||
69 -- 67;
|
||||
65 -- 59;
|
||||
42 -- 38;
|
||||
104 -- 81;
|
||||
106 -- 104;
|
||||
96 -- 67;
|
||||
96 -- 89;
|
||||
105 -- 89;
|
||||
15 -- 11;
|
||||
47 -- 45;
|
||||
102 -- 100;
|
||||
96 -- 93;
|
||||
56 -- 45;
|
||||
105 -- 93;
|
||||
88 -- 66;
|
||||
33 -- 0;
|
||||
84 -- 82;
|
||||
42 -- 0;
|
||||
43 -- 41;
|
||||
116 -- 92;
|
||||
16 -- 12;
|
||||
88 -- 81;
|
||||
65 -- 60;
|
||||
97 -- 81;
|
||||
116 -- 96;
|
||||
74 -- 36;
|
||||
112 -- 99;
|
||||
106 -- 81;
|
||||
108 -- 104;
|
||||
98 -- 89;
|
||||
21 -- 19;
|
||||
76 -- 74;
|
||||
72 -- 66;
|
||||
49 -- 45;
|
||||
104 -- 100;
|
||||
98 -- 93;
|
||||
64 -- 63;
|
||||
58 -- 56;
|
||||
113 -- 111;
|
||||
107 -- 93;
|
||||
35 -- 0;
|
||||
109 -- 92;
|
||||
107 -- 80;
|
||||
60 -- 59;
|
||||
54 -- 52;
|
||||
109 -- 107;
|
||||
63 -- 52;
|
||||
114 -- 99;
|
||||
108 -- 81;
|
||||
110 -- 104;
|
||||
91 -- 89;
|
||||
87 -- 59;
|
||||
50 -- 48;
|
||||
19 -- 0;
|
||||
93 -- 92;
|
||||
51 -- 45;
|
||||
87 -- 85;
|
||||
106 -- 100;
|
||||
115 -- 111;
|
||||
109 -- 80;
|
||||
34 -- 33;
|
||||
83 -- 81;
|
||||
62 -- 59;
|
||||
56 -- 52;
|
||||
111 -- 107;
|
||||
71 -- 70;
|
||||
107 -- 99;
|
||||
116 -- 88;
|
||||
110 -- 81;
|
||||
35 -- 34;
|
||||
12 -- 0;
|
||||
67 -- 66;
|
||||
95 -- 92;
|
||||
108 -- 100;
|
||||
98 -- 85;
|
||||
75 -- 29;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
19082
tests/Sign@sign.dot
19082
tests/Sign@sign.dot
File diff suppressed because it is too large
Load Diff
39706
tests/dep-analysis.ipynb
39706
tests/dep-analysis.ipynb
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
49
tests/test-IsZero@comparators.rkt
Normal file
49
tests/test-IsZero@comparators.rkt
Normal file
@@ -0,0 +1,49 @@
|
||||
#lang rosette
|
||||
(output-smt #t)
|
||||
(define-symbolic x0 integer?)
|
||||
(define-symbolic x1 integer?)
|
||||
(define-symbolic x2 integer?)
|
||||
(define-symbolic x3 integer?)
|
||||
|
||||
(define p 21888242871839275222246405745257275088548364400416034343698204186575808495617)
|
||||
(define (assert-range x) (assert (&& (>= x 0) (< x p))))
|
||||
(assert-range x0)
|
||||
(assert-range x1)
|
||||
(assert-range x2)
|
||||
(assert-range x3)
|
||||
(assert (= x0 1))
|
||||
|
||||
; disable modulo
|
||||
; (define (modulo a b) a)
|
||||
|
||||
(define c0 (=
|
||||
(modulo (* x2 x3) p)
|
||||
(modulo (+ x0 (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x1)) p)
|
||||
))
|
||||
|
||||
(define c1 (=
|
||||
(modulo (* x2 x1) p)
|
||||
(modulo 0 p)
|
||||
))
|
||||
|
||||
(define-symbolic x1b integer?)
|
||||
(define-symbolic x3b integer?)
|
||||
(assert-range x1b)
|
||||
(assert-range x3b)
|
||||
|
||||
(define c0b (=
|
||||
(modulo (* x2 x3b) p)
|
||||
(modulo (+ x0 (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x1b)) p)
|
||||
))
|
||||
|
||||
(define c1b (=
|
||||
(modulo (* x2 x1b) p)
|
||||
(modulo 0 p)
|
||||
))
|
||||
|
||||
|
||||
; no range analysis, z3 returns (unknown)
|
||||
; (define sol (solve (assert (&& c0 c1 c0b c1b (! (= x1 x1b)) ))))
|
||||
; with range analysis, z3 returns (unsat), which is verified
|
||||
(define sol (solve (assert (&& c0 c1 c0b c1b (&& (! (= x1 x1b)) (|| (= x1 0) (= x1 1)) (|| (= x1b 0) (= x1b 1)) ) ))))
|
||||
(printf "~a\n" sol)
|
||||
107
tests/test-binsub.rkt
Normal file
107
tests/test-binsub.rkt
Normal file
@@ -0,0 +1,107 @@
|
||||
#lang rosette
|
||||
(output-smt #t)
|
||||
|
||||
(define p 21888242871839275222246405745257275088548364400416034343698204186575808495617)
|
||||
|
||||
; use this to restrict the range to normal prime: [0, p)
|
||||
(define (assert-range x) (assert (&& (>= x 0) (< x p))))
|
||||
|
||||
; use this to restrict the range to binary: {0, 1}
|
||||
(define (assert-binary x) (assert (|| (= x 0) (= x 1))))
|
||||
|
||||
; disable modulo
|
||||
; (define (modulo a b) a)
|
||||
|
||||
; mod eqv
|
||||
(define (peqv x y) (= (modulo x p) (modulo y p)))
|
||||
|
||||
; define original variables
|
||||
(define-symbolic x0 integer?)
|
||||
(define-symbolic x1 integer?)
|
||||
(define-symbolic x2 integer?)
|
||||
(define-symbolic x3 integer?)
|
||||
(define-symbolic x4 integer?)
|
||||
(define-symbolic x5 integer?)
|
||||
(define-symbolic x6 integer?)
|
||||
(define-symbolic x7 integer?)
|
||||
(assert-range x0)
|
||||
(assert-binary x1) ; 0 or 1
|
||||
(assert-binary x2) ; 0 or 1
|
||||
(assert-range x3)
|
||||
(assert-range x4)
|
||||
(assert-range x5)
|
||||
(assert-range x6)
|
||||
(assert-binary x7) ; 0 or 1
|
||||
(assert (= x0 1))
|
||||
|
||||
; define original constraints
|
||||
(define c0 (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x1) x1)
|
||||
0
|
||||
))
|
||||
(define c1 (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x2) x2)
|
||||
0
|
||||
))
|
||||
(define c2 (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x7) x7)
|
||||
0
|
||||
))
|
||||
(define c3 (peqv
|
||||
0
|
||||
(+
|
||||
(* 2 x2)
|
||||
(* 4 x7)
|
||||
x5
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x3)
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495613 x0)
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495615 x4)
|
||||
(* 2 x6)
|
||||
x1
|
||||
)
|
||||
))
|
||||
|
||||
; define alternative variables
|
||||
(define-symbolic x1b integer?)
|
||||
(define-symbolic x2b integer?)
|
||||
(define-symbolic x7b integer?)
|
||||
(assert-binary x1b) ; 0 or 1
|
||||
(assert-binary x2b) ; 0 or 1
|
||||
(assert-binary x7b) ; 0 or 1
|
||||
|
||||
; define alternative constraints
|
||||
(define c0b (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x1b) x1b)
|
||||
0
|
||||
))
|
||||
(define c1b (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x2b) x2b)
|
||||
0
|
||||
))
|
||||
(define c2b (peqv
|
||||
(* (+ (* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x0) x7b) x7b)
|
||||
0
|
||||
))
|
||||
(define c3b (peqv
|
||||
0
|
||||
(+
|
||||
(* 2 x2b)
|
||||
(* 4 x7b)
|
||||
x5
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495616 x3)
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495613 x0)
|
||||
(* 21888242871839275222246405745257275088548364400416034343698204186575808495615 x4)
|
||||
(* 2 x6)
|
||||
x1b
|
||||
)
|
||||
))
|
||||
|
||||
; with range analysis, z3 returns (unsat), which is verified
|
||||
(define sol (solve (assert (&&
|
||||
c0 c1 c2 c3 c0b c1b c2b c3b
|
||||
(||
|
||||
(! (= x1 x1b))
|
||||
(! (= x2 x2b))
|
||||
)
|
||||
))))
|
||||
(printf "~a\n" sol)
|
||||
@@ -1,49 +0,0 @@
|
||||
import re
|
||||
|
||||
from igraph import *
|
||||
from itertools import product
|
||||
from functools import reduce
|
||||
|
||||
def gen_dg(r1cs_txt):
|
||||
with open(r1cs_txt, "r") as f:
|
||||
r1cs_constraints = f.readlines()
|
||||
print(r1cs_constraints[-4])
|
||||
print(r1cs_constraints[-3])
|
||||
# collect all dependencies
|
||||
depsL = []
|
||||
depsR = []
|
||||
for p in r1cs_constraints[1:-4]:
|
||||
pl, pr = p.split("=")
|
||||
pattern0 = re.compile(r"(x.*?)\)")
|
||||
depsL.append(pattern0.findall(pl))
|
||||
depsR.append(pattern0.findall(pr))
|
||||
|
||||
# parse all pts
|
||||
depsL = [[int(x.replace("x","")) for x in p] for p in depsL]
|
||||
depsR = [[int(x.replace("x","")) for x in p] for p in depsR]
|
||||
# collect all points with deps
|
||||
pts = set(reduce(lambda x,y: x+y, depsL, []) + reduce(lambda x,y: x+y, depsR, []))
|
||||
print("# collected vertices: {}".format(len(pts)))
|
||||
|
||||
print("# constructing graph...")
|
||||
g = Graph()
|
||||
g.add_vertices(len(pts))
|
||||
|
||||
for p in depsR:
|
||||
q = list(product(p, p))
|
||||
g.add_edges(q)
|
||||
for p in depsL:
|
||||
q = list(product(p, p))
|
||||
g.add_edges(q)
|
||||
|
||||
return g
|
||||
|
||||
g = gen_dg("../benchmarks/ecne/Poseidon@poseidon.r1cs.log")
|
||||
print("# plotting...")
|
||||
for p in g.vs:
|
||||
p["label_size"]=5
|
||||
visual_style = {}
|
||||
visual_style["margin"]=40
|
||||
visual_style["bbox"]=(600,400)
|
||||
visual_style["vertex_size"]=1
|
||||
plot(g, **visual_style)
|
||||
Reference in New Issue
Block a user