{-# LANGUAGE TypeOperators        #-}
{-# LANGUAGE UndecidableInstances #-}

module ZkFold.Base.Protocol.Plonkup.Proof where

import           Prelude                                 hiding (Num (..), drop, length, sum, take, (!!), (/), (^))

import           ZkFold.Base.Algebra.EllipticCurve.Class (CyclicGroup (..))

data PlonkupProof g = PlonkupProof {
        forall g. PlonkupProof g -> g
cmA     :: g,
        forall g. PlonkupProof g -> g
cmB     :: g,
        forall g. PlonkupProof g -> g
cmC     :: g,
        forall g. PlonkupProof g -> g
cmF     :: g,
        forall g. PlonkupProof g -> g
cmH1    :: g,
        forall g. PlonkupProof g -> g
cmH2    :: g,
        forall g. PlonkupProof g -> g
cmZ1    :: g,
        forall g. PlonkupProof g -> g
cmZ2    :: g,
        forall g. PlonkupProof g -> g
cmQlow  :: g,
        forall g. PlonkupProof g -> g
cmQmid  :: g,
        forall g. PlonkupProof g -> g
cmQhigh :: g,
        forall g. PlonkupProof g -> g
proof1  :: g,
        forall g. PlonkupProof g -> g
proof2  :: g,
        forall g. PlonkupProof g -> ScalarFieldOf g
a_xi    :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
b_xi    :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
c_xi    :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
s1_xi   :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
s2_xi   :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
f_xi    :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
t_xi    :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
t_xi'   :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
z1_xi'  :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
z2_xi'  :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
h1_xi'  :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
h2_xi   :: ScalarFieldOf g,
        forall g. PlonkupProof g -> ScalarFieldOf g
l1_xi   :: ScalarFieldOf g
        -- ^ The denominator in the L_1 polynomial evaluation
    }
instance (Show (ScalarFieldOf g), Show g) => Show (PlonkupProof g) where
    show :: PlonkupProof g -> String
show PlonkupProof {g
ScalarFieldOf g
cmA :: forall g. PlonkupProof g -> g
cmB :: forall g. PlonkupProof g -> g
cmC :: forall g. PlonkupProof g -> g
cmF :: forall g. PlonkupProof g -> g
cmH1 :: forall g. PlonkupProof g -> g
cmH2 :: forall g. PlonkupProof g -> g
cmZ1 :: forall g. PlonkupProof g -> g
cmZ2 :: forall g. PlonkupProof g -> g
cmQlow :: forall g. PlonkupProof g -> g
cmQmid :: forall g. PlonkupProof g -> g
cmQhigh :: forall g. PlonkupProof g -> g
proof1 :: forall g. PlonkupProof g -> g
proof2 :: forall g. PlonkupProof g -> g
a_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
b_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
c_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
s1_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
s2_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
f_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
t_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
t_xi' :: forall g. PlonkupProof g -> ScalarFieldOf g
z1_xi' :: forall g. PlonkupProof g -> ScalarFieldOf g
z2_xi' :: forall g. PlonkupProof g -> ScalarFieldOf g
h1_xi' :: forall g. PlonkupProof g -> ScalarFieldOf g
h2_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
l1_xi :: forall g. PlonkupProof g -> ScalarFieldOf g
cmA :: g
cmB :: g
cmC :: g
cmF :: g
cmH1 :: g
cmH2 :: g
cmZ1 :: g
cmZ2 :: g
cmQlow :: g
cmQmid :: g
cmQhigh :: g
proof1 :: g
proof2 :: g
a_xi :: ScalarFieldOf g
b_xi :: ScalarFieldOf g
c_xi :: ScalarFieldOf g
s1_xi :: ScalarFieldOf g
s2_xi :: ScalarFieldOf g
f_xi :: ScalarFieldOf g
t_xi :: ScalarFieldOf g
t_xi' :: ScalarFieldOf g
z1_xi' :: ScalarFieldOf g
z2_xi' :: ScalarFieldOf g
h1_xi' :: ScalarFieldOf g
h2_xi :: ScalarFieldOf g
l1_xi :: ScalarFieldOf g
..} =
        String
"Plonkup Proof: "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmA String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmB String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmC String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmF String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmH1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmH2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmZ1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmZ2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmQlow String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmQmid String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
cmQhigh String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
proof1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ g -> String
forall a. Show a => a -> String
show g
proof2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
a_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
b_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
c_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
s1_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
s2_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
f_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
t_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
t_xi' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
z1_xi' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
z2_xi' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
h1_xi' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
h2_xi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" "
        String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScalarFieldOf g -> String
forall a. Show a => a -> String
show ScalarFieldOf g
l1_xi