logo

Expression of type ExprTuple

from the theory of proveit.physics.quantum.QPE

In [1]:
import proveit
# Automation is not needed when building an expression:
proveit.defaults.automation = False # This will speed things up.
proveit.defaults.inline_pngs = False # Makes files smaller.
%load_expr # Load the stored expression as 'stored_expr'
# import Expression classes needed to build the expression
from proveit import Conditional, ExprRange, ExprTuple, Lambda, U, Variable, VertExprArray, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult
from proveit.logic import And, Equals, Forall, InSet
from proveit.numbers import Add, Exp, Interval, IntervalCO, Mult, NaturalPos, Real, e, i, one, pi, subtract, two, zero
from proveit.physics.quantum import I, NumKet, Z, ket_plus, var_ket_u
from proveit.physics.quantum.QPE import QPE, phase, two_pow_t
from proveit.physics.quantum.circuits import Gate, Input, Measure, MultiQubitElem, Output, Qcircuit
from proveit.statistics import Prob
In [2]:
# build up the expression from sub-expressions
sub_expr1 = Variable("_a", latex_format = r"{_{-}a}")
sub_expr2 = [s, t, U, var_ket_u, phase]
sub_expr3 = Add(t, one)
sub_expr4 = Add(t, s)
sub_expr5 = InSet(phase, Real)
sub_expr6 = InSet(t, NaturalPos)
sub_expr7 = Interval(sub_expr3, sub_expr4)
sub_expr8 = Mult(two_pow_t, phase)
sub_expr9 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr4))
sub_expr10 = InSet(sub_expr8, Interval(zero, subtract(two_pow_t, one)))
sub_expr11 = Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))
sub_expr12 = Equals(Prob(Qcircuit(vert_expr_array = VertExprArray([ExprRange(sub_expr1, Input(state = ket_plus), one, t), ExprRange(sub_expr1, MultiQubitElem(element = Input(state = var_ket_u, part = sub_expr1), targets = sub_expr7), one, s)], [ExprRange(sub_expr1, sub_expr9, one, t), ExprRange(sub_expr1, sub_expr9, sub_expr3, sub_expr4)], [ExprRange(sub_expr1, Measure(basis = Z), one, t), ExprRange(sub_expr1, Gate(operation = I).with_implicit_representation(), one, s)], [ExprRange(sub_expr1, MultiQubitElem(element = Output(state = NumKet(sub_expr8, t), part = sub_expr1), targets = Interval(one, t)), one, t), ExprRange(sub_expr1, MultiQubitElem(element = Output(state = var_ket_u, part = sub_expr1), targets = sub_expr7), one, s)]))), one)
sub_expr13 = Conditional(sub_expr12, And(sub_expr5, sub_expr10, sub_expr11, InSet(phase, IntervalCO(zero, one))))
sub_expr14 = Conditional(sub_expr12, And(sub_expr5, sub_expr10, sub_expr11))
expr = ExprTuple(Forall(instance_param_or_params = sub_expr2, instance_expr = Equals(sub_expr13, sub_expr14), condition = sub_expr6), Equals(Lambda(sub_expr2, Conditional(sub_expr13, sub_expr6)), Lambda(sub_expr2, Conditional(sub_expr14, sub_expr6))).with_wrapping_at(2))
expr:
In [3]:
# check that the built expression is the same as the stored expression
assert expr == stored_expr
assert expr._style_id == stored_expr._style_id
print("Passed sanity check: expr matches stored_expr")
Passed sanity check: expr matches stored_expr
In [4]:
# Show the LaTeX representation of the expression for convenience if you need it.
print(stored_expr.latex())
\left(\forall_{s, t, U, \lvert u \rangle, \varphi~|~t \in \mathbb{N}^+}~\left(\left\{\textrm{Pr}\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} & \ghost{\textrm{QPE}\left(U, t\right)} & \measure{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} \qw & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right) = 1 \textrm{ if } \varphi \in \mathbb{R} ,  \left(2^{t} \cdot \varphi\right) \in \{0~\ldotp \ldotp~2^{t} - 1\} ,  \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right) ,  \varphi \in \left[0,1\right)\right.. = \left\{\textrm{Pr}\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} & \ghost{\textrm{QPE}\left(U, t\right)} & \measure{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} \qw & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right) = 1 \textrm{ if } \varphi \in \mathbb{R} ,  \left(2^{t} \cdot \varphi\right) \in \{0~\ldotp \ldotp~2^{t} - 1\} ,  \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right)\right..\right), \begin{array}{c} \begin{array}{l} \left[\left(s, t, U, \lvert u \rangle, \varphi\right) \mapsto \left\{\left\{\textrm{Pr}\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} & \ghost{\textrm{QPE}\left(U, t\right)} & \measure{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} \qw & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right) = 1 \textrm{ if } \varphi \in \mathbb{R} ,  \left(2^{t} \cdot \varphi\right) \in \{0~\ldotp \ldotp~2^{t} - 1\} ,  \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right) ,  \varphi \in \left[0,1\right)\right.. \textrm{ if } t \in \mathbb{N}^+\right..\right] =  \\ \left[\left(s, t, U, \lvert u \rangle, \varphi\right) \mapsto \left\{\left\{\textrm{Pr}\left(\begin{array}{c} \Qcircuit@C=1em @R=.7em{
\qin{\lvert + \rangle} & \multigate{4}{\textrm{QPE}\left(U, t\right)} & \meter & \multiqout{3}{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} & \ghost{\textrm{QPE}\left(U, t\right)} & \measure{\begin{array}{c}:\\ \left(t - 3\right) \times \\:\end{array}} \qw & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert + \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & \meter & \ghostqout{\lvert 2^{t} \cdot \varphi \rangle_{t}} \\
\qin{\lvert u \rangle} & \ghost{\textrm{QPE}\left(U, t\right)} & { /^{s} } \qw & \qout{\lvert u \rangle}
} \end{array}\right) = 1 \textrm{ if } \varphi \in \mathbb{R} ,  \left(2^{t} \cdot \varphi\right) \in \{0~\ldotp \ldotp~2^{t} - 1\} ,  \left(U \thinspace \lvert u \rangle\right) = \left(\mathsf{e}^{2 \cdot \pi \cdot \mathsf{i} \cdot \varphi} \cdot \lvert u \rangle\right)\right.. \textrm{ if } t \in \mathbb{N}^+\right..\right] \end{array} \end{array}\right)
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
wrap_positionsposition(s) at which wrapping is to occur; 'n' is after the nth comma.()()('with_wrapping_at',)
justificationif any wrap positions are set, justify to the 'left', 'center', or 'right'leftleft('with_justification',)
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0ExprTuple1, 2
1Operationoperator: 3
operand: 6
2Operationoperator: 38
operands: 5
3Literal
4ExprTuple6
5ExprTuple7, 8
6Lambdaparameters: 11
body: 9
7Lambdaparameters: 11
body: 10
8Lambdaparameters: 11
body: 12
9Conditionalvalue: 13
condition: 14
10Conditionalvalue: 17
condition: 14
11ExprTuple143, 151, 140, 129, 147
12Conditionalvalue: 18
condition: 14
13Operationoperator: 38
operands: 15
14Operationoperator: 36
operands: 16
15ExprTuple17, 18
16ExprTuple151, 19
17Conditionalvalue: 21
condition: 20
18Conditionalvalue: 21
condition: 22
19Literal
20Operationoperator: 25
operands: 23
21Operationoperator: 38
operands: 24
22Operationoperator: 25
operands: 26
23ExprTuple29, 30, 31, 27
24ExprTuple28, 142
25Literal
26ExprTuple29, 30, 31
27Operationoperator: 36
operands: 32
28Operationoperator: 33
operand: 41
29Operationoperator: 36
operands: 35
30Operationoperator: 36
operands: 37
31Operationoperator: 38
operands: 39
32ExprTuple147, 40
33Literal
34ExprTuple41
35ExprTuple147, 42
36Literal
37ExprTuple141, 43
38Literal
39ExprTuple44, 45
40Operationoperator: 46
operands: 47
41Operationoperator: 48
operands: 49
42Literal
43Operationoperator: 124
operands: 50
44Operationoperator: 51
operands: 52
45Operationoperator: 53
operands: 54
46Literal
47ExprTuple59, 142
48Literal
49ExprTuple55, 56, 57, 58
50ExprTuple59, 60
51Literal
52ExprTuple140, 129
53Literal
54ExprTuple61, 129
55ExprTuple62, 63
56ExprTuple64, 65
57ExprTuple66, 67
58ExprTuple68, 69
59Literal
60Operationoperator: 138
operands: 70
61Operationoperator: 148
operands: 71
62ExprRangelambda_map: 72
start_index: 142
end_index: 151
63ExprRangelambda_map: 73
start_index: 142
end_index: 143
64ExprRangelambda_map: 74
start_index: 142
end_index: 151
65ExprRangelambda_map: 74
start_index: 131
end_index: 132
66ExprRangelambda_map: 75
start_index: 142
end_index: 151
67ExprRangelambda_map: 76
start_index: 142
end_index: 143
68ExprRangelambda_map: 77
start_index: 142
end_index: 151
69ExprRangelambda_map: 78
start_index: 142
end_index: 143
70ExprTuple146, 79
71ExprTuple80, 81
72Lambdaparameter: 130
body: 82
73Lambdaparameter: 130
body: 83
74Lambdaparameter: 130
body: 84
75Lambdaparameter: 130
body: 85
76Lambdaparameter: 130
body: 86
77Lambdaparameter: 130
body: 87
78Lambdaparameter: 130
body: 89
79Operationoperator: 90
operand: 142
80Literal
81Operationoperator: 144
operands: 92
82Operationoperator: 116
operands: 93
83Operationoperator: 100
operands: 94
84Operationoperator: 100
operands: 95
85Operationoperator: 96
operands: 97
86Operationoperator: 117
operands: 98
87Operationoperator: 100
operands: 99
88ExprTuple130
89Operationoperator: 100
operands: 101
90Literal
91ExprTuple142
92ExprTuple150, 102, 103, 147
93NamedExprsstate: 104
94NamedExprselement: 105
targets: 113
95NamedExprselement: 106
targets: 107
96Literal
97NamedExprsbasis: 108
98NamedExprsoperation: 109
99NamedExprselement: 110
targets: 111
100Literal
101NamedExprselement: 112
targets: 113
102Literal
103Literal
104Operationoperator: 114
operand: 126
105Operationoperator: 116
operands: 123
106Operationoperator: 117
operands: 118
107Operationoperator: 124
operands: 119
108Literal
109Literal
110Operationoperator: 122
operands: 120
111Operationoperator: 124
operands: 121
112Operationoperator: 122
operands: 123
113Operationoperator: 124
operands: 125
114Literal
115ExprTuple126
116Literal
117Literal
118NamedExprsoperation: 127
part: 130
119ExprTuple142, 132
120NamedExprsstate: 128
part: 130
121ExprTuple142, 151
122Literal
123NamedExprsstate: 129
part: 130
124Literal
125ExprTuple131, 132
126Literal
127Operationoperator: 133
operands: 134
128Operationoperator: 135
operands: 136
129Variable
130Variable
131Operationoperator: 138
operands: 137
132Operationoperator: 138
operands: 139
133Literal
134ExprTuple140, 151
135Literal
136ExprTuple141, 151
137ExprTuple151, 142
138Literal
139ExprTuple151, 143
140Variable
141Operationoperator: 144
operands: 145
142Literal
143Variable
144Literal
145ExprTuple146, 147
146Operationoperator: 148
operands: 149
147Variable
148Literal
149ExprTuple150, 151
150Literal
151Variable