Просмотр исходного кода

zk: add forgotten z public output values

x 3 лет назад
Родитель
Сommit
541858e021
1 измененных файлов с 10 добавлено и 0 удалено
  1. 10 0
      script/research/zk/nova-simplified.sage

+ 10 - 0
script/research/zk/nova-simplified.sage

@@ -36,6 +36,7 @@ u1 = hash((1, z0, z1, ()))
 U1 = ()
 U1 = ()
 # ZK proof
 # ZK proof
 assert u1 == hash((1, z0, z1, ()))
 assert u1 == hash((1, z0, z1, ()))
+assert z1 == F(z0, ω0)
 
 
 i = 1
 i = 1
 ω1 = ()
 ω1 = ()
@@ -44,6 +45,7 @@ z2 = F(z1, ω1)
 u2 = hash((i+1, z0, z2, U2))
 u2 = hash((i+1, z0, z2, U2))
 assert u1 == hash((i, z0, z1, U1))
 assert u1 == hash((i, z0, z1, U1))
 assert U2 == fold(U1, u1)
 assert U2 == fold(U1, u1)
+assert z2 == F(z1, ω1)
 assert u2 == hash((i+1, z0, z2, U2))
 assert u2 == hash((i+1, z0, z2, U2))
 
 
 i = 2
 i = 2
@@ -53,8 +55,16 @@ z3 = F(z2, ω2)
 u3 = hash((i+1, z0, z3, U3))
 u3 = hash((i+1, z0, z3, U3))
 assert u2 == hash((i, z0, z2, U2))
 assert u2 == hash((i, z0, z2, U2))
 assert U3 == fold(U2, u2)
 assert U3 == fold(U2, u2)
+assert z3 == F(z2, ω2)
 assert u3 == hash((i+1, z0, z3, U3))
 assert u3 == hash((i+1, z0, z3, U3))
 
 
+# By folding proofs, we simultaneously verify all the asserts
+# when verifying U3 with u3.
+
+# Although there is no connection between u2 in i=1, and u2 in i=2,
+# by including the satisfying accumulator U2, and proving U3 = fold(U2, u2),
+# we guarantee the recursive nature of the circuit.
+
 # We've now made a proof of what 5^4 is
 # We've now made a proof of what 5^4 is
 assert z0 == 5
 assert z0 == 5
 assert z1 == 5*5
 assert z1 == 5*5