-
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
;; Ask ryli13 if confused about this file.
;; Define and dump a protocol to demonstrate knowledge of factoring 8616460799 = 89681 x 96079
;; Making sure code works
;; !(def and (lambda (x y) (if x (if y t nil) nil)))
;; !(def a 89681)
;; !(def b 96079)
;; !(def comm_a_real (hide #0x8239548349 a))
;; !(def comm_b_real (hide #0x3895383045 b))
;; (let ((open_a (open comm_a_real))
;; (open_b (open comm_b_real)))
;; (and (and (and (< 1 open_a) (< open_a 8616460799))
;; (and (< 1 open_b) (< open_b 8616460799)))
;; (eq 8616460799 (* open_a open_b))
;; )
;; )
;; Defining the actual protocol
!(defprotocol factors_found (comm_a comm_b)
(cons
;; claim definition
(cons (cons
;; expression
;; needs to be a quoted syntax tree
(list 'let
(
list (list 'open_a (list 'open comm_a))
(list 'open_b (list 'open comm_b))
(list 'and (list 'lambda (list 'x 'y) (list 'if 'x (list 'if 'y t nil) nil)))
)
(list 'and
(list 'and
(list 'and
(list '< 1 'open_a)
(list '< 'open_a 8616460799))
(list 'and
(list '< 1 'open_b)
(list '< 'open_b 8616460799)))
(list 'eq 8616460799 (list '* 'open_a 'open_b))
)
)
;; environment
(empty-env)
)
;; expected output
t )
;; post-verification predicate
nil)
:description "proof that one knows two non-one factors that multiply to 8616460799")
!(dump-expr factors_found "factors-8616460799")
;; (eval (list 'eq (list 'open 'comm_a) 89681) (let ((comm_a comm_a_real)) (current-env)))
;; (eval
;; (emit
;; (list 'let
;; (
;; list (list 'open_a (list 'open comm_a_real))
;; (list 'open_b (list 'open comm_b_real))
;; (list 'and (list 'lambda (list 'x 'y) (list 'if 'x (list 'if 'y t nil) nil)))
;; )
;; (list 'and
;; (list 'and
;; (list 'and
;; (list '< 1 'open_a)
;; (list '< 'open_a 8616460799))
;; (list 'and
;; (list '< 1 'open_b)
;; (list '< 'open_b 8616460799)))
;; (list 'eq 8616460799 (list '* 'open_a 'open_b))
;; )
;; )
;; ) (empty-env))