logo

Expression of type Forall

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, 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 = Add(t, one)
sub_expr3 = Add(t, s)
sub_expr4 = InSet(phase, Real)
sub_expr5 = Interval(sub_expr2, sub_expr3)
sub_expr6 = Mult(two_pow_t, phase)
sub_expr7 = MultiQubitElem(element = Gate(operation = QPE(U, t), part = sub_expr1), targets = Interval(one, sub_expr3))
sub_expr8 = InSet(sub_expr6, Interval(zero, subtract(two_pow_t, one)))
sub_expr9 = Equals(MatrixMult(U, var_ket_u), ScalarMult(Exp(e, Mult(two, pi, i, phase)), var_ket_u))
sub_expr10 = 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_expr5), one, s)], [ExprRange(sub_expr1, sub_expr7, one, t), ExprRange(sub_expr1, sub_expr7, sub_expr2, sub_expr3)], [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_expr6, 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_expr5), one, s)]))), one)
expr = Forall(instance_param_or_params = [s, t, U, var_ket_u, phase], instance_expr = Equals(Conditional(sub_expr10, And(sub_expr4, sub_expr8, sub_expr9, InSet(phase, IntervalCO(zero, one)))), Conditional(sub_expr10, And(sub_expr4, sub_expr8, sub_expr9))).with_wrapping_at(1), condition = InSet(t, NaturalPos))
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())
\forall_{s, t, U, \lvert u \rangle, \varphi~|~t \in \mathbb{N}^+}~\left(\begin{array}{c} \begin{array}{l} \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.. \end{array} \end{array}\right)
In [5]:
stored_expr.style_options()
namedescriptiondefaultcurrent valuerelated methods
with_wrappingIf 'True', wrap the Expression after the parametersNoneNone/False('with_wrapping',)
condition_wrappingWrap 'before' or 'after' the condition (or None).NoneNone/False('with_wrap_after_condition', 'with_wrap_before_condition')
wrap_paramsIf 'True', wraps every two parameters AND wraps the Expression after the parametersNoneNone/False('with_params',)
justificationjustify to the 'left', 'center', or 'right' in the array cellscentercenter('with_justification',)
In [6]:
# display the expression information
stored_expr.expr_info()
 core typesub-expressionsexpression
0Operationoperator: 1
operand: 3
1Literal
2ExprTuple3
3Lambdaparameters: 4
body: 5
4ExprTuple136, 144, 133, 122, 140
5Conditionalvalue: 6
condition: 7
6Operationoperator: 31
operands: 8
7Operationoperator: 29
operands: 9
8ExprTuple10, 11
9ExprTuple144, 12
10Conditionalvalue: 14
condition: 13
11Conditionalvalue: 14
condition: 15
12Literal
13Operationoperator: 18
operands: 16
14Operationoperator: 31
operands: 17
15Operationoperator: 18
operands: 19
16ExprTuple22, 23, 24, 20
17ExprTuple21, 135
18Literal
19ExprTuple22, 23, 24
20Operationoperator: 29
operands: 25
21Operationoperator: 26
operand: 34
22Operationoperator: 29
operands: 28
23Operationoperator: 29
operands: 30
24Operationoperator: 31
operands: 32
25ExprTuple140, 33
26Literal
27ExprTuple34
28ExprTuple140, 35
29Literal
30ExprTuple134, 36
31Literal
32ExprTuple37, 38
33Operationoperator: 39
operands: 40
34Operationoperator: 41
operands: 42
35Literal
36Operationoperator: 117
operands: 43
37Operationoperator: 44
operands: 45
38Operationoperator: 46
operands: 47
39Literal
40ExprTuple52, 135
41Literal
42ExprTuple48, 49, 50, 51
43ExprTuple52, 53
44Literal
45ExprTuple133, 122
46Literal
47ExprTuple54, 122
48ExprTuple55, 56
49ExprTuple57, 58
50ExprTuple59, 60
51ExprTuple61, 62
52Literal
53Operationoperator: 131
operands: 63
54Operationoperator: 141
operands: 64
55ExprRangelambda_map: 65
start_index: 135
end_index: 144
56ExprRangelambda_map: 66
start_index: 135
end_index: 136
57ExprRangelambda_map: 67
start_index: 135
end_index: 144
58ExprRangelambda_map: 67
start_index: 124
end_index: 125
59ExprRangelambda_map: 68
start_index: 135
end_index: 144
60ExprRangelambda_map: 69
start_index: 135
end_index: 136
61ExprRangelambda_map: 70
start_index: 135
end_index: 144
62ExprRangelambda_map: 71
start_index: 135
end_index: 136
63ExprTuple139, 72
64ExprTuple73, 74
65Lambdaparameter: 123
body: 75
66Lambdaparameter: 123
body: 76
67Lambdaparameter: 123
body: 77
68Lambdaparameter: 123
body: 78
69Lambdaparameter: 123
body: 79
70Lambdaparameter: 123
body: 80
71Lambdaparameter: 123
body: 82
72Operationoperator: 83
operand: 135
73Literal
74Operationoperator: 137
operands: 85
75Operationoperator: 109
operands: 86
76Operationoperator: 93
operands: 87
77Operationoperator: 93
operands: 88
78Operationoperator: 89
operands: 90
79Operationoperator: 110
operands: 91
80Operationoperator: 93
operands: 92
81ExprTuple123
82Operationoperator: 93
operands: 94
83Literal
84ExprTuple135
85ExprTuple143, 95, 96, 140
86NamedExprsstate: 97
87NamedExprselement: 98
targets: 106
88NamedExprselement: 99
targets: 100
89Literal
90NamedExprsbasis: 101
91NamedExprsoperation: 102
92NamedExprselement: 103
targets: 104
93Literal
94NamedExprselement: 105
targets: 106
95Literal
96Literal
97Operationoperator: 107
operand: 119
98Operationoperator: 109
operands: 116
99Operationoperator: 110
operands: 111
100Operationoperator: 117
operands: 112
101Literal
102Literal
103Operationoperator: 115
operands: 113
104Operationoperator: 117
operands: 114
105Operationoperator: 115
operands: 116
106Operationoperator: 117
operands: 118
107Literal
108ExprTuple119
109Literal
110Literal
111NamedExprsoperation: 120
part: 123
112ExprTuple135, 125
113NamedExprsstate: 121
part: 123
114ExprTuple135, 144
115Literal
116NamedExprsstate: 122
part: 123
117Literal
118ExprTuple124, 125
119Literal
120Operationoperator: 126
operands: 127
121Operationoperator: 128
operands: 129
122Variable
123Variable
124Operationoperator: 131
operands: 130
125Operationoperator: 131
operands: 132
126Literal
127ExprTuple133, 144
128Literal
129ExprTuple134, 144
130ExprTuple144, 135
131Literal
132ExprTuple144, 136
133Variable
134Operationoperator: 137
operands: 138
135Literal
136Variable
137Literal
138ExprTuple139, 140
139Operationoperator: 141
operands: 142
140Variable
141Literal
142ExprTuple143, 144
143Literal
144Variable