logo

Expression of type Implies

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, Lambda, U, Variable, VertExprArray, s, t
from proveit.linear_algebra import MatrixMult, ScalarMult
from proveit.logic import And, Equals, Forall, Implies, 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 = Implies(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)).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())
\begin{array}{c} \begin{array}{l} \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)\right] \Rightarrow  \\ \left(\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) \end{array} \end{array}
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
operation'infix' or 'function' style formattinginfixinfix
wrap_positionsposition(s) at which wrapping is to occur; '2 n - 1' is after the nth operand, '2 n' is after the nth operation.()(2)('with_wrapping_at', 'with_wrap_before_operator', 'with_wrap_after_operator', 'without_wrapping', 'wrap_positions')
justificationif any wrap positions are set, justify to the 'left', 'center', or 'right'centercenter('with_justification',)
directionDirection of the relation (normal or reversed)normalnormal('with_direction_reversed', 'is_reversed')
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Operationoperator: 1
operands: 2
1Literal
2ExprTuple3, 4
3Operationoperator: 5
operand: 8
4Operationoperator: 40
operands: 7
5Literal
6ExprTuple8
7ExprTuple9, 10
8Lambdaparameters: 13
body: 11
9Lambdaparameters: 13
body: 12
10Lambdaparameters: 13
body: 14
11Conditionalvalue: 15
condition: 16
12Conditionalvalue: 19
condition: 16
13ExprTuple145, 153, 142, 131, 149
14Conditionalvalue: 20
condition: 16
15Operationoperator: 40
operands: 17
16Operationoperator: 38
operands: 18
17ExprTuple19, 20
18ExprTuple153, 21
19Conditionalvalue: 23
condition: 22
20Conditionalvalue: 23
condition: 24
21Literal
22Operationoperator: 27
operands: 25
23Operationoperator: 40
operands: 26
24Operationoperator: 27
operands: 28
25ExprTuple31, 32, 33, 29
26ExprTuple30, 144
27Literal
28ExprTuple31, 32, 33
29Operationoperator: 38
operands: 34
30Operationoperator: 35
operand: 43
31Operationoperator: 38
operands: 37
32Operationoperator: 38
operands: 39
33Operationoperator: 40
operands: 41
34ExprTuple149, 42
35Literal
36ExprTuple43
37ExprTuple149, 44
38Literal
39ExprTuple143, 45
40Literal
41ExprTuple46, 47
42Operationoperator: 48
operands: 49
43Operationoperator: 50
operands: 51
44Literal
45Operationoperator: 126
operands: 52
46Operationoperator: 53
operands: 54
47Operationoperator: 55
operands: 56
48Literal
49ExprTuple61, 144
50Literal
51ExprTuple57, 58, 59, 60
52ExprTuple61, 62
53Literal
54ExprTuple142, 131
55Literal
56ExprTuple63, 131
57ExprTuple64, 65
58ExprTuple66, 67
59ExprTuple68, 69
60ExprTuple70, 71
61Literal
62Operationoperator: 140
operands: 72
63Operationoperator: 150
operands: 73
64ExprRangelambda_map: 74
start_index: 144
end_index: 153
65ExprRangelambda_map: 75
start_index: 144
end_index: 145
66ExprRangelambda_map: 76
start_index: 144
end_index: 153
67ExprRangelambda_map: 76
start_index: 133
end_index: 134
68ExprRangelambda_map: 77
start_index: 144
end_index: 153
69ExprRangelambda_map: 78
start_index: 144
end_index: 145
70ExprRangelambda_map: 79
start_index: 144
end_index: 153
71ExprRangelambda_map: 80
start_index: 144
end_index: 145
72ExprTuple148, 81
73ExprTuple82, 83
74Lambdaparameter: 132
body: 84
75Lambdaparameter: 132
body: 85
76Lambdaparameter: 132
body: 86
77Lambdaparameter: 132
body: 87
78Lambdaparameter: 132
body: 88
79Lambdaparameter: 132
body: 89
80Lambdaparameter: 132
body: 91
81Operationoperator: 92
operand: 144
82Literal
83Operationoperator: 146
operands: 94
84Operationoperator: 118
operands: 95
85Operationoperator: 102
operands: 96
86Operationoperator: 102
operands: 97
87Operationoperator: 98
operands: 99
88Operationoperator: 119
operands: 100
89Operationoperator: 102
operands: 101
90ExprTuple132
91Operationoperator: 102
operands: 103
92Literal
93ExprTuple144
94ExprTuple152, 104, 105, 149
95NamedExprsstate: 106
96NamedExprselement: 107
targets: 115
97NamedExprselement: 108
targets: 109
98Literal
99NamedExprsbasis: 110
100NamedExprsoperation: 111
101NamedExprselement: 112
targets: 113
102Literal
103NamedExprselement: 114
targets: 115
104Literal
105Literal
106Operationoperator: 116
operand: 128
107Operationoperator: 118
operands: 125
108Operationoperator: 119
operands: 120
109Operationoperator: 126
operands: 121
110Literal
111Literal
112Operationoperator: 124
operands: 122
113Operationoperator: 126
operands: 123
114Operationoperator: 124
operands: 125
115Operationoperator: 126
operands: 127
116Literal
117ExprTuple128
118Literal
119Literal
120NamedExprsoperation: 129
part: 132
121ExprTuple144, 134
122NamedExprsstate: 130
part: 132
123ExprTuple144, 153
124Literal
125NamedExprsstate: 131
part: 132
126Literal
127ExprTuple133, 134
128Literal
129Operationoperator: 135
operands: 136
130Operationoperator: 137
operands: 138
131Variable
132Variable
133Operationoperator: 140
operands: 139
134Operationoperator: 140
operands: 141
135Literal
136ExprTuple142, 153
137Literal
138ExprTuple143, 153
139ExprTuple153, 144
140Literal
141ExprTuple153, 145
142Variable
143Operationoperator: 146
operands: 147
144Literal
145Variable
146Literal
147ExprTuple148, 149
148Operationoperator: 150
operands: 151
149Variable
150Literal
151ExprTuple152, 153
152Literal
153Variable