WEBVTT
Kind: captions
Language: en

00:00:00.030 --> 00:00:02.629 align:start position:0%
 
yeah<00:00:00.719><c> he's</c><00:00:00.870><c> heading</c><00:00:01.140><c> Leo</c><00:00:01.319><c> work</c><00:00:01.680><c> with</c><00:00:01.949><c> on</c>

00:00:02.629 --> 00:00:02.639 align:start position:0%
yeah he's heading Leo work with on
 

00:00:02.639 --> 00:00:04.910 align:start position:0%
yeah he's heading Leo work with on
foundation<00:00:03.389><c> aetherium</c><00:00:03.750><c> foundation</c><00:00:04.230><c> on</c><00:00:04.560><c> the</c>

00:00:04.910 --> 00:00:04.920 align:start position:0%
foundation aetherium foundation on the
 

00:00:04.920 --> 00:00:09.350 align:start position:0%
foundation aetherium foundation on the
solidity<00:00:05.480><c> team</c><00:00:06.740><c> doing</c><00:00:07.740><c> language</c><00:00:08.580><c> design</c><00:00:09.120><c> work</c>

00:00:09.350 --> 00:00:09.360 align:start position:0%
solidity team doing language design work
 

00:00:09.360 --> 00:00:11.629 align:start position:0%
solidity team doing language design work
and<00:00:09.599><c> compiler</c><00:00:09.929><c> work</c><00:00:10.139><c> and</c><00:00:10.410><c> also</c><00:00:10.559><c> doing</c><00:00:11.370><c> formal</c>

00:00:11.629 --> 00:00:11.639 align:start position:0%
and compiler work and also doing formal
 

00:00:11.639 --> 00:00:14.150 align:start position:0%
and compiler work and also doing formal
verification<00:00:12.080><c> which</c><00:00:13.080><c> is</c><00:00:13.440><c> what</c><00:00:13.740><c> this</c><00:00:13.950><c> talk</c><00:00:14.130><c> is</c>

00:00:14.150 --> 00:00:14.160 align:start position:0%
verification which is what this talk is
 

00:00:14.160 --> 00:00:15.829 align:start position:0%
verification which is what this talk is
about<00:00:14.309><c> I'm</c><00:00:14.730><c> going</c><00:00:14.880><c> to</c><00:00:14.969><c> talk</c><00:00:15.150><c> about</c><00:00:15.269><c> so</c><00:00:15.540><c> ladies</c>

00:00:15.829 --> 00:00:15.839 align:start position:0%
about I'm going to talk about so ladies
 

00:00:15.839 --> 00:00:17.960 align:start position:0%
about I'm going to talk about so ladies
SMT<00:00:16.170><c> checker</c><00:00:16.379><c> which</c><00:00:16.650><c> is</c><00:00:16.859><c> a</c><00:00:17.100><c> formal</c>

00:00:17.960 --> 00:00:17.970 align:start position:0%
SMT checker which is a formal
 

00:00:17.970 --> 00:00:20.210 align:start position:0%
SMT checker which is a formal
verification<00:00:18.119><c> component</c><00:00:18.869><c> that</c><00:00:19.770><c> gives</c>

00:00:20.210 --> 00:00:20.220 align:start position:0%
verification component that gives
 

00:00:20.220 --> 00:00:24.800 align:start position:0%
verification component that gives
compile<00:00:21.060><c> time</c><00:00:21.390><c> results</c><00:00:22.080><c> about</c><00:00:22.920><c> safety</c><00:00:23.810><c> safety</c>

00:00:24.800 --> 00:00:24.810 align:start position:0%
compile time results about safety safety
 

00:00:24.810 --> 00:00:28.880 align:start position:0%
compile time results about safety safety
checks<00:00:25.050><c> so</c><00:00:26.000><c> have</c><00:00:27.000><c> two</c><00:00:27.590><c> questions</c><00:00:28.590><c> so</c><00:00:28.740><c> how</c><00:00:28.830><c> many</c>

00:00:28.880 --> 00:00:28.890 align:start position:0%
checks so have two questions so how many
 

00:00:28.890 --> 00:00:31.120 align:start position:0%
checks so have two questions so how many
people<00:00:29.160><c> here</c><00:00:29.490><c> are</c><00:00:29.519><c> a</c><00:00:29.699><c> solidity</c><00:00:30.090><c> developers</c>

00:00:31.120 --> 00:00:31.130 align:start position:0%
people here are a solidity developers
 

00:00:31.130 --> 00:00:35.270 align:start position:0%
people here are a solidity developers
okay<00:00:32.130><c> cool</c><00:00:32.340><c> and</c><00:00:32.550><c> how</c><00:00:33.540><c> do</c><00:00:33.600><c> you</c><00:00:34.260><c> feel</c><00:00:35.219><c> about</c>

00:00:35.270 --> 00:00:35.280 align:start position:0%
okay cool and how do you feel about
 

00:00:35.280 --> 00:00:41.330 align:start position:0%
okay cool and how do you feel about
audience<00:00:36.059><c> participation</c><00:00:38.719><c> okay</c><00:00:39.719><c> cool</c><00:00:40.340><c> you</c>

00:00:41.330 --> 00:00:41.340 align:start position:0%
audience participation okay cool you
 

00:00:41.340 --> 00:00:44.470 align:start position:0%
audience participation okay cool you
asked<00:00:41.579><c> how</c><00:00:41.760><c> so</c><00:00:42.210><c> request</c><00:00:42.660><c> the</c><00:00:43.469><c> answer</c><00:00:43.829><c> is</c>

00:00:44.470 --> 00:00:44.480 align:start position:0%
asked how so request the answer is
 

00:00:44.480 --> 00:00:49.580 align:start position:0%
asked how so request the answer is
you're<00:00:45.480><c> gonna</c><00:00:45.539><c> help</c><00:00:46.200><c> me</c><00:00:46.320><c> solve</c><00:00:46.469><c> this</c><00:00:48.559><c> so</c><00:00:49.559><c> I</c>

00:00:49.580 --> 00:00:49.590 align:start position:0%
you're gonna help me solve this so I
 

00:00:49.590 --> 00:00:52.670 align:start position:0%
you're gonna help me solve this so I
want<00:00:49.950><c> to</c><00:00:49.980><c> first</c><00:00:50.190><c> introduce</c><00:00:50.370><c> what</c><00:00:50.910><c> is</c><00:00:51.680><c> SMT</c>

00:00:52.670 --> 00:00:52.680 align:start position:0%
want to first introduce what is SMT
 

00:00:52.680 --> 00:00:55.040 align:start position:0%
want to first introduce what is SMT
what's<00:00:52.980><c> why</c><00:00:53.250><c> SMT</c><00:00:53.699><c> checker</c><00:00:53.940><c> so</c><00:00:54.239><c> the</c><00:00:54.449><c> SMT</c><00:00:54.780><c> comes</c>

00:00:55.040 --> 00:00:55.050 align:start position:0%
what's why SMT checker so the SMT comes
 

00:00:55.050 --> 00:00:57.770 align:start position:0%
what's why SMT checker so the SMT comes
from<00:00:55.410><c> satisfiability</c><00:00:55.980><c> modular</c><00:00:56.520><c> theories</c><00:00:56.879><c> and</c>

00:00:57.770 --> 00:00:57.780 align:start position:0%
from satisfiability modular theories and
 

00:00:57.780 --> 00:01:01.099 align:start position:0%
from satisfiability modular theories and
Assam<00:00:58.410><c> to</c><00:00:58.559><c> solver</c><00:00:58.980><c> is</c><00:00:59.160><c> a</c><00:01:00.149><c> tool</c><00:01:00.480><c> that</c><00:01:00.690><c> will</c><00:01:00.840><c> take</c>

00:01:01.099 --> 00:01:01.109 align:start position:0%
Assam to solver is a tool that will take
 

00:01:01.109 --> 00:01:03.229 align:start position:0%
Assam to solver is a tool that will take
a<00:01:01.140><c> formula</c><00:01:01.649><c> like</c><00:01:01.800><c> this</c><00:01:01.829><c> a</c><00:01:02.160><c> first-order</c><00:01:02.609><c> logic</c>

00:01:03.229 --> 00:01:03.239 align:start position:0%
a formula like this a first-order logic
 

00:01:03.239 --> 00:01:06.980 align:start position:0%
a formula like this a first-order logic
formula<00:01:03.840><c> and</c><00:01:04.019><c> try</c><00:01:04.680><c> to</c><00:01:04.739><c> answer</c><00:01:05.510><c> this</c><00:01:06.510><c> questions</c>

00:01:06.980 --> 00:01:06.990 align:start position:0%
formula and try to answer this questions
 

00:01:06.990 --> 00:01:10.280 align:start position:0%
formula and try to answer this questions
can<00:01:07.979><c> we</c><00:01:08.100><c> find</c><00:01:08.400><c> integer</c><00:01:09.000><c> values</c><00:01:09.420><c> for</c><00:01:09.689><c> a</c><00:01:09.960><c> b</c><00:01:10.260><c> c</c>

00:01:10.280 --> 00:01:10.290 align:start position:0%
can we find integer values for a b c
 

00:01:10.290 --> 00:01:13.160 align:start position:0%
can we find integer values for a b c
such<00:01:10.799><c> that</c><00:01:11.360><c> this</c><00:01:12.360><c> formula</c><00:01:12.659><c> when</c><00:01:13.080><c> we</c>

00:01:13.160 --> 00:01:13.170 align:start position:0%
such that this formula when we
 

00:01:13.170 --> 00:01:15.440 align:start position:0%
such that this formula when we
substitute<00:01:13.409><c> the</c><00:01:14.189><c> values</c><00:01:14.610><c> for</c><00:01:15.360><c> these</c>

00:01:15.440 --> 00:01:15.450 align:start position:0%
substitute the values for these
 

00:01:15.450 --> 00:01:18.859 align:start position:0%
substitute the values for these
variables<00:01:15.979><c> evaluates</c><00:01:16.979><c> to</c><00:01:17.100><c> true</c><00:01:17.150><c> so</c><00:01:18.150><c> just</c><00:01:18.180><c> two</c>

00:01:18.859 --> 00:01:18.869 align:start position:0%
variables evaluates to true so just two
 

00:01:18.869 --> 00:01:22.550 align:start position:0%
variables evaluates to true so just two
I<00:01:19.140><c> can</c><00:01:19.950><c> go</c><00:01:20.100><c> together</c><00:01:20.340><c> over</c><00:01:21.119><c> the</c><00:01:21.299><c> formula</c><00:01:21.570><c> just</c>

00:01:22.550 --> 00:01:22.560 align:start position:0%
I can go together over the formula just
 

00:01:22.560 --> 00:01:24.620 align:start position:0%
I can go together over the formula just
to<00:01:22.979><c> give</c><00:01:23.460><c> a</c><00:01:23.490><c> little</c><00:01:23.640><c> bit</c><00:01:23.759><c> of</c><00:01:23.850><c> context</c><00:01:24.270><c> to</c>

00:01:24.620 --> 00:01:24.630 align:start position:0%
to give a little bit of context to
 

00:01:24.630 --> 00:01:27.140 align:start position:0%
to give a little bit of context to
whoever<00:01:24.930><c> is</c><00:01:25.020><c> not</c><00:01:25.110><c> familiar</c><00:01:25.439><c> with</c><00:01:26.310><c> electrical</c>

00:01:27.140 --> 00:01:27.150 align:start position:0%
whoever is not familiar with electrical
 

00:01:27.150 --> 00:01:30.830 align:start position:0%
whoever is not familiar with electrical
activity<00:01:27.509><c> this</c><00:01:27.600><c> kind</c><00:01:27.810><c> of</c><00:01:27.840><c> things</c><00:01:29.780><c> okay</c><00:01:30.780><c> so</c>

00:01:30.830 --> 00:01:30.840 align:start position:0%
activity this kind of things okay so
 

00:01:30.840 --> 00:01:32.600 align:start position:0%
activity this kind of things okay so
it's<00:01:31.439><c> a</c><00:01:31.560><c> boolean</c><00:01:31.829><c> formula</c><00:01:32.009><c> right</c><00:01:32.430><c> it's</c><00:01:32.549><c> a</c>

00:01:32.600 --> 00:01:32.610 align:start position:0%
it's a boolean formula right it's a
 

00:01:32.610 --> 00:01:34.730 align:start position:0%
it's a boolean formula right it's a
conjunction<00:01:33.090><c> of</c><00:01:33.329><c> constraints</c><00:01:33.840><c> so</c><00:01:34.560><c> this</c>

00:01:34.730 --> 00:01:34.740 align:start position:0%
conjunction of constraints so this
 

00:01:34.740 --> 00:01:37.700 align:start position:0%
conjunction of constraints so this
formula<00:01:35.210><c> kind</c><00:01:36.210><c> of</c><00:01:36.299><c> returns</c><00:01:36.630><c> true</c><00:01:37.170><c> or</c><00:01:37.439><c> false</c>

00:01:37.700 --> 00:01:37.710 align:start position:0%
formula kind of returns true or false
 

00:01:37.710 --> 00:01:39.740 align:start position:0%
formula kind of returns true or false
right<00:01:38.040><c> a</c><00:01:38.100><c> boolean</c><00:01:38.490><c> value</c><00:01:38.670><c> this</c><00:01:39.210><c> constraints</c>

00:01:39.740 --> 00:01:39.750 align:start position:0%
right a boolean value this constraints
 

00:01:39.750 --> 00:01:42.499 align:start position:0%
right a boolean value this constraints
are<00:01:39.840><c> satisfiable</c><00:01:40.350><c> together</c><00:01:40.770><c> or</c><00:01:41.009><c> not</c><00:01:41.250><c> so</c><00:01:42.240><c> first</c>

00:01:42.499 --> 00:01:42.509 align:start position:0%
are satisfiable together or not so first
 

00:01:42.509 --> 00:01:43.850 align:start position:0%
are satisfiable together or not so first
we<00:01:42.630><c> have</c><00:01:42.780><c> this</c><00:01:42.960><c> part</c><00:01:43.200><c> of</c><00:01:43.259><c> the</c><00:01:43.350><c> formula</c><00:01:43.590><c> which</c>

00:01:43.850 --> 00:01:43.860 align:start position:0%
we have this part of the formula which
 

00:01:43.860 --> 00:01:45.740 align:start position:0%
we have this part of the formula which
basically<00:01:44.310><c> says</c><00:01:44.670><c> it's</c><00:01:45.270><c> kind</c><00:01:45.570><c> of</c><00:01:45.600><c> like</c><00:01:45.720><c> a</c>

00:01:45.740 --> 00:01:45.750 align:start position:0%
basically says it's kind of like a
 

00:01:45.750 --> 00:01:47.690 align:start position:0%
basically says it's kind of like a
function<00:01:46.140><c> definition</c><00:01:46.259><c> right</c><00:01:46.799><c> so</c><00:01:47.070><c> there's</c><00:01:47.640><c> a</c>

00:01:47.690 --> 00:01:47.700 align:start position:0%
function definition right so there's a
 

00:01:47.700 --> 00:01:50.179 align:start position:0%
function definition right so there's a
lot<00:01:47.880><c> of</c><00:01:48.000><c> same</c><00:01:48.450><c> sex</c><00:01:48.630><c> abuse</c><00:01:48.990><c> here</c><00:01:49.170><c> but</c><00:01:49.470><c> we're</c>

00:01:50.179 --> 00:01:50.189 align:start position:0%
lot of same sex abuse here but we're
 

00:01:50.189 --> 00:01:52.819 align:start position:0%
lot of same sex abuse here but we're
gonna<00:01:50.280><c> ignore</c><00:01:50.549><c> that</c><00:01:51.030><c> for</c><00:01:51.270><c> now</c><00:01:51.470><c> so</c><00:01:52.470><c> this</c><00:01:52.649><c> says</c>

00:01:52.819 --> 00:01:52.829 align:start position:0%
gonna ignore that for now so this says
 

00:01:52.829 --> 00:01:55.789 align:start position:0%
gonna ignore that for now so this says
that<00:01:52.860><c> for</c><00:01:53.399><c> whatever</c><00:01:53.579><c> acts</c><00:01:53.939><c> f</c><00:01:54.390><c> of</c><00:01:54.659><c> X</c><00:01:54.899><c> equals</c><00:01:55.380><c> x</c>

00:01:55.789 --> 00:01:55.799 align:start position:0%
that for whatever acts f of X equals x
 

00:01:55.799 --> 00:02:00.340 align:start position:0%
that for whatever acts f of X equals x
times<00:01:56.189><c> 42</c><00:01:56.579><c> okay</c><00:01:58.009><c> the</c><00:01:59.009><c> next</c><00:01:59.399><c> we</c><00:01:59.520><c> have</c><00:01:59.700><c> two</c>

00:02:00.340 --> 00:02:00.350 align:start position:0%
times 42 okay the next we have two
 

00:02:00.350 --> 00:02:03.620 align:start position:0%
times 42 okay the next we have two
constraints<00:02:01.350><c> over</c><00:02:01.790><c> the</c><00:02:02.790><c> input</c><00:02:03.119><c> variables</c><00:02:03.509><c> we</c>

00:02:03.620 --> 00:02:03.630 align:start position:0%
constraints over the input variables we
 

00:02:03.630 --> 00:02:05.840 align:start position:0%
constraints over the input variables we
chose<00:02:03.899><c> so</c><00:02:04.229><c> we're</c><00:02:04.500><c> saying</c><00:02:04.740><c> that</c><00:02:04.890><c> a</c><00:02:05.189><c> has</c><00:02:05.670><c> to</c><00:02:05.820><c> be</c>

00:02:05.840 --> 00:02:05.850 align:start position:0%
chose so we're saying that a has to be
 

00:02:05.850 --> 00:02:08.359 align:start position:0%
chose so we're saying that a has to be
greater<00:02:06.210><c> or</c><00:02:06.479><c> equal</c><00:02:06.570><c> B</c><00:02:07.049><c> and</c><00:02:07.320><c> B</c><00:02:07.920><c> has</c><00:02:08.220><c> to</c><00:02:08.340><c> be</c>

00:02:08.359 --> 00:02:08.369 align:start position:0%
greater or equal B and B has to be
 

00:02:08.369 --> 00:02:13.520 align:start position:0%
greater or equal B and B has to be
greater<00:02:08.700><c> or</c><00:02:08.789><c> equal</c><00:02:08.940><c> C</c><00:02:09.619><c> and</c><00:02:11.300><c> then</c><00:02:12.300><c> last</c>

00:02:13.520 --> 00:02:13.530 align:start position:0%
greater or equal C and then last
 

00:02:13.530 --> 00:02:15.980 align:start position:0%
greater or equal C and then last
we<00:02:13.650><c> applied</c><00:02:14.370><c> function</c><00:02:15.030><c> f</c><00:02:15.240><c> we</c><00:02:15.510><c> defined</c><00:02:15.840><c> before</c>

00:02:15.980 --> 00:02:15.990 align:start position:0%
we applied function f we defined before
 

00:02:15.990 --> 00:02:19.130 align:start position:0%
we applied function f we defined before
over<00:02:16.440><c> a</c><00:02:16.470><c> and</c><00:02:16.860><c> C</c><00:02:17.400><c> saying</c><00:02:17.790><c> FFA</c><00:02:18.480><c> has</c><00:02:18.510><c> a</c><00:02:18.720><c> be</c><00:02:18.900><c> greater</c>

00:02:19.130 --> 00:02:19.140 align:start position:0%
over a and C saying FFA has a be greater
 

00:02:19.140 --> 00:02:22.430 align:start position:0%
over a and C saying FFA has a be greater
or<00:02:19.380><c> equal</c><00:02:19.410><c> F</c><00:02:19.920><c> of</c><00:02:19.950><c> C</c><00:02:20.850><c> so</c><00:02:21.660><c> now</c><00:02:22.080><c> the</c><00:02:22.140><c> question</c>

00:02:22.430 --> 00:02:22.440 align:start position:0%
or equal F of C so now the question
 

00:02:22.440 --> 00:02:25.730 align:start position:0%
or equal F of C so now the question
again<00:02:23.400><c> can</c><00:02:23.610><c> we</c><00:02:23.640><c> find</c><00:02:24.000><c> integer</c><00:02:24.390><c> values</c><00:02:24.750><c> that</c>

00:02:25.730 --> 00:02:25.740 align:start position:0%
again can we find integer values that
 

00:02:25.740 --> 00:02:29.740 align:start position:0%
again can we find integer values that
evaluate<00:02:26.220><c> the</c><00:02:26.310><c> formula</c><00:02:26.640><c> to</c><00:02:26.730><c> two</c><00:02:27.030><c> true</c><00:02:28.430><c> yes</c>

00:02:29.740 --> 00:02:29.750 align:start position:0%
evaluate the formula to two true yes
 

00:02:29.750 --> 00:02:45.140 align:start position:0%
evaluate the formula to two true yes
okay<00:02:30.750><c> can</c><00:02:31.260><c> you</c><00:02:31.290><c> give</c><00:02:32.069><c> me</c><00:02:32.250><c> values</c><00:02:32.610><c> for</c><00:02:32.760><c> ABC</c><00:02:44.120><c> yeah</c>

00:02:45.140 --> 00:02:45.150 align:start position:0%
okay can you give me values for ABC yeah
 

00:02:45.150 --> 00:02:47.030 align:start position:0%
okay can you give me values for ABC yeah
so<00:02:45.600><c> now</c><00:02:45.780><c> you</c><00:02:46.170><c> told</c><00:02:46.350><c> me</c><00:02:46.440><c> that</c><00:02:46.500><c> it's</c><00:02:46.650><c> possible</c>

00:02:47.030 --> 00:02:47.040 align:start position:0%
so now you told me that it's possible
 

00:02:47.040 --> 00:02:49.460 align:start position:0%
so now you told me that it's possible
right<00:02:47.250><c> it's</c><00:02:47.519><c> possible</c><00:02:47.970><c> to</c><00:02:48.209><c> give</c><00:02:48.360><c> values</c><00:02:48.780><c> for</c><00:02:49.440><c> a</c>

00:02:49.460 --> 00:02:49.470 align:start position:0%
right it's possible to give values for a
 

00:02:49.470 --> 00:02:53.530 align:start position:0%
right it's possible to give values for a
B<00:02:49.709><c> C</c><00:02:49.950><c> such</c><00:02:50.280><c> that</c><00:02:50.310><c> the</c><00:02:50.489><c> formulas</c><00:02:50.820><c> true</c><00:02:51.980><c> 0</c><00:02:52.980><c> 0</c><00:02:53.190><c> 0</c>

00:02:53.530 --> 00:02:53.540 align:start position:0%
B C such that the formulas true 0 0 0
 

00:02:53.540 --> 00:02:58.309 align:start position:0%
B C such that the formulas true 0 0 0
does<00:02:54.540><c> that</c><00:02:54.690><c> work</c><00:02:55.370><c> it</c><00:02:56.370><c> works</c><00:02:56.580><c> right</c><00:02:57.319><c> zero</c>

00:02:58.309 --> 00:02:58.319 align:start position:0%
does that work it works right zero
 

00:02:58.319 --> 00:03:00.680 align:start position:0%
does that work it works right zero
greater<00:02:58.590><c> equals</c><00:02:58.950><c> 0</c><00:02:59.220><c> true</c><00:02:59.580><c> same</c><00:02:59.910><c> thing</c><00:03:00.120><c> for</c><00:03:00.150><c> BC</c>

00:03:00.680 --> 00:03:00.690 align:start position:0%
greater equals 0 true same thing for BC
 

00:03:00.690 --> 00:03:04.910 align:start position:0%
greater equals 0 true same thing for BC
f<00:03:00.959><c> of</c><00:03:01.590><c> a</c><00:03:01.739><c> 0</c><00:03:02.069><c> F</c><00:03:02.250><c> F</c><00:03:02.370><c> is</c><00:03:02.519><c> f</c><00:03:02.850><c> of</c><00:03:03.090><c> C</c><00:03:03.300><c> 0</c><00:03:03.440><c> it's</c><00:03:04.440><c> true</c><00:03:04.680><c> right</c>

00:03:04.910 --> 00:03:04.920 align:start position:0%
f of a 0 F F is f of C 0 it's true right
 

00:03:04.920 --> 00:03:08.300 align:start position:0%
f of a 0 F F is f of C 0 it's true right
but<00:03:05.790><c> unfortunately</c><00:03:06.390><c> that's</c><00:03:07.230><c> not</c><00:03:07.410><c> the</c><00:03:07.920><c> one</c>

00:03:08.300 --> 00:03:08.310 align:start position:0%
but unfortunately that's not the one
 

00:03:08.310 --> 00:03:11.210 align:start position:0%
but unfortunately that's not the one
that<00:03:08.430><c> I</c><00:03:08.489><c> had</c><00:03:08.640><c> here</c><00:03:08.850><c> so</c><00:03:09.680><c> anyway</c><00:03:10.680><c> so</c><00:03:10.739><c> this</c><00:03:11.040><c> one</c>

00:03:11.210 --> 00:03:11.220 align:start position:0%
that I had here so anyway so this one
 

00:03:11.220 --> 00:03:15.259 align:start position:0%
that I had here so anyway so this one
works<00:03:11.459><c> right</c><00:03:12.440><c> also</c><00:03:13.440><c> this</c><00:03:13.830><c> one</c><00:03:14.040><c> works</c><00:03:14.250><c> and</c><00:03:14.580><c> this</c>

00:03:15.259 --> 00:03:15.269 align:start position:0%
works right also this one works and this
 

00:03:15.269 --> 00:03:19.069 align:start position:0%
works right also this one works and this
one<00:03:15.480><c> works</c><00:03:16.130><c> how</c><00:03:17.130><c> many</c><00:03:17.160><c> do</c><00:03:17.910><c> you</c><00:03:17.940><c> think</c><00:03:18.269><c> how</c><00:03:18.900><c> many</c>

00:03:19.069 --> 00:03:19.079 align:start position:0%
one works how many do you think how many
 

00:03:19.079 --> 00:03:21.319 align:start position:0%
one works how many do you think how many
solutions<00:03:19.410><c> how</c><00:03:20.190><c> many</c><00:03:20.340><c> different</c><00:03:20.549><c> sets</c><00:03:21.060><c> of</c>

00:03:21.319 --> 00:03:21.329 align:start position:0%
solutions how many different sets of
 

00:03:21.329 --> 00:03:24.500 align:start position:0%
solutions how many different sets of
values<00:03:22.320><c> for</c><00:03:22.650><c> ABC</c><00:03:23.220><c> do</c><00:03:23.790><c> you</c><00:03:23.910><c> think</c><00:03:24.120><c> we</c><00:03:24.180><c> can</c><00:03:24.329><c> get</c>

00:03:24.500 --> 00:03:24.510 align:start position:0%
values for ABC do you think we can get
 

00:03:24.510 --> 00:03:28.910 align:start position:0%
values for ABC do you think we can get
for<00:03:24.540><c> this</c><00:03:24.840><c> formula</c><00:03:25.880><c> infinite</c><00:03:26.880><c> right</c><00:03:27.560><c> now</c><00:03:28.560><c> a</c>

00:03:28.910 --> 00:03:28.920 align:start position:0%
for this formula infinite right now a
 

00:03:28.920 --> 00:03:31.039 align:start position:0%
for this formula infinite right now a
slightly<00:03:29.220><c> different</c><00:03:29.430><c> question</c><00:03:30.000><c> what</c><00:03:30.630><c> happens</c>

00:03:31.039 --> 00:03:31.049 align:start position:0%
slightly different question what happens
 

00:03:31.049 --> 00:03:33.410 align:start position:0%
slightly different question what happens
if<00:03:31.350><c> we</c><00:03:31.530><c> change</c><00:03:31.560><c> this</c><00:03:32.250><c> we</c><00:03:32.790><c> could</c><00:03:33.000><c> change</c><00:03:33.180><c> the</c>

00:03:33.410 --> 00:03:33.420 align:start position:0%
if we change this we could change the
 

00:03:33.420 --> 00:03:37.569 align:start position:0%
if we change this we could change the
comparison<00:03:33.989><c> of</c><00:03:34.130><c> FA</c><00:03:35.130><c> and</c><00:03:35.310><c> F</c><00:03:35.400><c> of</c><00:03:35.519><c> C</c><00:03:35.790><c> to</c><00:03:36.570><c> this</c><00:03:36.780><c> and</c>

00:03:37.569 --> 00:03:37.579 align:start position:0%
comparison of FA and F of C to this and
 

00:03:37.579 --> 00:03:41.840 align:start position:0%
comparison of FA and F of C to this and
repeat<00:03:38.579><c> the</c><00:03:38.730><c> question</c><00:03:39.620><c> is</c><00:03:40.620><c> there</c><00:03:41.070><c> a</c><00:03:41.280><c> set</c><00:03:41.549><c> of</c>

00:03:41.840 --> 00:03:41.850 align:start position:0%
repeat the question is there a set of
 

00:03:41.850 --> 00:03:44.420 align:start position:0%
repeat the question is there a set of
values<00:03:42.120><c> for</c><00:03:42.329><c> ABC</c><00:03:43.079><c> that</c><00:03:43.739><c> make</c><00:03:44.010><c> the</c><00:03:44.130><c> formula</c>

00:03:44.420 --> 00:03:44.430 align:start position:0%
values for ABC that make the formula
 

00:03:44.430 --> 00:03:51.110 align:start position:0%
values for ABC that make the formula
true<00:03:48.829><c> so</c><00:03:49.829><c> there's</c><00:03:50.040><c> a</c><00:03:50.100><c> consensus</c><00:03:50.640><c> saying</c><00:03:50.880><c> no</c>

00:03:51.110 --> 00:03:51.120 align:start position:0%
true so there's a consensus saying no
 

00:03:51.120 --> 00:03:54.530 align:start position:0%
true so there's a consensus saying no
and<00:03:51.390><c> that's</c><00:03:52.260><c> correct</c><00:03:52.530><c> and</c><00:03:53.269><c> when</c><00:03:54.269><c> that's</c><00:03:54.450><c> the</c>

00:03:54.530 --> 00:03:54.540 align:start position:0%
and that's correct and when that's the
 

00:03:54.540 --> 00:03:55.880 align:start position:0%
and that's correct and when that's the
case<00:03:54.660><c> we</c><00:03:55.049><c> say</c><00:03:55.200><c> that</c><00:03:55.230><c> the</c><00:03:55.350><c> formula</c><00:03:55.769><c> is</c>

00:03:55.880 --> 00:03:55.890 align:start position:0%
case we say that the formula is
 

00:03:55.890 --> 00:03:56.930 align:start position:0%
case we say that the formula is
unsatisfiable

00:03:56.930 --> 00:03:56.940 align:start position:0%
unsatisfiable
 

00:03:56.940 --> 00:03:59.569 align:start position:0%
unsatisfiable
because<00:03:57.480><c> there</c><00:03:57.660><c> is</c><00:03:57.720><c> no</c><00:03:57.900><c> set</c><00:03:58.320><c> of</c><00:03:58.620><c> values</c><00:03:59.549><c> that</c>

00:03:59.569 --> 00:03:59.579 align:start position:0%
because there is no set of values that
 

00:03:59.579 --> 00:04:02.420 align:start position:0%
because there is no set of values that
satisfy<00:04:00.140><c> the</c><00:04:01.140><c> formula</c><00:04:01.590><c> so</c><00:04:02.160><c> in</c><00:04:02.220><c> the</c><00:04:02.280><c> previous</c>

00:04:02.420 --> 00:04:02.430 align:start position:0%
satisfy the formula so in the previous
 

00:04:02.430 --> 00:04:04.270 align:start position:0%
satisfy the formula so in the previous
case<00:04:02.700><c> were</c><00:04:02.880><c> satisfiable</c><00:04:03.510><c> now</c><00:04:03.690><c> we</c><00:04:03.750><c> have</c>

00:04:04.270 --> 00:04:04.280 align:start position:0%
case were satisfiable now we have
 

00:04:04.280 --> 00:04:08.270 align:start position:0%
case were satisfiable now we have
unsatisfiable<00:04:05.280><c> and</c><00:04:06.530><c> why</c><00:04:07.530><c> did</c><00:04:07.769><c> I</c><00:04:07.859><c> choose</c><00:04:08.070><c> this</c>

00:04:08.270 --> 00:04:08.280 align:start position:0%
unsatisfiable and why did I choose this
 

00:04:08.280 --> 00:04:10.160 align:start position:0%
unsatisfiable and why did I choose this
formula<00:04:08.700><c> could</c><00:04:08.910><c> have</c><00:04:09.060><c> chosen</c><00:04:09.329><c> many</c><00:04:09.720><c> other</c>

00:04:10.160 --> 00:04:10.170 align:start position:0%
formula could have chosen many other
 

00:04:10.170 --> 00:04:13.160 align:start position:0%
formula could have chosen many other
formulas<00:04:10.620><c> so</c><00:04:10.739><c> the</c><00:04:10.859><c> reason</c><00:04:11.510><c> is</c><00:04:12.510><c> we</c><00:04:12.720><c> can</c><00:04:12.900><c> read</c>

00:04:13.160 --> 00:04:13.170 align:start position:0%
formulas so the reason is we can read
 

00:04:13.170 --> 00:04:15.470 align:start position:0%
formulas so the reason is we can read
this<00:04:13.380><c> formula</c><00:04:13.859><c> in</c><00:04:14.010><c> many</c><00:04:14.640><c> ways</c><00:04:14.820><c> right</c><00:04:15.150><c> it</c><00:04:15.329><c> can</c>

00:04:15.470 --> 00:04:15.480 align:start position:0%
this formula in many ways right it can
 

00:04:15.480 --> 00:04:18.319 align:start position:0%
this formula in many ways right it can
be<00:04:15.660><c> just</c><00:04:15.959><c> a</c><00:04:16.140><c> logical</c><00:04:16.890><c> formula</c><00:04:17.130><c> but</c><00:04:17.430><c> this</c>

00:04:18.319 --> 00:04:18.329 align:start position:0%
be just a logical formula but this
 

00:04:18.329 --> 00:04:20.960 align:start position:0%
be just a logical formula but this
formula<00:04:18.750><c> happens</c><00:04:19.109><c> to</c><00:04:19.769><c> we</c><00:04:20.459><c> can't</c><00:04:20.640><c> we</c><00:04:20.729><c> can</c><00:04:20.850><c> also</c>

00:04:20.960 --> 00:04:20.970 align:start position:0%
formula happens to we can't we can also
 

00:04:20.970 --> 00:04:23.060 align:start position:0%
formula happens to we can't we can also
read<00:04:21.180><c> this</c><00:04:21.299><c> formula</c><00:04:21.659><c> as</c><00:04:21.810><c> this</c><00:04:22.530><c> part</c><00:04:22.860><c> here</c>

00:04:23.060 --> 00:04:23.070 align:start position:0%
read this formula as this part here
 

00:04:23.070 --> 00:04:25.640 align:start position:0%
read this formula as this part here
highlighted<00:04:23.520><c> right</c><00:04:23.669><c> now</c><00:04:23.880><c> being</c><00:04:24.630><c> a</c><00:04:25.020><c> property</c>

00:04:25.640 --> 00:04:25.650 align:start position:0%
highlighted right now being a property
 

00:04:25.650 --> 00:04:26.650 align:start position:0%
highlighted right now being a property
we<00:04:25.740><c> want</c><00:04:25.830><c> to</c><00:04:25.979><c> prove</c>

00:04:26.650 --> 00:04:26.660 align:start position:0%
we want to prove
 

00:04:26.660 --> 00:04:28.120 align:start position:0%
we want to prove
to<00:04:26.810><c> function</c><00:04:27.170><c> right</c><00:04:27.470><c> application</c><00:04:27.950><c> of</c><00:04:28.040><c> the</c>

00:04:28.120 --> 00:04:28.130 align:start position:0%
to function right application of the
 

00:04:28.130 --> 00:04:30.940 align:start position:0%
to function right application of the
function<00:04:28.810><c> that</c><00:04:29.810><c> part</c><00:04:30.110><c> being</c><00:04:30.440><c> local</c>

00:04:30.940 --> 00:04:30.950 align:start position:0%
function that part being local
 

00:04:30.950 --> 00:04:33.730 align:start position:0%
function that part being local
constraints<00:04:31.310><c> say</c><00:04:32.240><c> on</c><00:04:32.480><c> input</c><00:04:33.140><c> variables</c><00:04:33.530><c> and</c>

00:04:33.730 --> 00:04:33.740 align:start position:0%
constraints say on input variables and
 

00:04:33.740 --> 00:04:36.520 align:start position:0%
constraints say on input variables and
here<00:04:34.460><c> basically</c><00:04:34.700><c> a</c><00:04:34.940><c> function</c><00:04:35.300><c> definition</c><00:04:35.530><c> so</c>

00:04:36.520 --> 00:04:36.530 align:start position:0%
here basically a function definition so
 

00:04:36.530 --> 00:04:38.760 align:start position:0%
here basically a function definition so
this<00:04:36.800><c> is</c><00:04:36.950><c> basically</c><00:04:37.370><c> how</c><00:04:37.520><c> we</c><00:04:37.790><c> just</c><00:04:38.240><c> prove</c>

00:04:38.760 --> 00:04:38.770 align:start position:0%
this is basically how we just prove
 

00:04:38.770 --> 00:04:43.240 align:start position:0%
this is basically how we just prove
correctness<00:04:39.770><c> of</c><00:04:39.920><c> this</c><00:04:40.250><c> smart</c><00:04:40.520><c> contract</c><00:04:42.250><c> here</c>

00:04:43.240 --> 00:04:43.250 align:start position:0%
correctness of this smart contract here
 

00:04:43.250 --> 00:04:46.740 align:start position:0%
correctness of this smart contract here
we<00:04:43.370><c> have</c><00:04:43.580><c> a</c><00:04:43.910><c> function</c><00:04:44.270><c> definition</c><00:04:44.800><c> which</c>

00:04:46.740 --> 00:04:46.750 align:start position:0%
we have a function definition which
 

00:04:46.750 --> 00:04:49.920 align:start position:0%
we have a function definition which
would<00:04:47.750><c> be</c><00:04:47.900><c> encoded</c><00:04:48.380><c> in</c><00:04:48.650><c> the</c><00:04:48.770><c> SMT</c><00:04:49.130><c> language</c><00:04:49.520><c> as</c>

00:04:49.920 --> 00:04:49.930 align:start position:0%
would be encoded in the SMT language as
 

00:04:49.930 --> 00:04:54.520 align:start position:0%
would be encoded in the SMT language as
the<00:04:50.930><c> first</c><00:04:51.250><c> term</c><00:04:52.250><c> of</c><00:04:52.400><c> the</c><00:04:52.970><c> conjunction</c><00:04:53.660><c> here</c>

00:04:54.520 --> 00:04:54.530 align:start position:0%
the first term of the conjunction here
 

00:04:54.530 --> 00:04:57.220 align:start position:0%
the first term of the conjunction here
we<00:04:54.650><c> have</c><00:04:54.860><c> two</c><00:04:55.280><c> local</c><00:04:55.730><c> constraints</c><00:04:56.570><c> right</c><00:04:57.050><c> that</c>

00:04:57.220 --> 00:04:57.230 align:start position:0%
we have two local constraints right that
 

00:04:57.230 --> 00:05:01.180 align:start position:0%
we have two local constraints right that
evaluate<00:04:57.710><c> that</c><00:04:58.340><c> or</c><00:04:58.640><c> encoder</c><00:04:58.970><c> Tory</c><00:04:59.350><c> as</c><00:05:00.350><c> those</c>

00:05:01.180 --> 00:05:01.190 align:start position:0%
evaluate that or encoder Tory as those
 

00:05:01.190 --> 00:05:03.880 align:start position:0%
evaluate that or encoder Tory as those
those<00:05:01.550><c> circumstance</c><00:05:02.120><c> and</c><00:05:02.360><c> here</c><00:05:02.660><c> we</c><00:05:02.780><c> have</c><00:05:02.960><c> the</c>

00:05:03.880 --> 00:05:03.890 align:start position:0%
those circumstance and here we have the
 

00:05:03.890 --> 00:05:07.480 align:start position:0%
those circumstance and here we have the
application<00:05:04.430><c> of</c><00:05:04.670><c> the</c><00:05:05.150><c> function</c><00:05:05.620><c> but</c><00:05:06.620><c> you</c><00:05:07.310><c> will</c>

00:05:07.480 --> 00:05:07.490 align:start position:0%
application of the function but you will
 

00:05:07.490 --> 00:05:09.550 align:start position:0%
application of the function but you will
probably<00:05:07.730><c> notice</c><00:05:08.060><c> notice</c><00:05:08.600><c> right</c><00:05:08.750><c> now</c><00:05:08.810><c> that</c><00:05:09.290><c> in</c>

00:05:09.550 --> 00:05:09.560 align:start position:0%
probably notice notice right now that in
 

00:05:09.560 --> 00:05:12.520 align:start position:0%
probably notice notice right now that in
the<00:05:09.890><c> code</c><00:05:10.070><c> I</c><00:05:10.130><c> have</c><00:05:10.340><c> assert</c><00:05:11.000><c> F</c><00:05:11.240><c> FA</c><00:05:11.540><c> greater</c><00:05:12.290><c> or</c>

00:05:12.520 --> 00:05:12.530 align:start position:0%
the code I have assert F FA greater or
 

00:05:12.530 --> 00:05:14.110 align:start position:0%
the code I have assert F FA greater or
equal<00:05:12.560><c> F</c><00:05:12.860><c> of</c><00:05:13.010><c> C</c><00:05:13.190><c> because</c><00:05:13.340><c> it's</c><00:05:13.640><c> a</c><00:05:13.700><c> property</c><00:05:14.090><c> I</c>

00:05:14.110 --> 00:05:14.120 align:start position:0%
equal F of C because it's a property I
 

00:05:14.120 --> 00:05:17.200 align:start position:0%
equal F of C because it's a property I
want<00:05:14.300><c> to</c><00:05:14.390><c> prove</c><00:05:14.540><c> right</c><00:05:15.340><c> and</c><00:05:16.340><c> here</c><00:05:16.880><c> in</c><00:05:17.090><c> the</c>

00:05:17.200 --> 00:05:17.210 align:start position:0%
want to prove right and here in the
 

00:05:17.210 --> 00:05:19.210 align:start position:0%
want to prove right and here in the
logical<00:05:17.600><c> formula</c><00:05:18.080><c> that</c><00:05:18.230><c> we</c><00:05:18.380><c> give</c><00:05:18.590><c> to</c><00:05:18.620><c> the</c><00:05:18.800><c> SMT</c>

00:05:19.210 --> 00:05:19.220 align:start position:0%
logical formula that we give to the SMT
 

00:05:19.220 --> 00:05:21.280 align:start position:0%
logical formula that we give to the SMT
solver<00:05:19.580><c> it's</c><00:05:20.060><c> actually</c><00:05:20.510><c> last</c><00:05:20.720><c> then</c><00:05:20.990><c> so</c><00:05:21.170><c> it's</c>

00:05:21.280 --> 00:05:21.290 align:start position:0%
solver it's actually last then so it's
 

00:05:21.290 --> 00:05:24.700 align:start position:0%
solver it's actually last then so it's
the<00:05:21.410><c> opposite</c><00:05:21.890><c> operation</c><00:05:22.460><c> right</c><00:05:23.360><c> the</c><00:05:24.290><c> reason</c>

00:05:24.700 --> 00:05:24.710 align:start position:0%
the opposite operation right the reason
 

00:05:24.710 --> 00:05:27.550 align:start position:0%
the opposite operation right the reason
why<00:05:25.060><c> we</c><00:05:26.060><c> actually</c><00:05:26.240><c> ask</c><00:05:26.570><c> for</c><00:05:26.840><c> the</c><00:05:26.960><c> opposite</c><00:05:27.380><c> is</c>

00:05:27.550 --> 00:05:27.560 align:start position:0%
why we actually ask for the opposite is
 

00:05:27.560 --> 00:05:31.330 align:start position:0%
why we actually ask for the opposite is
if<00:05:28.150><c> this</c><00:05:29.150><c> is</c><00:05:29.420><c> unsatisfiable</c><00:05:30.260><c> if</c><00:05:30.710><c> we</c><00:05:31.040><c> try</c><00:05:31.280><c> to</c>

00:05:31.330 --> 00:05:31.340 align:start position:0%
if this is unsatisfiable if we try to
 

00:05:31.340 --> 00:05:33.820 align:start position:0%
if this is unsatisfiable if we try to
prove<00:05:31.730><c> the</c><00:05:32.360><c> negation</c><00:05:32.930><c> of</c><00:05:33.080><c> the</c><00:05:33.200><c> property</c><00:05:33.650><c> and</c>

00:05:33.820 --> 00:05:33.830 align:start position:0%
prove the negation of the property and
 

00:05:33.830 --> 00:05:36.880 align:start position:0%
prove the negation of the property and
the<00:05:34.790><c> solver</c><00:05:35.090><c> says</c><00:05:35.300><c> is</c><00:05:35.450><c> unsatisfiable</c><00:05:36.140><c> this</c>

00:05:36.880 --> 00:05:36.890 align:start position:0%
the solver says is unsatisfiable this
 

00:05:36.890 --> 00:05:39.730 align:start position:0%
the solver says is unsatisfiable this
means<00:05:37.250><c> that</c><00:05:37.580><c> there's</c><00:05:38.120><c> no</c><00:05:38.360><c> behavior</c><00:05:39.050><c> there's</c>

00:05:39.730 --> 00:05:39.740 align:start position:0%
means that there's no behavior there's
 

00:05:39.740 --> 00:05:42.250 align:start position:0%
means that there's no behavior there's
no<00:05:39.950><c> values</c><00:05:40.430><c> for</c><00:05:40.640><c> local</c><00:05:40.910><c> rivals</c><00:05:41.300><c> with</c><00:05:41.960><c> that</c>

00:05:42.250 --> 00:05:42.260 align:start position:0%
no values for local rivals with that
 

00:05:42.260 --> 00:05:44.110 align:start position:0%
no values for local rivals with that
encoding<00:05:42.770><c> that</c><00:05:43.250><c> actually</c><00:05:43.669><c> break</c><00:05:43.910><c> the</c>

00:05:44.110 --> 00:05:44.120 align:start position:0%
encoding that actually break the
 

00:05:44.120 --> 00:05:48.010 align:start position:0%
encoding that actually break the
assertion<00:05:44.860><c> right</c><00:05:46.180><c> so</c><00:05:47.180><c> in</c><00:05:47.330><c> this</c><00:05:47.480><c> case</c><00:05:47.540><c> the</c>

00:05:48.010 --> 00:05:48.020 align:start position:0%
assertion right so in this case the
 

00:05:48.020 --> 00:05:50.170 align:start position:0%
assertion right so in this case the
solver<00:05:48.320><c> will</c><00:05:48.440><c> tell</c><00:05:48.620><c> me</c><00:05:48.770><c> it's</c><00:05:49.340><c> unsatisfiable</c>

00:05:50.170 --> 00:05:50.180 align:start position:0%
solver will tell me it's unsatisfiable
 

00:05:50.180 --> 00:05:52.420 align:start position:0%
solver will tell me it's unsatisfiable
which<00:05:50.660><c> means</c><00:05:50.960><c> that</c><00:05:51.110><c> certian</c><00:05:51.380><c> is</c><00:05:51.470><c> safe</c><00:05:51.680><c> again</c>

00:05:52.420 --> 00:05:52.430 align:start position:0%
which means that certian is safe again
 

00:05:52.430 --> 00:05:53.650 align:start position:0%
which means that certian is safe again
because<00:05:52.700><c> there's</c><00:05:52.850><c> no</c><00:05:53.030><c> way</c><00:05:53.210><c> you</c><00:05:53.270><c> can</c><00:05:53.510><c> go</c>

00:05:53.650 --> 00:05:53.660 align:start position:0%
because there's no way you can go
 

00:05:53.660 --> 00:05:55.360 align:start position:0%
because there's no way you can go
through<00:05:53.960><c> the</c><00:05:54.080><c> program</c><00:05:54.500><c> and</c><00:05:54.710><c> break</c><00:05:55.190><c> the</c>

00:05:55.360 --> 00:05:55.370 align:start position:0%
through the program and break the
 

00:05:55.370 --> 00:05:57.790 align:start position:0%
through the program and break the
assertion<00:05:55.760><c> so</c><00:05:55.910><c> for</c><00:05:56.120><c> all</c><00:05:56.300><c> cases</c><00:05:56.690><c> you</c><00:05:57.080><c> can</c><00:05:57.590><c> ever</c>

00:05:57.790 --> 00:05:57.800 align:start position:0%
assertion so for all cases you can ever
 

00:05:57.800 --> 00:06:01.300 align:start position:0%
assertion so for all cases you can ever
come<00:05:58.100><c> up</c><00:05:58.250><c> with</c><00:05:58.280><c> the</c><00:05:59.000><c> assertion</c><00:05:59.210><c> is</c><00:05:59.570><c> true</c><00:06:00.310><c> but</c>

00:06:01.300 --> 00:06:01.310 align:start position:0%
come up with the assertion is true but
 

00:06:01.310 --> 00:06:03.460 align:start position:0%
come up with the assertion is true but
let's<00:06:01.880><c> change</c><00:06:02.090><c> a</c><00:06:02.240><c> little</c><00:06:02.330><c> bit</c><00:06:02.630><c> so</c><00:06:02.960><c> is</c><00:06:03.290><c> that</c>

00:06:03.460 --> 00:06:03.470 align:start position:0%
let's change a little bit so is that
 

00:06:03.470 --> 00:06:08.140 align:start position:0%
let's change a little bit so is that
assertion<00:06:03.770><c> true</c><00:06:06.400><c> is</c><00:06:07.400><c> that</c><00:06:07.460><c> assert</c><00:06:07.850><c> correct</c>

00:06:08.140 --> 00:06:08.150 align:start position:0%
assertion true is that assert correct
 

00:06:08.150 --> 00:06:12.159 align:start position:0%
assertion true is that assert correct
for<00:06:08.360><c> every</c><00:06:08.600><c> input</c><00:06:09.370><c> it's</c><00:06:10.370><c> not</c><00:06:10.580><c> right</c><00:06:10.970><c> so</c><00:06:11.630><c> for</c>

00:06:12.159 --> 00:06:12.169 align:start position:0%
for every input it's not right so for
 

00:06:12.169 --> 00:06:15.370 align:start position:0%
for every input it's not right so for
our<00:06:12.410><c> query</c><00:06:12.740><c> to</c><00:06:12.980><c> the</c><00:06:13.010><c> SMT</c><00:06:13.430><c> solver</c><00:06:13.900><c> we</c><00:06:14.900><c> negate</c>

00:06:15.370 --> 00:06:15.380 align:start position:0%
our query to the SMT solver we negate
 

00:06:15.380 --> 00:06:17.170 align:start position:0%
our query to the SMT solver we negate
the<00:06:15.560><c> property</c><00:06:15.950><c> right</c><00:06:16.250><c> so</c><00:06:16.520><c> I</c><00:06:16.550><c> want</c><00:06:16.820><c> to</c><00:06:16.880><c> find</c>

00:06:17.170 --> 00:06:17.180 align:start position:0%
the property right so I want to find
 

00:06:17.180 --> 00:06:19.120 align:start position:0%
the property right so I want to find
values<00:06:17.600><c> I</c><00:06:17.720><c> want</c><00:06:17.900><c> the</c><00:06:17.990><c> SMT</c><00:06:18.350><c> solver</c><00:06:18.650><c> to</c><00:06:18.800><c> give</c><00:06:18.950><c> me</c>

00:06:19.120 --> 00:06:19.130 align:start position:0%
values I want the SMT solver to give me
 

00:06:19.130 --> 00:06:23.290 align:start position:0%
values I want the SMT solver to give me
values<00:06:19.490><c> for</c><00:06:20.440><c> my</c><00:06:21.440><c> variables</c><00:06:21.950><c> that</c><00:06:22.580><c> actually</c>

00:06:23.290 --> 00:06:23.300 align:start position:0%
values for my variables that actually
 

00:06:23.300 --> 00:06:25.540 align:start position:0%
values for my variables that actually
break<00:06:23.540><c> the</c><00:06:23.720><c> certian</c><00:06:24.110><c> so</c><00:06:24.590><c> one</c><00:06:24.830><c> FFA</c><00:06:25.310><c> to</c><00:06:25.340><c> be</c>

00:06:25.540 --> 00:06:25.550 align:start position:0%
break the certian so one FFA to be
 

00:06:25.550 --> 00:06:27.520 align:start position:0%
break the certian so one FFA to be
different<00:06:25.880><c> from</c><00:06:26.030><c> F</c><00:06:26.270><c> of</c><00:06:26.419><c> C</c><00:06:26.600><c> and</c><00:06:26.810><c> in</c><00:06:27.140><c> this</c><00:06:27.260><c> case</c>

00:06:27.520 --> 00:06:27.530 align:start position:0%
different from F of C and in this case
 

00:06:27.530 --> 00:06:30.130 align:start position:0%
different from F of C and in this case
the<00:06:28.160><c> solver</c><00:06:28.460><c> will</c><00:06:28.610><c> tell</c><00:06:28.760><c> me</c><00:06:28.940><c> it's</c><00:06:29.390><c> satisfiable</c>

00:06:30.130 --> 00:06:30.140 align:start position:0%
the solver will tell me it's satisfiable
 

00:06:30.140 --> 00:06:32.860 align:start position:0%
the solver will tell me it's satisfiable
and<00:06:30.350><c> here</c><00:06:30.890><c> are</c><00:06:31.070><c> some</c><00:06:31.370><c> values</c><00:06:31.640><c> and</c><00:06:31.940><c> this</c><00:06:32.720><c> is</c>

00:06:32.860 --> 00:06:32.870 align:start position:0%
and here are some values and this is
 

00:06:32.870 --> 00:06:35.020 align:start position:0%
and here are some values and this is
exactly<00:06:33.020><c> the</c><00:06:33.500><c> output</c><00:06:33.890><c> that</c><00:06:34.190><c> solidity</c>

00:06:35.020 --> 00:06:35.030 align:start position:0%
exactly the output that solidity
 

00:06:35.030 --> 00:06:36.550 align:start position:0%
exactly the output that solidity
compiler<00:06:35.479><c> will</c><00:06:35.630><c> give</c><00:06:35.870><c> you</c><00:06:36.050><c> at</c><00:06:36.200><c> compile</c><00:06:36.530><c> time</c>

00:06:36.550 --> 00:06:36.560 align:start position:0%
compiler will give you at compile time
 

00:06:36.560 --> 00:06:39.730 align:start position:0%
compiler will give you at compile time
when<00:06:37.490><c> it's</c><00:06:37.640><c> Y</c><00:06:37.820><c> when</c><00:06:38.120><c> you</c><00:06:38.240><c> run</c><00:06:38.840><c> exactly</c><00:06:39.380><c> that</c>

00:06:39.730 --> 00:06:39.740 align:start position:0%
when it's Y when you run exactly that
 

00:06:39.740 --> 00:06:40.390 align:start position:0%
when it's Y when you run exactly that
code

00:06:40.390 --> 00:06:40.400 align:start position:0%
code
 

00:06:40.400 --> 00:06:42.820 align:start position:0%
code
so<00:06:40.760><c> here</c><00:06:40.940><c> we</c><00:06:41.060><c> see</c><00:06:41.270><c> that</c><00:06:41.680><c> compilers</c><00:06:42.680><c> say</c>

00:06:42.820 --> 00:06:42.830 align:start position:0%
so here we see that compilers say
 

00:06:42.830 --> 00:06:44.770 align:start position:0%
so here we see that compilers say
assertion<00:06:43.190><c> violation</c><00:06:43.220><c> happens</c><00:06:43.850><c> here</c><00:06:44.090><c> for</c><00:06:44.690><c> its</c>

00:06:44.770 --> 00:06:44.780 align:start position:0%
assertion violation happens here for its
 

00:06:44.780 --> 00:06:54.070 align:start position:0%
assertion violation happens here for its
assertion<00:06:45.020><c> for</c><00:06:45.410><c> a1</c><00:06:46.280><c> b1</c><00:06:46.580><c> c1</c><00:06:47.199><c> c0</c><00:06:48.199><c> sorry</c><00:06:52.810><c> so</c><00:06:53.810><c> the</c>

00:06:54.070 --> 00:06:54.080 align:start position:0%
assertion for a1 b1 c1 c0 sorry so the
 

00:06:54.080 --> 00:06:56.650 align:start position:0%
assertion for a1 b1 c1 c0 sorry so the
SMT<00:06:54.410><c> checker</c><00:06:54.680><c> as</c><00:06:55.070><c> a</c><00:06:55.610><c> summary</c><00:06:56.000><c> after</c><00:06:56.240><c> Jack</c>

00:06:56.650 --> 00:06:56.660 align:start position:0%
SMT checker as a summary after Jack
 

00:06:56.660 --> 00:07:00.850 align:start position:0%
SMT checker as a summary after Jack
symbolizes<00:06:57.229><c> saw</c><00:06:57.410><c> it's</c><00:06:57.979><c> a</c><00:06:58.630><c> SMT</c><00:06:59.630><c> based</c><00:06:59.900><c> so</c><00:07:00.680><c> we</c>

00:07:00.850 --> 00:07:00.860 align:start position:0%
symbolizes saw it's a SMT based so we
 

00:07:00.860 --> 00:07:03.340 align:start position:0%
symbolizes saw it's a SMT based so we
use<00:07:00.949><c> SMT</c><00:07:01.280><c> solvers</c><00:07:01.610><c> so</c><00:07:02.000><c> it's</c><00:07:02.120><c> an</c><00:07:02.180><c> SMT</c><00:07:02.570><c> based</c><00:07:02.810><c> it</c>

00:07:03.340 --> 00:07:03.350 align:start position:0%
use SMT solvers so it's an SMT based it
 

00:07:03.350 --> 00:07:04.830 align:start position:0%
use SMT solvers so it's an SMT based it
smart<00:07:03.590><c> contract</c><00:07:03.979><c> form</c><00:07:04.190><c> of</c><00:07:04.280><c> verification</c>

00:07:04.830 --> 00:07:04.840 align:start position:0%
smart contract form of verification
 

00:07:04.840 --> 00:07:09.070 align:start position:0%
smart contract form of verification
framework<00:07:06.370><c> it's</c><00:07:07.370><c> built</c><00:07:07.699><c> in</c><00:07:07.850><c> a</c><00:07:07.940><c> compiler</c><00:07:08.270><c> which</c>

00:07:09.070 --> 00:07:09.080 align:start position:0%
framework it's built in a compiler which
 

00:07:09.080 --> 00:07:12.219 align:start position:0%
framework it's built in a compiler which
is<00:07:09.530><c> for</c><00:07:10.520><c> us</c><00:07:10.699><c> one</c><00:07:11.210><c> of</c><00:07:11.240><c> the</c><00:07:11.540><c> one</c><00:07:11.900><c> of</c><00:07:11.990><c> the</c><00:07:12.080><c> big</c>

00:07:12.219 --> 00:07:12.229 align:start position:0%
is for us one of the one of the big
 

00:07:12.229 --> 00:07:16.240 align:start position:0%
is for us one of the one of the big
advantages<00:07:12.880><c> compared</c><00:07:13.880><c> to</c><00:07:14.270><c> other</c><00:07:15.010><c> ways</c><00:07:16.010><c> to</c>

00:07:16.240 --> 00:07:16.250 align:start position:0%
advantages compared to other ways to
 

00:07:16.250 --> 00:07:18.820 align:start position:0%
advantages compared to other ways to
formally<00:07:16.580><c> verify</c><00:07:16.970><c> your</c><00:07:17.150><c> code</c><00:07:17.590><c> the</c><00:07:18.590><c> way</c><00:07:18.770><c> it</c>

00:07:18.820 --> 00:07:18.830 align:start position:0%
formally verify your code the way it
 

00:07:18.830 --> 00:07:21.070 align:start position:0%
formally verify your code the way it
works<00:07:19.100><c> the</c><00:07:19.340><c> way</c><00:07:19.460><c> the</c><00:07:19.520><c> approach</c><00:07:19.820><c> our</c><00:07:20.690><c> approach</c>

00:07:21.070 --> 00:07:21.080 align:start position:0%
works the way the approach our approach
 

00:07:21.080 --> 00:07:23.290 align:start position:0%
works the way the approach our approach
is<00:07:21.380><c> that</c><00:07:21.410><c> we</c><00:07:21.680><c> encode</c><00:07:21.979><c> program</c><00:07:22.789><c> logic</c><00:07:23.150><c> from</c>

00:07:23.290 --> 00:07:23.300 align:start position:0%
is that we encode program logic from
 

00:07:23.300 --> 00:07:26.650 align:start position:0%
is that we encode program logic from
solidity<00:07:23.750><c> into</c><00:07:24.380><c> SMT</c><00:07:24.830><c> statements</c><00:07:25.520><c> and</c><00:07:25.699><c> use</c><00:07:26.270><c> SMT</c>

00:07:26.650 --> 00:07:26.660 align:start position:0%
solidity into SMT statements and use SMT
 

00:07:26.660 --> 00:07:28.240 align:start position:0%
solidity into SMT statements and use SMT
solver<00:07:26.960><c> to</c><00:07:27.139><c> run</c><00:07:27.350><c> those</c><00:07:27.530><c> queries</c><00:07:27.740><c> that</c><00:07:27.979><c> I</c><00:07:28.010><c> just</c>

00:07:28.240 --> 00:07:28.250 align:start position:0%
solver to run those queries that I just
 

00:07:28.250 --> 00:07:30.520 align:start position:0%
solver to run those queries that I just
mentioned<00:07:28.430><c> and</c><00:07:28.880><c> we</c><00:07:29.300><c> use</c><00:07:29.479><c> those</c><00:07:29.720><c> to</c><00:07:29.960><c> check</c><00:07:30.199><c> for</c>

00:07:30.520 --> 00:07:30.530 align:start position:0%
mentioned and we use those to check for
 

00:07:30.530 --> 00:07:33.060 align:start position:0%
mentioned and we use those to check for
assertion<00:07:31.220><c> failures</c><00:07:31.639><c> overflow</c><00:07:32.180><c> underflow</c>

00:07:33.060 --> 00:07:33.070 align:start position:0%
assertion failures overflow underflow
 

00:07:33.070 --> 00:07:35.110 align:start position:0%
assertion failures overflow underflow
trivial<00:07:34.070><c> conditions</c><00:07:34.460><c> and</c><00:07:34.639><c> reachable</c><00:07:34.820><c> code</c>

00:07:35.110 --> 00:07:35.120 align:start position:0%
trivial conditions and reachable code
 

00:07:35.120 --> 00:07:37.180 align:start position:0%
trivial conditions and reachable code
and<00:07:35.330><c> all</c><00:07:35.510><c> of</c><00:07:35.690><c> that</c><00:07:35.720><c> happens</c><00:07:36.289><c> automatically</c>

00:07:37.180 --> 00:07:37.190 align:start position:0%
and all of that happens automatically
 

00:07:37.190 --> 00:07:41.140 align:start position:0%
and all of that happens automatically
when<00:07:37.520><c> you</c><00:07:37.910><c> run</c><00:07:38.060><c> the</c><00:07:38.180><c> compiler</c><00:07:40.150><c> one</c>

00:07:41.140 --> 00:07:41.150 align:start position:0%
when you run the compiler one
 

00:07:41.150 --> 00:07:43.540 align:start position:0%
when you run the compiler one
characteristic<00:07:41.930><c> of</c><00:07:42.080><c> this</c><00:07:42.229><c> approach</c><00:07:42.620><c> which</c><00:07:43.370><c> is</c>

00:07:43.540 --> 00:07:43.550 align:start position:0%
characteristic of this approach which is
 

00:07:43.550 --> 00:07:45.700 align:start position:0%
characteristic of this approach which is
close<00:07:43.820><c> to</c><00:07:43.930><c> from</c><00:07:44.930><c> the</c><00:07:45.050><c> fortification</c>

00:07:45.700 --> 00:07:45.710 align:start position:0%
close to from the fortification
 

00:07:45.710 --> 00:07:47.710 align:start position:0%
close to from the fortification
community<00:07:46.190><c> called</c><00:07:46.820><c> bounded</c><00:07:47.210><c> model</c><00:07:47.479><c> checking</c>

00:07:47.710 --> 00:07:47.720 align:start position:0%
community called bounded model checking
 

00:07:47.720 --> 00:07:50.320 align:start position:0%
community called bounded model checking
is<00:07:48.020><c> that</c><00:07:48.320><c> this</c><00:07:49.250><c> approach</c><00:07:49.400><c> is</c><00:07:49.580><c> sound</c><00:07:49.940><c> but</c><00:07:50.210><c> not</c>

00:07:50.320 --> 00:07:50.330 align:start position:0%
is that this approach is sound but not
 

00:07:50.330 --> 00:07:54.129 align:start position:0%
is that this approach is sound but not
complete<00:07:50.870><c> and</c><00:07:51.200><c> what</c><00:07:51.800><c> that</c><00:07:51.950><c> means</c><00:07:52.160><c> is</c><00:07:52.660><c> if</c><00:07:53.660><c> it's</c>

00:07:54.129 --> 00:07:54.139 align:start position:0%
complete and what that means is if it's
 

00:07:54.139 --> 00:07:56.680 align:start position:0%
complete and what that means is if it's
sound<00:07:54.470><c> which</c><00:07:55.190><c> this</c><00:07:55.430><c> approach</c><00:07:55.700><c> is</c><00:07:55.970><c> whenever</c><00:07:56.450><c> it</c>

00:07:56.680 --> 00:07:56.690 align:start position:0%
sound which this approach is whenever it
 

00:07:56.690 --> 00:07:58.960 align:start position:0%
sound which this approach is whenever it
says<00:07:56.960><c> the</c><00:07:57.650><c> assertion</c><00:07:58.039><c> is</c><00:07:58.099><c> safe</c><00:07:58.430><c> it</c><00:07:58.760><c> is</c>

00:07:58.960 --> 00:07:58.970 align:start position:0%
says the assertion is safe it is
 

00:07:58.970 --> 00:08:02.140 align:start position:0%
says the assertion is safe it is
actually<00:07:59.539><c> safe</c><00:07:59.979><c> but</c><00:08:00.979><c> whenever</c><00:08:01.220><c> it</c><00:08:01.460><c> says</c><00:08:01.729><c> the</c>

00:08:02.140 --> 00:08:02.150 align:start position:0%
actually safe but whenever it says the
 

00:08:02.150 --> 00:08:04.029 align:start position:0%
actually safe but whenever it says the
assertion<00:08:02.510><c> is</c><00:08:02.539><c> not</c><00:08:02.780><c> safe</c><00:08:03.110><c> here's</c><00:08:03.770><c> a</c><00:08:03.860><c> counter</c>

00:08:04.029 --> 00:08:04.039 align:start position:0%
assertion is not safe here's a counter
 

00:08:04.039 --> 00:08:06.879 align:start position:0%
assertion is not safe here's a counter
example<00:08:04.280><c> it</c><00:08:05.120><c> might</c><00:08:05.450><c> be</c><00:08:05.780><c> that</c><00:08:06.260><c> might</c><00:08:06.500><c> be</c><00:08:06.710><c> not</c>

00:08:06.879 --> 00:08:06.889 align:start position:0%
example it might be that might be not
 

00:08:06.889 --> 00:08:08.860 align:start position:0%
example it might be that might be not
true<00:08:07.160><c> so</c><00:08:07.400><c> you</c><00:08:07.460><c> might</c><00:08:07.729><c> have</c><00:08:07.970><c> to</c><00:08:08.120><c> verify</c><00:08:08.300><c> it</c><00:08:08.570><c> and</c>

00:08:08.860 --> 00:08:08.870 align:start position:0%
true so you might have to verify it and
 

00:08:08.870 --> 00:08:12.040 align:start position:0%
true so you might have to verify it and
see<00:08:09.860><c> that</c><00:08:10.130><c> this</c><00:08:11.000><c> this</c><00:08:11.449><c> might</c><00:08:11.660><c> have</c><00:08:11.870><c> been</c>

00:08:12.040 --> 00:08:12.050 align:start position:0%
see that this this might have been
 

00:08:12.050 --> 00:08:14.290 align:start position:0%
see that this this might have been
caused<00:08:12.349><c> by</c><00:08:12.560><c> an</c><00:08:13.010><c> abstraction</c><00:08:13.460><c> of</c><00:08:13.760><c> some</c>

00:08:14.290 --> 00:08:14.300 align:start position:0%
caused by an abstraction of some
 

00:08:14.300 --> 00:08:16.689 align:start position:0%
caused by an abstraction of some
unsupported<00:08:15.110><c> features</c><00:08:15.470><c> or</c><00:08:15.710><c> functions</c><00:08:16.280><c> which</c>

00:08:16.689 --> 00:08:16.699 align:start position:0%
unsupported features or functions which
 

00:08:16.699 --> 00:08:19.930 align:start position:0%
unsupported features or functions which
is<00:08:16.880><c> the</c><00:08:17.030><c> case</c><00:08:17.240><c> for</c><00:08:17.539><c> our</c><00:08:18.260><c> approach</c><00:08:18.760><c> but</c><00:08:19.760><c> then</c>

00:08:19.930 --> 00:08:19.940 align:start position:0%
is the case for our approach but then
 

00:08:19.940 --> 00:08:21.610 align:start position:0%
is the case for our approach but then
being<00:08:20.240><c> sound</c><00:08:20.479><c> but</c><00:08:20.630><c> not</c><00:08:20.690><c> complete</c><00:08:21.080><c> also</c><00:08:21.440><c> gives</c>

00:08:21.610 --> 00:08:21.620 align:start position:0%
being sound but not complete also gives
 

00:08:21.620 --> 00:08:23.529 align:start position:0%
being sound but not complete also gives
advantage<00:08:21.860><c> that</c><00:08:22.190><c> it's</c><00:08:22.340><c> pretty</c><00:08:22.970><c> fast</c><00:08:23.270><c> and</c>

00:08:23.529 --> 00:08:23.539 align:start position:0%
advantage that it's pretty fast and
 

00:08:23.539 --> 00:08:25.150 align:start position:0%
advantage that it's pretty fast and
light<00:08:23.720><c> compared</c><00:08:24.139><c> to</c><00:08:24.260><c> other</c><00:08:24.349><c> approaches</c><00:08:24.800><c> and</c>

00:08:25.150 --> 00:08:25.160 align:start position:0%
light compared to other approaches and
 

00:08:25.160 --> 00:08:27.070 align:start position:0%
light compared to other approaches and
it<00:08:25.490><c> gives</c><00:08:25.699><c> useful</c><00:08:25.880><c> counter</c><00:08:26.539><c> examples</c><00:08:26.930><c> because</c>

00:08:27.070 --> 00:08:27.080 align:start position:0%
it gives useful counter examples because
 

00:08:27.080 --> 00:08:29.370 align:start position:0%
it gives useful counter examples because
it's<00:08:27.440><c> applied</c><00:08:27.710><c> directly</c><00:08:27.979><c> on</c><00:08:28.520><c> solidity</c><00:08:29.060><c> code</c>

00:08:29.370 --> 00:08:29.380 align:start position:0%
it's applied directly on solidity code
 

00:08:29.380 --> 00:08:32.050 align:start position:0%
it's applied directly on solidity code
instead<00:08:30.380><c> of</c><00:08:30.440><c> EVM</c><00:08:30.860><c> bytecode</c><00:08:31.310><c> which</c><00:08:31.340><c> then</c><00:08:31.820><c> you</c>

00:08:32.050 --> 00:08:32.060 align:start position:0%
instead of EVM bytecode which then you
 

00:08:32.060 --> 00:08:33.399 align:start position:0%
instead of EVM bytecode which then you
would<00:08:32.180><c> have</c><00:08:32.270><c> to</c><00:08:32.479><c> map</c><00:08:32.659><c> back</c><00:08:32.930><c> to</c><00:08:32.959><c> solidity</c>

00:08:33.399 --> 00:08:33.409 align:start position:0%
would have to map back to solidity
 

00:08:33.409 --> 00:08:36.880 align:start position:0%
would have to map back to solidity
program<00:08:34.279><c> variables</c><00:08:34.700><c> which</c><00:08:35.890><c> doesn't</c>

00:08:36.880 --> 00:08:36.890 align:start position:0%
program variables which doesn't
 

00:08:36.890 --> 00:08:40.560 align:start position:0%
program variables which doesn't
necessarily<00:08:37.430><c> work</c><00:08:38.709><c> so</c><00:08:39.709><c> here's</c><00:08:40.010><c> some</c><00:08:40.219><c> other</c>

00:08:40.560 --> 00:08:40.570 align:start position:0%
necessarily work so here's some other
 

00:08:40.570 --> 00:08:45.370 align:start position:0%
necessarily work so here's some other
frameworks<00:08:41.570><c> that</c><00:08:41.990><c> have</c><00:08:42.169><c> been</c><00:08:43.089><c> already</c><00:08:44.380><c> in</c>

00:08:45.370 --> 00:08:45.380 align:start position:0%
frameworks that have been already in
 

00:08:45.380 --> 00:08:49.150 align:start position:0%
frameworks that have been already in
indigo<00:08:46.070><c> system</c><00:08:46.520><c> for</c><00:08:46.790><c> for</c><00:08:47.120><c> some</c><00:08:47.270><c> time</c><00:08:47.770><c> in</c><00:08:48.770><c> EVM</c>

00:08:49.150 --> 00:08:49.160 align:start position:0%
indigo system for for some time in EVM
 

00:08:49.160 --> 00:08:52.090 align:start position:0%
indigo system for for some time in EVM
formal<00:08:49.490><c> semantics</c><00:08:49.970><c> I'd</c><00:08:50.420><c> have</c><00:08:50.810><c> Isabel</c><00:08:51.440><c> and</c><00:08:51.620><c> KVM</c>

00:08:52.090 --> 00:08:52.100 align:start position:0%
formal semantics I'd have Isabel and KVM
 

00:08:52.100 --> 00:08:53.920 align:start position:0%
formal semantics I'd have Isabel and KVM
which<00:08:52.910><c> are</c>

00:08:53.920 --> 00:08:53.930 align:start position:0%
which are
 

00:08:53.930 --> 00:08:55.950 align:start position:0%
which are
or<00:08:54.140><c> KVM</c><00:08:54.590><c> specially</c><00:08:55.100><c> is</c><00:08:55.160><c> pretty</c><00:08:55.370><c> established</c>

00:08:55.950 --> 00:08:55.960 align:start position:0%
or KVM specially is pretty established
 

00:08:55.960 --> 00:08:59.010 align:start position:0%
or KVM specially is pretty established
as<00:08:56.960><c> a</c><00:08:57.020><c> really</c><00:08:57.350><c> good</c><00:08:57.470><c> framework</c><00:08:57.650><c> for</c>

00:08:59.010 --> 00:08:59.020 align:start position:0%
as a really good framework for
 

00:08:59.020 --> 00:09:01.800 align:start position:0%
as a really good framework for
fortification<00:09:00.020><c> of</c><00:09:00.140><c> smart</c><00:09:00.650><c> contracts</c><00:09:01.130><c> it's</c>

00:09:01.800 --> 00:09:01.810 align:start position:0%
fortification of smart contracts it's
 

00:09:01.810 --> 00:09:04.720 align:start position:0%
fortification of smart contracts it's
more<00:09:02.810><c> expressive</c><00:09:03.230><c> but</c><00:09:04.010><c> it</c><00:09:04.100><c> also</c><00:09:04.280><c> means</c><00:09:04.610><c> that</c>

00:09:04.720 --> 00:09:04.730 align:start position:0%
more expressive but it also means that
 

00:09:04.730 --> 00:09:07.330 align:start position:0%
more expressive but it also means that
it<00:09:05.000><c> it's</c><00:09:05.570><c> harder</c><00:09:06.260><c> and</c><00:09:06.410><c> takes</c><00:09:06.560><c> longer</c><00:09:07.010><c> to</c><00:09:07.190><c> give</c>

00:09:07.330 --> 00:09:07.340 align:start position:0%
it it's harder and takes longer to give
 

00:09:07.340 --> 00:09:09.310 align:start position:0%
it it's harder and takes longer to give
you<00:09:07.460><c> proof</c><00:09:07.670><c> so</c><00:09:08.000><c> these</c><00:09:08.630><c> two</c><00:09:08.780><c> approaches</c><00:09:09.170><c> have</c>

00:09:09.310 --> 00:09:09.320 align:start position:0%
you proof so these two approaches have
 

00:09:09.320 --> 00:09:12.310 align:start position:0%
you proof so these two approaches have
pros<00:09:09.560><c> and</c><00:09:09.590><c> cons</c><00:09:10.690><c> caleb</c><00:09:11.690><c> is</c><00:09:11.810><c> a</c><00:09:11.840><c> really</c><00:09:12.140><c> nice</c>

00:09:12.310 --> 00:09:12.320 align:start position:0%
pros and cons caleb is a really nice
 

00:09:12.320 --> 00:09:15.370 align:start position:0%
pros and cons caleb is a really nice
debugger<00:09:12.680><c> for</c><00:09:12.830><c> a</c><00:09:12.920><c> cape</c><00:09:13.070><c> for</c><00:09:13.280><c> K</c><00:09:13.460><c> proofs</c><00:09:14.020><c> wit</c><00:09:15.020><c> and</c>

00:09:15.370 --> 00:09:15.380 align:start position:0%
debugger for a cape for K proofs wit and
 

00:09:15.380 --> 00:09:16.750 align:start position:0%
debugger for a cape for K proofs wit and
they<00:09:15.500><c> will</c><00:09:15.650><c> have</c><00:09:15.800><c> a</c><00:09:15.830><c> workshop</c><00:09:16.250><c> tomorrow</c><00:09:16.460><c> so</c>

00:09:16.750 --> 00:09:16.760 align:start position:0%
they will have a workshop tomorrow so
 

00:09:16.760 --> 00:09:21.100 align:start position:0%
they will have a workshop tomorrow so
make<00:09:17.000><c> sure</c><00:09:17.030><c> to</c><00:09:17.270><c> check</c><00:09:17.420><c> that</c><00:09:17.450><c> out</c><00:09:17.630><c> for</c><00:09:19.840><c> a</c><00:09:20.840><c> vm</c>

00:09:21.100 --> 00:09:21.110 align:start position:0%
make sure to check that out for a vm
 

00:09:21.110 --> 00:09:22.630 align:start position:0%
make sure to check that out for a vm
byte<00:09:21.320><c> code</c><00:09:21.530><c> verification</c><00:09:21.770><c> there</c><00:09:22.370><c> are</c><00:09:22.430><c> tools</c>

00:09:22.630 --> 00:09:22.640 align:start position:0%
byte code verification there are tools
 

00:09:22.640 --> 00:09:24.280 align:start position:0%
byte code verification there are tools
like<00:09:22.730><c> int</c><00:09:23.180><c> me</c><00:09:23.300><c> through</c><00:09:23.450><c> in</c><00:09:23.540><c> mayan</c><00:09:23.840><c> which</c><00:09:24.020><c> do</c>

00:09:24.280 --> 00:09:24.290 align:start position:0%
like int me through in mayan which do
 

00:09:24.290 --> 00:09:25.990 align:start position:0%
like int me through in mayan which do
symbolic<00:09:24.830><c> execution</c><00:09:24.920><c> on</c><00:09:25.370><c> the</c><00:09:25.400><c> byte</c><00:09:25.580><c> code</c><00:09:25.610><c> and</c>

00:09:25.990 --> 00:09:26.000 align:start position:0%
symbolic execution on the byte code and
 

00:09:26.000 --> 00:09:29.050 align:start position:0%
symbolic execution on the byte code and
try<00:09:26.600><c> to</c><00:09:26.660><c> find</c><00:09:26.960><c> bugs</c><00:09:27.200><c> basically</c><00:09:28.070><c> and</c><00:09:28.280><c> there</c>

00:09:29.050 --> 00:09:29.060 align:start position:0%
try to find bugs basically and there
 

00:09:29.060 --> 00:09:30.700 align:start position:0%
try to find bugs basically and there
were<00:09:29.270><c> other</c><00:09:29.540><c> projects</c><00:09:30.050><c> that</c><00:09:30.140><c> were</c>

00:09:30.700 --> 00:09:30.710 align:start position:0%
were other projects that were
 

00:09:30.710 --> 00:09:32.860 align:start position:0%
were other projects that were
translating<00:09:31.310><c> solidity</c><00:09:31.670><c> to</c><00:09:31.810><c> language</c><00:09:32.810><c> that</c>

00:09:32.860 --> 00:09:32.870 align:start position:0%
translating solidity to language that
 

00:09:32.870 --> 00:09:35.650 align:start position:0%
translating solidity to language that
were<00:09:33.140><c> whatever</c><00:09:33.520><c> verifiable</c><00:09:34.520><c> like</c><00:09:34.700><c> y3f</c><00:09:35.390><c> star</c>

00:09:35.650 --> 00:09:35.660 align:start position:0%
were whatever verifiable like y3f star
 

00:09:35.660 --> 00:09:38.920 align:start position:0%
were whatever verifiable like y3f star
and<00:09:35.900><c> zoos</c><00:09:36.860><c> that</c><00:09:36.890><c> with</c><00:09:37.880><c> LLVM</c><00:09:38.390><c> if</c><00:09:38.690><c> I'm</c><00:09:38.840><c> not</c>

00:09:38.920 --> 00:09:38.930 align:start position:0%
and zoos that with LLVM if I'm not
 

00:09:38.930 --> 00:09:43.390 align:start position:0%
and zoos that with LLVM if I'm not
mistake<00:09:40.990><c> so</c><00:09:41.990><c> how</c><00:09:42.170><c> do</c><00:09:42.230><c> you</c><00:09:42.350><c> use</c><00:09:42.530><c> it</c><00:09:42.710><c> you</c><00:09:43.190><c> just</c>

00:09:43.390 --> 00:09:43.400 align:start position:0%
mistake so how do you use it you just
 

00:09:43.400 --> 00:09:46.120 align:start position:0%
mistake so how do you use it you just
need<00:09:43.550><c> one</c><00:09:43.580><c> line</c><00:09:43.910><c> of</c><00:09:44.030><c> code</c><00:09:44.240><c> right</c><00:09:44.590><c> now</c><00:09:45.590><c> it's</c><00:09:45.980><c> an</c>

00:09:46.120 --> 00:09:46.130 align:start position:0%
need one line of code right now it's an
 

00:09:46.130 --> 00:09:47.710 align:start position:0%
need one line of code right now it's an
experimental<00:09:46.370><c> feature</c><00:09:46.790><c> it's</c><00:09:47.150><c> a</c><00:09:47.390><c> very</c>

00:09:47.710 --> 00:09:47.720 align:start position:0%
experimental feature it's a very
 

00:09:47.720 --> 00:09:49.780 align:start position:0%
experimental feature it's a very
experimental<00:09:48.080><c> feature</c><00:09:48.470><c> right</c><00:09:48.680><c> now</c><00:09:48.830><c> so</c><00:09:49.580><c> if</c><00:09:49.700><c> you</c>

00:09:49.780 --> 00:09:49.790 align:start position:0%
experimental feature right now so if you
 

00:09:49.790 --> 00:09:51.670 align:start position:0%
experimental feature right now so if you
use<00:09:49.940><c> it</c><00:09:50.120><c> you</c><00:09:50.150><c> will</c><00:09:50.390><c> find</c><00:09:50.810><c> internal</c><00:09:51.410><c> compile</c>

00:09:51.670 --> 00:09:51.680 align:start position:0%
use it you will find internal compile
 

00:09:51.680 --> 00:09:53.170 align:start position:0%
use it you will find internal compile
errors<00:09:52.100><c> they</c><00:09:52.280><c> will</c><00:09:52.400><c> find</c><00:09:52.670><c> and</c><00:09:52.820><c> supported</c>

00:09:53.170 --> 00:09:53.180 align:start position:0%
errors they will find and supported
 

00:09:53.180 --> 00:09:55.180 align:start position:0%
errors they will find and supported
features<00:09:53.480><c> and</c><00:09:53.690><c> all</c><00:09:53.750><c> kind</c><00:09:53.960><c> of</c><00:09:53.990><c> things</c><00:09:54.080><c> but</c><00:09:54.440><c> we</c>

00:09:55.180 --> 00:09:55.190 align:start position:0%
features and all kind of things but we
 

00:09:55.190 --> 00:09:59.290 align:start position:0%
features and all kind of things but we
are<00:09:55.370><c> working</c><00:09:55.910><c> on</c><00:09:56.150><c> it</c><00:09:56.650><c> to</c><00:09:57.650><c> make</c><00:09:57.800><c> it</c><00:09:58.030><c> of</c><00:09:59.030><c> course</c>

00:09:59.290 --> 00:09:59.300 align:start position:0%
are working on it to make it of course
 

00:09:59.300 --> 00:10:00.610 align:start position:0%
are working on it to make it of course
much<00:09:59.480><c> more</c><00:09:59.630><c> usable</c><00:10:00.050><c> and</c><00:10:00.200><c> hopefully</c>

00:10:00.610 --> 00:10:00.620 align:start position:0%
much more usable and hopefully
 

00:10:00.620 --> 00:10:05.200 align:start position:0%
much more usable and hopefully
non-experimental<00:10:01.630><c> one</c><00:10:02.630><c> day</c><00:10:03.520><c> but</c><00:10:04.520><c> then</c><00:10:04.730><c> the</c>

00:10:05.200 --> 00:10:05.210 align:start position:0%
non-experimental one day but then the
 

00:10:05.210 --> 00:10:07.510 align:start position:0%
non-experimental one day but then the
next<00:10:05.390><c> question</c><00:10:05.480><c> is</c><00:10:05.840><c> how</c><00:10:06.230><c> do</c><00:10:06.290><c> I</c><00:10:06.770><c> actually</c><00:10:07.190><c> use</c>

00:10:07.510 --> 00:10:07.520 align:start position:0%
next question is how do I actually use
 

00:10:07.520 --> 00:10:11.050 align:start position:0%
next question is how do I actually use
it<00:10:07.910><c> so</c><00:10:08.510><c> if</c><00:10:08.660><c> they</c><00:10:08.810><c> just</c><00:10:09.250><c> insert</c><00:10:10.250><c> this</c><00:10:10.430><c> line</c><00:10:10.730><c> of</c>

00:10:11.050 --> 00:10:11.060 align:start position:0%
it so if they just insert this line of
 

00:10:11.060 --> 00:10:14.170 align:start position:0%
it so if they just insert this line of
code<00:10:11.810><c> there</c><00:10:12.140><c> then</c><00:10:12.470><c> sure</c><00:10:13.010><c> it's</c><00:10:13.220><c> gonna</c><00:10:13.460><c> enable</c>

00:10:14.170 --> 00:10:14.180 align:start position:0%
code there then sure it's gonna enable
 

00:10:14.180 --> 00:10:16.210 align:start position:0%
code there then sure it's gonna enable
the<00:10:14.510><c> run</c><00:10:14.690><c> of</c><00:10:14.810><c> destiny</c><00:10:15.200><c> checker</c><00:10:15.410><c> but</c><00:10:15.650><c> what</c><00:10:16.100><c> is</c>

00:10:16.210 --> 00:10:16.220 align:start position:0%
the run of destiny checker but what is
 

00:10:16.220 --> 00:10:20.650 align:start position:0%
the run of destiny checker but what is
it<00:10:16.340><c> what</c><00:10:16.610><c> is</c><00:10:16.640><c> actually</c><00:10:17.120><c> doing</c><00:10:18.670><c> so</c><00:10:19.670><c> you</c><00:10:20.420><c> need</c><00:10:20.600><c> to</c>

00:10:20.650 --> 00:10:20.660 align:start position:0%
it what is actually doing so you need to
 

00:10:20.660 --> 00:10:22.210 align:start position:0%
it what is actually doing so you need to
write<00:10:20.780><c> formal</c><00:10:21.110><c> specifications</c><00:10:21.710><c> right</c><00:10:22.010><c> so</c>

00:10:22.210 --> 00:10:22.220 align:start position:0%
write formal specifications right so
 

00:10:22.220 --> 00:10:24.130 align:start position:0%
write formal specifications right so
whenever<00:10:22.400><c> you</c><00:10:22.640><c> prove</c><00:10:22.910><c> your</c><00:10:23.120><c> program</c><00:10:23.390><c> safe</c><00:10:23.660><c> you</c>

00:10:24.130 --> 00:10:24.140 align:start position:0%
whenever you prove your program safe you
 

00:10:24.140 --> 00:10:25.870 align:start position:0%
whenever you prove your program safe you
only<00:10:24.380><c> prove</c><00:10:24.590><c> it</c><00:10:24.800><c> with</c><00:10:25.100><c> respect</c><00:10:25.370><c> to</c>

00:10:25.870 --> 00:10:25.880 align:start position:0%
only prove it with respect to
 

00:10:25.880 --> 00:10:27.340 align:start position:0%
only prove it with respect to
specification<00:10:26.570><c> at</c><00:10:26.690><c> the</c><00:10:26.750><c> regional</c><00:10:27.080><c> proving</c>

00:10:27.340 --> 00:10:27.350 align:start position:0%
specification at the regional proving
 

00:10:27.350 --> 00:10:29.980 align:start position:0%
specification at the regional proving
anything<00:10:27.560><c> so</c><00:10:28.460><c> you</c><00:10:28.520><c> need</c><00:10:28.670><c> to</c><00:10:28.760><c> specify</c><00:10:28.990><c> what</c>

00:10:29.980 --> 00:10:29.990 align:start position:0%
anything so you need to specify what
 

00:10:29.990 --> 00:10:31.660 align:start position:0%
anything so you need to specify what
properties<00:10:30.590><c> you're</c><00:10:30.710><c> actually</c><00:10:31.040><c> proving</c><00:10:31.370><c> in</c>

00:10:31.660 --> 00:10:31.670 align:start position:0%
properties you're actually proving in
 

00:10:31.670 --> 00:10:34.510 align:start position:0%
properties you're actually proving in
solidity<00:10:32.510><c> or</c><00:10:32.840><c> with</c><00:10:33.230><c> the</c><00:10:33.320><c> SMT</c><00:10:33.650><c> checker</c><00:10:33.860><c> you</c>

00:10:34.510 --> 00:10:34.520 align:start position:0%
solidity or with the SMT checker you
 

00:10:34.520 --> 00:10:36.340 align:start position:0%
solidity or with the SMT checker you
don't<00:10:34.760><c> need</c><00:10:34.880><c> anything</c><00:10:35.120><c> extra</c><00:10:35.420><c> you</c><00:10:35.960><c> use</c><00:10:36.200><c> the</c>

00:10:36.340 --> 00:10:36.350 align:start position:0%
don't need anything extra you use the
 

00:10:36.350 --> 00:10:38.440 align:start position:0%
don't need anything extra you use the
normal<00:10:36.620><c> require</c><00:10:36.980><c> and</c><00:10:37.280><c> asserts</c><00:10:37.610><c> from</c><00:10:37.940><c> the</c>

00:10:38.440 --> 00:10:38.450 align:start position:0%
normal require and asserts from the
 

00:10:38.450 --> 00:10:40.690 align:start position:0%
normal require and asserts from the
language<00:10:38.720><c> itself</c><00:10:38.990><c> so</c><00:10:39.680><c> requires</c><00:10:40.220><c> and</c><00:10:40.400><c> asserts</c>

00:10:40.690 --> 00:10:40.700 align:start position:0%
language itself so requires and asserts
 

00:10:40.700 --> 00:10:43.930 align:start position:0%
language itself so requires and asserts
in<00:10:41.660><c> a</c><00:10:41.810><c> compiler</c><00:10:42.170><c> or</c><00:10:42.740><c> translated</c><00:10:43.310><c> into</c><00:10:43.490><c> runtime</c>

00:10:43.930 --> 00:10:43.940 align:start position:0%
in a compiler or translated into runtime
 

00:10:43.940 --> 00:10:45.850 align:start position:0%
in a compiler or translated into runtime
checks<00:10:44.240><c> right</c><00:10:44.750><c> when</c><00:10:45.260><c> it's</c><00:10:45.380><c> compiled</c><00:10:45.800><c> to</c>

00:10:45.850 --> 00:10:45.860 align:start position:0%
checks right when it's compiled to
 

00:10:45.860 --> 00:10:50.590 align:start position:0%
checks right when it's compiled to
bytecode<00:10:46.360><c> but</c><00:10:47.360><c> here</c><00:10:47.630><c> in</c><00:10:47.780><c> the</c><00:10:48.440><c> SMT</c><00:10:49.250><c> checker</c><00:10:49.600><c> we</c>

00:10:50.590 --> 00:10:50.600 align:start position:0%
bytecode but here in the SMT checker we
 

00:10:50.600 --> 00:10:53.020 align:start position:0%
bytecode but here in the SMT checker we
use<00:10:51.050><c> them</c><00:10:51.320><c> as</c><00:10:51.650><c> as</c><00:10:52.370><c> the</c><00:10:52.700><c> formal</c><00:10:52.940><c> specification</c>

00:10:53.020 --> 00:10:53.030 align:start position:0%
use them as as the formal specification
 

00:10:53.030 --> 00:10:55.800 align:start position:0%
use them as as the formal specification
so<00:10:53.660><c> ease</c><00:10:53.810><c> requires</c><00:10:54.230><c> as</c><00:10:54.770><c> assumptions</c><00:10:55.280><c> and</c>

00:10:55.800 --> 00:10:55.810 align:start position:0%
so ease requires as assumptions and
 

00:10:55.810 --> 00:10:58.540 align:start position:0%
so ease requires as assumptions and
asserts<00:10:56.810><c> as</c><00:10:57.080><c> verification</c><00:10:57.410><c> targets</c><00:10:57.980><c> so</c>

00:10:58.540 --> 00:10:58.550 align:start position:0%
asserts as verification targets so
 

00:10:58.550 --> 00:11:00.340 align:start position:0%
asserts as verification targets so
whatever<00:10:58.910><c> conditions</c><00:10:59.720><c> you</c><00:10:59.870><c> write</c><00:11:00.080><c> in</c><00:11:00.290><c> a</c>

00:11:00.340 --> 00:11:00.350 align:start position:0%
whatever conditions you write in a
 

00:11:00.350 --> 00:11:02.470 align:start position:0%
whatever conditions you write in a
require<00:11:00.680><c> the</c><00:11:01.400><c> SMT</c><00:11:01.700><c> checker</c><00:11:01.880><c> has</c><00:11:02.000><c> been</c><00:11:02.150><c> assume</c>

00:11:02.470 --> 00:11:02.480 align:start position:0%
require the SMT checker has been assume
 

00:11:02.480 --> 00:11:05.680 align:start position:0%
require the SMT checker has been assume
it's<00:11:02.690><c> true</c><00:11:02.930><c> and</c><00:11:04.030><c> whatever</c><00:11:05.030><c> you</c><00:11:05.210><c> write</c><00:11:05.390><c> has</c><00:11:05.540><c> had</c>

00:11:05.680 --> 00:11:05.690 align:start position:0%
it's true and whatever you write has had
 

00:11:05.690 --> 00:11:09.570 align:start position:0%
it's true and whatever you write has had
an<00:11:05.810><c> assert</c><00:11:06.110><c> it's</c><00:11:06.650><c> going</c><00:11:06.890><c> to</c><00:11:06.950><c> try</c><00:11:07.130><c> to</c><00:11:07.190><c> prove</c>

00:11:09.570 --> 00:11:09.580 align:start position:0%
 
 

00:11:09.580 --> 00:11:13.660 align:start position:0%
 
okay<00:11:10.580><c> so</c><00:11:11.290><c> how</c><00:11:12.290><c> to</c><00:11:12.350><c> use</c><00:11:12.560><c> a</c><00:11:12.620><c> require</c><00:11:12.920><c> actually</c><00:11:13.370><c> so</c>

00:11:13.660 --> 00:11:13.670 align:start position:0%
okay so how to use a require actually so
 

00:11:13.670 --> 00:11:16.600 align:start position:0%
okay so how to use a require actually so
there's<00:11:14.030><c> a</c><00:11:14.090><c> lot</c><00:11:14.300><c> of</c><00:11:14.330><c> debate</c><00:11:15.430><c> for</c><00:11:16.430><c> quite</c><00:11:16.580><c> a</c>

00:11:16.600 --> 00:11:16.610 align:start position:0%
there's a lot of debate for quite a
 

00:11:16.610 --> 00:11:18.490 align:start position:0%
there's a lot of debate for quite a
while<00:11:16.820><c> already</c><00:11:16.850><c> on</c><00:11:17.330><c> requires</c><00:11:18.050><c> and</c><00:11:18.230><c> asserts</c>

00:11:18.490 --> 00:11:18.500 align:start position:0%
while already on requires and asserts
 

00:11:18.500 --> 00:11:21.790 align:start position:0%
while already on requires and asserts
and<00:11:18.830><c> when</c><00:11:19.280><c> to</c><00:11:19.430><c> use</c><00:11:19.460><c> each</c><00:11:19.760><c> or</c><00:11:20.090><c> what</c><00:11:21.050><c> it</c><00:11:21.410><c> what</c>

00:11:21.790 --> 00:11:21.800 align:start position:0%
and when to use each or what it what
 

00:11:21.800 --> 00:11:24.010 align:start position:0%
and when to use each or what it what
which<00:11:21.980><c> one</c><00:11:22.160><c> means</c><00:11:22.280><c> so</c><00:11:23.150><c> I</c><00:11:23.180><c> just</c><00:11:23.480><c> copied</c><00:11:23.810><c> it</c><00:11:23.900><c> I'm</c>

00:11:24.010 --> 00:11:24.020 align:start position:0%
which one means so I just copied it I'm
 

00:11:24.020 --> 00:11:25.840 align:start position:0%
which one means so I just copied it I'm
gonna<00:11:24.140><c> read</c><00:11:24.350><c> it</c><00:11:24.380><c> from</c><00:11:24.620><c> solute</c><00:11:24.950><c> docks</c><00:11:25.160><c> the</c>

00:11:25.840 --> 00:11:25.850 align:start position:0%
gonna read it from solute docks the
 

00:11:25.850 --> 00:11:27.550 align:start position:0%
gonna read it from solute docks the
require<00:11:26.150><c> function</c><00:11:26.450><c> should</c><00:11:26.810><c> be</c><00:11:26.870><c> used</c><00:11:27.410><c> to</c>

00:11:27.550 --> 00:11:27.560 align:start position:0%
require function should be used to
 

00:11:27.560 --> 00:11:30.460 align:start position:0%
require function should be used to
ensure<00:11:27.860><c> valid</c><00:11:28.250><c> conditions</c><00:11:28.760><c> on</c><00:11:29.150><c> inputs</c><00:11:30.140><c> and</c>

00:11:30.460 --> 00:11:30.470 align:start position:0%
ensure valid conditions on inputs and
 

00:11:30.470 --> 00:11:32.830 align:start position:0%
ensure valid conditions on inputs and
contracts<00:11:31.070><c> a</c><00:11:31.190><c> tribals</c><00:11:31.640><c> or</c><00:11:31.940><c> to</c><00:11:32.480><c> validate</c>

00:11:32.830 --> 00:11:32.840 align:start position:0%
contracts a tribals or to validate
 

00:11:32.840 --> 00:11:35.200 align:start position:0%
contracts a tribals or to validate
return<00:11:33.260><c> values</c><00:11:33.710><c> from</c><00:11:33.860><c> calls</c><00:11:34.190><c> to</c><00:11:34.790><c> external</c>

00:11:35.200 --> 00:11:35.210 align:start position:0%
return values from calls to external
 

00:11:35.210 --> 00:11:37.510 align:start position:0%
return values from calls to external
contracts<00:11:35.690><c> so</c><00:11:36.350><c> here</c><00:11:36.650><c> in</c><00:11:36.800><c> this</c><00:11:36.890><c> example</c><00:11:37.220><c> we</c>

00:11:37.510 --> 00:11:37.520 align:start position:0%
contracts so here in this example we
 

00:11:37.520 --> 00:11:40.630 align:start position:0%
contracts so here in this example we
have<00:11:37.550><c> a</c><00:11:37.730><c> contract</c><00:11:38.360><c> that</c><00:11:38.600><c> has</c><00:11:39.460><c> stayed</c><00:11:40.460><c> forever</c>

00:11:40.630 --> 00:11:40.640 align:start position:0%
have a contract that has stayed forever
 

00:11:40.640 --> 00:11:43.410 align:start position:0%
have a contract that has stayed forever
a<00:11:40.940><c> a</c><00:11:41.180><c> bunch</c><00:11:41.420><c> of</c><00:11:41.510><c> functions</c><00:11:41.930><c> G</c><00:11:42.290><c> and</c><00:11:42.410><c> H</c><00:11:42.560><c> which</c>

00:11:43.410 --> 00:11:43.420 align:start position:0%
a a bunch of functions G and H which
 

00:11:43.420 --> 00:11:45.730 align:start position:0%
a a bunch of functions G and H which
suppose<00:11:44.420><c> like</c><00:11:44.720><c> that</c><00:11:45.050><c> we</c><00:11:45.260><c> don't</c><00:11:45.500><c> know</c><00:11:45.560><c> right</c>

00:11:45.730 --> 00:11:45.740 align:start position:0%
suppose like that we don't know right
 

00:11:45.740 --> 00:11:47.140 align:start position:0%
suppose like that we don't know right
now<00:11:45.890><c> what</c><00:11:46.070><c> they</c><00:11:46.160><c> do</c><00:11:46.310><c> and</c><00:11:46.640><c> we</c><00:11:46.940><c> have</c><00:11:47.060><c> this</c>

00:11:47.140 --> 00:11:47.150 align:start position:0%
now what they do and we have this
 

00:11:47.150 --> 00:11:51.460 align:start position:0%
now what they do and we have this
function<00:11:47.330><c> f</c><00:11:47.600><c> that</c><00:11:47.930><c> takes</c><00:11:47.990><c> an</c><00:11:48.740><c> integer</c><00:11:49.300><c> X</c><00:11:50.470><c> so</c>

00:11:51.460 --> 00:11:51.470 align:start position:0%
function f that takes an integer X so
 

00:11:51.470 --> 00:11:54.070 align:start position:0%
function f that takes an integer X so
here<00:11:51.770><c> we're</c><00:11:52.070><c> using</c><00:11:52.100><c> requires</c><00:11:52.900><c> requires</c><00:11:53.900><c> two</c>

00:11:54.070 --> 00:11:54.080 align:start position:0%
here we're using requires requires two
 

00:11:54.080 --> 00:11:56.860 align:start position:0%
here we're using requires requires two
filter<00:11:54.470><c> values</c><00:11:55.220><c> for</c><00:11:55.490><c> a</c><00:11:55.520><c> and</c><00:11:55.730><c> ax</c><00:11:56.030><c> right</c><00:11:56.540><c> so</c><00:11:56.750><c> we</c>

00:11:56.860 --> 00:11:56.870 align:start position:0%
filter values for a and ax right so we
 

00:11:56.870 --> 00:11:59.020 align:start position:0%
filter values for a and ax right so we
want<00:11:57.050><c> for</c><00:11:57.380><c> some</c><00:11:57.530><c> reason</c><00:11:57.800><c> a</c><00:11:57.950><c> to</c><00:11:58.280><c> be</c><00:11:58.520><c> 0</c><00:11:58.730><c> and</c><00:11:58.880><c> ax</c>

00:11:59.020 --> 00:11:59.030 align:start position:0%
want for some reason a to be 0 and ax
 

00:11:59.030 --> 00:12:01.450 align:start position:0%
want for some reason a to be 0 and ax
would<00:11:59.210><c> be</c><00:11:59.270><c> less</c><00:11:59.600><c> than</c><00:11:59.780><c> 100</c><00:12:00.170><c> then</c><00:12:00.350><c> we</c><00:12:00.740><c> sum</c><00:12:01.100><c> both</c>

00:12:01.450 --> 00:12:01.460 align:start position:0%
would be less than 100 then we sum both
 

00:12:01.460 --> 00:12:06.100 align:start position:0%
would be less than 100 then we sum both
we<00:12:01.730><c> put</c><00:12:01.910><c> it</c><00:12:02.030><c> in</c><00:12:02.090><c> a</c><00:12:02.270><c> and</c><00:12:02.540><c> then</c><00:12:03.140><c> after</c><00:12:04.070><c> that</c><00:12:04.660><c> we</c><00:12:05.660><c> we</c>

00:12:06.100 --> 00:12:06.110 align:start position:0%
we put it in a and then after that we we
 

00:12:06.110 --> 00:12:10.150 align:start position:0%
we put it in a and then after that we we
know<00:12:06.460><c> that</c><00:12:07.460><c> al</c><00:12:08.420><c> as</c><00:12:08.570><c> then</c><00:12:09.050><c> and</c><00:12:09.410><c> 100</c><00:12:09.860><c> is</c><00:12:09.950><c> true</c>

00:12:10.150 --> 00:12:10.160 align:start position:0%
know that al as then and 100 is true
 

00:12:10.160 --> 00:12:12.910 align:start position:0%
know that al as then and 100 is true
right<00:12:10.490><c> because</c><00:12:10.970><c> of</c><00:12:11.330><c> the</c><00:12:11.660><c> requires</c><00:12:11.960><c> before</c><00:12:12.380><c> so</c>

00:12:12.910 --> 00:12:12.920 align:start position:0%
right because of the requires before so
 

00:12:12.920 --> 00:12:14.440 align:start position:0%
right because of the requires before so
if<00:12:13.010><c> you</c><00:12:13.070><c> want</c><00:12:13.220><c> to</c><00:12:13.280><c> prove</c><00:12:13.460><c> that</c><00:12:13.520><c> the</c><00:12:14.210><c> last</c>

00:12:14.440 --> 00:12:14.450 align:start position:0%
if you want to prove that the last
 

00:12:14.450 --> 00:12:15.490 align:start position:0%
if you want to prove that the last
statement<00:12:14.840><c> should</c><00:12:14.900><c> actually</c><00:12:15.080><c> have</c><00:12:15.350><c> been</c><00:12:15.470><c> a</c>

00:12:15.490 --> 00:12:15.500 align:start position:0%
statement should actually have been a
 

00:12:15.500 --> 00:12:17.530 align:start position:0%
statement should actually have been a
require<00:12:15.830><c> sorry</c><00:12:16.490><c> in</c><00:12:16.610><c> a</c><00:12:16.670><c> certain</c><00:12:17.060><c> order</c><00:12:17.150><c> require</c>

00:12:17.530 --> 00:12:17.540 align:start position:0%
require sorry in a certain order require
 

00:12:17.540 --> 00:12:19.330 align:start position:0%
require sorry in a certain order require
because<00:12:18.290><c> it</c><00:12:18.380><c> requires</c><00:12:18.680><c> just</c><00:12:18.830><c> going</c><00:12:19.100><c> to</c><00:12:19.160><c> assume</c>

00:12:19.330 --> 00:12:19.340 align:start position:0%
because it requires just going to assume
 

00:12:19.340 --> 00:12:21.130 align:start position:0%
because it requires just going to assume
it<00:12:19.550><c> and</c><00:12:19.910><c> with</c><00:12:20.120><c> this</c><00:12:20.240><c> with</c><00:12:20.480><c> the</c><00:12:20.630><c> assert</c><00:12:20.900><c> we're</c>

00:12:21.130 --> 00:12:21.140 align:start position:0%
it and with this with the assert we're
 

00:12:21.140 --> 00:12:23.260 align:start position:0%
it and with this with the assert we're
actually<00:12:21.320><c> using</c><00:12:21.650><c> passed</c><00:12:22.400><c> knowledge</c><00:12:22.820><c> to</c><00:12:23.000><c> prove</c>

00:12:23.260 --> 00:12:23.270 align:start position:0%
actually using passed knowledge to prove
 

00:12:23.270 --> 00:12:25.750 align:start position:0%
actually using passed knowledge to prove
a<00:12:23.540><c> new</c><00:12:23.960><c> property</c><00:12:24.350><c> about</c><00:12:25.100><c> your</c><00:12:25.280><c> code</c><00:12:25.490><c> in</c><00:12:25.640><c> the</c>

00:12:25.750 --> 00:12:25.760 align:start position:0%
a new property about your code in the
 

00:12:25.760 --> 00:12:28.630 align:start position:0%
a new property about your code in the
end<00:12:25.850><c> of</c><00:12:25.940><c> the</c><00:12:26.060><c> function</c><00:12:27.370><c> so</c><00:12:28.370><c> what</c><00:12:28.550><c> about</c>

00:12:28.630 --> 00:12:28.640 align:start position:0%
end of the function so what about
 

00:12:28.640 --> 00:12:31.390 align:start position:0%
end of the function so what about
asserts<00:12:29.320><c> the</c><00:12:30.320><c> third</c><00:12:30.530><c> function</c><00:12:30.800><c> should</c><00:12:31.160><c> only</c>

00:12:31.390 --> 00:12:31.400 align:start position:0%
asserts the third function should only
 

00:12:31.400 --> 00:12:34.240 align:start position:0%
asserts the third function should only
be<00:12:31.700><c> used</c><00:12:31.940><c> to</c><00:12:32.210><c> test</c><00:12:32.480><c> for</c><00:12:32.660><c> internal</c><00:12:33.650><c> errors</c><00:12:34.010><c> and</c>

00:12:34.240 --> 00:12:34.250 align:start position:0%
be used to test for internal errors and
 

00:12:34.250 --> 00:12:35.560 align:start position:0%
be used to test for internal errors and
to<00:12:34.340><c> check</c><00:12:34.580><c> invariants</c><00:12:35.180><c> a</c><00:12:35.240><c> properly</c>

00:12:35.560 --> 00:12:35.570 align:start position:0%
to check invariants a properly
 

00:12:35.570 --> 00:12:37.690 align:start position:0%
to check invariants a properly
functioning<00:12:35.810><c> code</c><00:12:36.320><c> should</c><00:12:36.650><c> never</c><00:12:36.980><c> reach</c><00:12:37.520><c> a</c>

00:12:37.690 --> 00:12:37.700 align:start position:0%
functioning code should never reach a
 

00:12:37.700 --> 00:12:39.280 align:start position:0%
functioning code should never reach a
fail<00:12:37.910><c> in</c><00:12:38.060><c> a</c><00:12:38.120><c> search</c><00:12:38.330><c> statement</c><00:12:38.870><c> and</c><00:12:38.990><c> this</c><00:12:39.140><c> is</c>

00:12:39.280 --> 00:12:39.290 align:start position:0%
fail in a search statement and this is
 

00:12:39.290 --> 00:12:41.230 align:start position:0%
fail in a search statement and this is
really<00:12:39.530><c> important</c><00:12:39.920><c> if</c><00:12:40.250><c> this</c><00:12:40.670><c> happens</c><00:12:41.060><c> there's</c>

00:12:41.230 --> 00:12:41.240 align:start position:0%
really important if this happens there's
 

00:12:41.240 --> 00:12:43.030 align:start position:0%
really important if this happens there's
a<00:12:41.300><c> bug</c><00:12:41.600><c> in</c><00:12:41.630><c> our</c><00:12:41.840><c> contract</c><00:12:42.350><c> which</c><00:12:42.740><c> you</c><00:12:42.860><c> should</c>

00:12:43.030 --> 00:12:43.040 align:start position:0%
a bug in our contract which you should
 

00:12:43.040 --> 00:12:46.660 align:start position:0%
a bug in our contract which you should
fix<00:12:43.780><c> same</c><00:12:44.780><c> example</c><00:12:45.290><c> now</c><00:12:45.830><c> just</c><00:12:46.160><c> using</c><00:12:46.310><c> asserts</c>

00:12:46.660 --> 00:12:46.670 align:start position:0%
fix same example now just using asserts
 

00:12:46.670 --> 00:12:48.400 align:start position:0%
fix same example now just using asserts
everywhere

00:12:48.400 --> 00:12:48.410 align:start position:0%
everywhere
 

00:12:48.410 --> 00:12:50.770 align:start position:0%
everywhere
can<00:12:49.280><c> we</c><00:12:49.400><c> assert</c><00:12:49.700><c> a</c><00:12:49.940><c> equals</c><00:12:50.240><c> zero</c><00:12:50.390><c> over</c><00:12:50.630><c> there</c>

00:12:50.770 --> 00:12:50.780 align:start position:0%
can we assert a equals zero over there
 

00:12:50.780 --> 00:12:54.040 align:start position:0%
can we assert a equals zero over there
very<00:12:51.760><c> likely</c><00:12:52.760><c> not</c><00:12:52.910><c> right</c><00:12:53.330><c> of</c><00:12:53.630><c> course</c><00:12:53.960><c> it</c>

00:12:54.040 --> 00:12:54.050 align:start position:0%
very likely not right of course it
 

00:12:54.050 --> 00:12:56.260 align:start position:0%
very likely not right of course it
depends<00:12:54.320><c> on</c><00:12:54.470><c> what</c><00:12:54.800><c> what</c><00:12:55.220><c> G</c><00:12:55.460><c> and</c><00:12:55.580><c> H</c><00:12:55.760><c> are</c><00:12:56.000><c> doing</c>

00:12:56.260 --> 00:12:56.270 align:start position:0%
depends on what what G and H are doing
 

00:12:56.270 --> 00:12:58.720 align:start position:0%
depends on what what G and H are doing
but<00:12:56.900><c> if</c><00:12:57.470><c> we</c><00:12:57.800><c> don't</c><00:12:58.010><c> really</c><00:12:58.220><c> know</c><00:12:58.430><c> what</c><00:12:58.610><c> it's</c>

00:12:58.720 --> 00:12:58.730 align:start position:0%
but if we don't really know what it's
 

00:12:58.730 --> 00:12:59.400 align:start position:0%
but if we don't really know what it's
doing

00:12:59.400 --> 00:12:59.410 align:start position:0%
doing
 

00:12:59.410 --> 00:13:02.560 align:start position:0%
doing
we<00:13:00.410><c> cannot</c><00:13:00.650><c> say</c><00:13:00.890><c> assert</c><00:13:01.220><c> a</c><00:13:01.490><c> equals</c><00:13:02.150><c> a</c><00:13:02.270><c> because</c>

00:13:02.560 --> 00:13:02.570 align:start position:0%
we cannot say assert a equals a because
 

00:13:02.570 --> 00:13:04.140 align:start position:0%
we cannot say assert a equals a because
they<00:13:02.720><c> can</c><00:13:02.900><c> be</c><00:13:03.020><c> whatever</c><00:13:03.290><c> right</c><00:13:03.680><c> and</c>

00:13:04.140 --> 00:13:04.150 align:start position:0%
they can be whatever right and
 

00:13:04.150 --> 00:13:07.060 align:start position:0%
they can be whatever right and
especially<00:13:05.150><c> for</c><00:13:05.750><c> ax</c><00:13:05.990><c> here</c><00:13:06.380><c> if</c><00:13:06.470><c> you</c><00:13:06.560><c> say</c><00:13:06.710><c> assert</c>

00:13:07.060 --> 00:13:07.070 align:start position:0%
especially for ax here if you say assert
 

00:13:07.070 --> 00:13:09.430 align:start position:0%
especially for ax here if you say assert
ax<00:13:07.340><c> less</c><00:13:07.580><c> than</c><00:13:07.730><c> 100</c><00:13:08.150><c> it's</c><00:13:08.840><c> a</c><00:13:08.990><c> public</c><00:13:09.290><c> function</c>

00:13:09.430 --> 00:13:09.440 align:start position:0%
ax less than 100 it's a public function
 

00:13:09.440 --> 00:13:12.220 align:start position:0%
ax less than 100 it's a public function
so<00:13:09.890><c> anyone</c><00:13:10.490><c> can</c><00:13:11.090><c> call</c><00:13:11.270><c> this</c><00:13:11.420><c> function</c><00:13:11.660><c> with</c><00:13:11.990><c> x</c>

00:13:12.220 --> 00:13:12.230 align:start position:0%
so anyone can call this function with x
 

00:13:12.230 --> 00:13:14.770 align:start position:0%
so anyone can call this function with x
equals<00:13:12.800><c> to</c><00:13:12.950><c> a</c><00:13:12.980><c> hundred</c><00:13:13.430><c> and</c><00:13:13.640><c> your</c><00:13:14.360><c> assertions</c>

00:13:14.770 --> 00:13:14.780 align:start position:0%
equals to a hundred and your assertions
 

00:13:14.780 --> 00:13:17.080 align:start position:0%
equals to a hundred and your assertions
already<00:13:15.050><c> wrong</c><00:13:15.230><c> right</c><00:13:16.190><c> so</c><00:13:16.640><c> this</c><00:13:16.760><c> is</c><00:13:16.880><c> really</c>

00:13:17.080 --> 00:13:17.090 align:start position:0%
already wrong right so this is really
 

00:13:17.090 --> 00:13:18.370 align:start position:0%
already wrong right so this is really
important<00:13:17.420><c> to</c><00:13:17.480><c> notice</c><00:13:17.750><c> like</c><00:13:17.960><c> you</c><00:13:18.050><c> should</c><00:13:18.200><c> only</c>

00:13:18.370 --> 00:13:18.380 align:start position:0%
important to notice like you should only
 

00:13:18.380 --> 00:13:21.120 align:start position:0%
important to notice like you should only
assert<00:13:18.800><c> things</c><00:13:19.190><c> that</c><00:13:20.120><c> you're</c><00:13:20.540><c> really</c>

00:13:21.120 --> 00:13:21.130 align:start position:0%
assert things that you're really
 

00:13:21.130 --> 00:13:24.540 align:start position:0%
assert things that you're really
are<00:13:21.430><c> true</c><00:13:21.880><c> at</c><00:13:22.150><c> that</c><00:13:22.300><c> moment</c><00:13:22.750><c> for</c><00:13:23.200><c> every</c><00:13:24.100><c> single</c>

00:13:24.540 --> 00:13:24.550 align:start position:0%
are true at that moment for every single
 

00:13:24.550 --> 00:13:29.180 align:start position:0%
are true at that moment for every single
execution<00:13:24.970><c> path</c><00:13:25.360><c> that</c><00:13:25.900><c> rich</c><00:13:26.200><c> is</c><00:13:26.470><c> that</c><00:13:26.500><c> point</c>

00:13:29.180 --> 00:13:29.190 align:start position:0%
 
 

00:13:29.190 --> 00:13:32.670 align:start position:0%
 
and<00:13:30.190><c> here</c><00:13:30.840><c> the</c><00:13:31.840><c> assertion</c><00:13:32.110><c> is</c><00:13:32.170><c> correctly</c>

00:13:32.670 --> 00:13:32.680 align:start position:0%
and here the assertion is correctly
 

00:13:32.680 --> 00:13:33.990 align:start position:0%
and here the assertion is correctly
placed<00:13:33.010><c> at</c><00:13:33.190><c> the</c><00:13:33.280><c> end</c><00:13:33.400><c> because</c><00:13:33.790><c> the</c><00:13:33.910><c> new</c>

00:13:33.990 --> 00:13:34.000 align:start position:0%
placed at the end because the new
 

00:13:34.000 --> 00:13:48.360 align:start position:0%
placed at the end because the new
property<00:13:34.360><c> are</c><00:13:34.450><c> proven</c><00:13:34.920><c> yeah</c><00:13:46.740><c> yeah</c><00:13:47.740><c> this</c>

00:13:48.360 --> 00:13:48.370 align:start position:0%
property are proven yeah yeah this
 

00:13:48.370 --> 00:13:50.490 align:start position:0%
property are proven yeah yeah this
moment<00:13:48.760><c> yeah</c><00:13:48.940><c> so</c><00:13:49.240><c> for</c><00:13:49.510><c> example</c><00:13:49.780><c> we</c><00:13:49.870><c> have</c><00:13:50.140><c> I'm</c>

00:13:50.490 --> 00:13:50.500 align:start position:0%
moment yeah so for example we have I'm
 

00:13:50.500 --> 00:13:53.520 align:start position:0%
moment yeah so for example we have I'm
gonna<00:13:50.770><c> talk</c><00:13:50.950><c> about</c><00:13:51.160><c> this</c><00:13:51.280><c> later</c><00:13:51.940><c> but</c><00:13:52.200><c> if</c><00:13:53.200><c> you</c>

00:13:53.520 --> 00:13:53.530 align:start position:0%
gonna talk about this later but if you
 

00:13:53.530 --> 00:13:55.200 align:start position:0%
gonna talk about this later but if you
call<00:13:54.190><c> an</c><00:13:54.340><c> external</c><00:13:54.520><c> function</c><00:13:54.880><c> for</c><00:13:55.180><c> example</c>

00:13:55.200 --> 00:13:55.210 align:start position:0%
call an external function for example
 

00:13:55.210 --> 00:13:57.150 align:start position:0%
call an external function for example
which<00:13:55.600><c> don't</c><00:13:55.810><c> have</c><00:13:55.960><c> control</c><00:13:56.470><c> over</c><00:13:56.560><c> or</c><00:13:56.950><c> they</c>

00:13:57.150 --> 00:13:57.160 align:start position:0%
which don't have control over or they
 

00:13:57.160 --> 00:13:59.190 align:start position:0%
which don't have control over or they
know<00:13:57.280><c> the</c><00:13:57.400><c> code</c><00:13:57.580><c> then</c><00:13:58.240><c> when</c><00:13:58.660><c> a</c><00:13:58.690><c> function</c><00:13:59.020><c> comes</c>

00:13:59.190 --> 00:13:59.200 align:start position:0%
know the code then when a function comes
 

00:13:59.200 --> 00:14:01.560 align:start position:0%
know the code then when a function comes
back<00:13:59.440><c> we</c><00:13:59.650><c> have</c><00:13:59.800><c> to</c><00:14:00.040><c> reset</c><00:14:00.430><c> all</c><00:14:00.880><c> knowledge</c>

00:14:01.560 --> 00:14:01.570 align:start position:0%
back we have to reset all knowledge
 

00:14:01.570 --> 00:14:03.510 align:start position:0%
back we have to reset all knowledge
about<00:14:01.750><c> state</c><00:14:01.960><c> variables</c><00:14:02.350><c> right</c><00:14:02.680><c> because</c><00:14:03.040><c> you</c>

00:14:03.510 --> 00:14:03.520 align:start position:0%
about state variables right because you
 

00:14:03.520 --> 00:14:06.180 align:start position:0%
about state variables right because you
might<00:14:03.700><c> have</c><00:14:04.080><c> this</c><00:14:05.080><c> contractor</c><00:14:05.680><c> called</c><00:14:05.890><c> might</c>

00:14:06.180 --> 00:14:06.190 align:start position:0%
might have this contractor called might
 

00:14:06.190 --> 00:14:07.770 align:start position:0%
might have this contractor called might
have<00:14:06.400><c> called</c><00:14:06.610><c> your</c><00:14:06.730><c> contract</c><00:14:07.120><c> back</c><00:14:07.300><c> which</c>

00:14:07.770 --> 00:14:07.780 align:start position:0%
have called your contract back which
 

00:14:07.780 --> 00:14:09.660 align:start position:0%
have called your contract back which
changed<00:14:08.140><c> a</c><00:14:08.350><c> so</c><00:14:08.920><c> you</c><00:14:08.980><c> can't</c><00:14:09.160><c> really</c><00:14:09.400><c> keep</c><00:14:09.520><c> the</c>

00:14:09.660 --> 00:14:09.670 align:start position:0%
changed a so you can't really keep the
 

00:14:09.670 --> 00:14:10.820 align:start position:0%
changed a so you can't really keep the
knowledge<00:14:09.940><c> about</c><00:14:10.150><c> it</c>

00:14:10.820 --> 00:14:10.830 align:start position:0%
knowledge about it
 

00:14:10.830 --> 00:14:14.850 align:start position:0%
knowledge about it
but<00:14:11.830><c> yeah</c><00:14:12.700><c> but</c><00:14:12.850><c> modular</c><00:14:13.240><c> verification</c><00:14:13.750><c> one</c><00:14:14.740><c> of</c>

00:14:14.850 --> 00:14:14.860 align:start position:0%
but yeah but modular verification one of
 

00:14:14.860 --> 00:14:16.260 align:start position:0%
but yeah but modular verification one of
the<00:14:14.950><c> research</c><00:14:15.220><c> goals</c><00:14:15.460><c> that</c><00:14:15.580><c> we</c><00:14:15.730><c> have</c><00:14:15.910><c> is</c><00:14:16.210><c> to</c>

00:14:16.260 --> 00:14:16.270 align:start position:0%
the research goals that we have is to
 

00:14:16.270 --> 00:14:18.540 align:start position:0%
the research goals that we have is to
actually<00:14:16.660><c> infer</c><00:14:17.200><c> properties</c><00:14:17.230><c> from</c><00:14:17.920><c> different</c>

00:14:18.540 --> 00:14:18.550 align:start position:0%
actually infer properties from different
 

00:14:18.550 --> 00:14:21.480 align:start position:0%
actually infer properties from different
functions<00:14:18.970><c> and</c><00:14:19.180><c> see</c><00:14:19.660><c> what</c><00:14:19.980><c> state</c><00:14:20.980><c> invariants</c>

00:14:21.480 --> 00:14:21.490 align:start position:0%
functions and see what state invariants
 

00:14:21.490 --> 00:14:22.830 align:start position:0%
functions and see what state invariants
we<00:14:21.550><c> can</c><00:14:21.700><c> come</c><00:14:21.850><c> up</c><00:14:21.880><c> with</c><00:14:22.000><c> automatically</c><00:14:22.690><c> this</c>

00:14:22.830 --> 00:14:22.840 align:start position:0%
we can come up with automatically this
 

00:14:22.840 --> 00:14:25.050 align:start position:0%
we can come up with automatically this
is<00:14:22.900><c> not</c><00:14:23.080><c> done</c><00:14:23.350><c> yet</c><00:14:23.530><c> but</c><00:14:23.800><c> it's</c><00:14:24.190><c> under</c><00:14:24.550><c> to</c><00:14:24.940><c> do</c>

00:14:25.050 --> 00:14:25.060 align:start position:0%
is not done yet but it's under to do
 

00:14:25.060 --> 00:14:29.010 align:start position:0%
is not done yet but it's under to do
list<00:14:26.940><c> what</c><00:14:27.940><c> about</c><00:14:28.030><c> false</c><00:14:28.420><c> positives</c><00:14:28.600><c> so</c><00:14:28.930><c> I</c>

00:14:29.010 --> 00:14:29.020 align:start position:0%
list what about false positives so I
 

00:14:29.020 --> 00:14:31.620 align:start position:0%
list what about false positives so I
mentioned<00:14:29.350><c> earlier</c><00:14:29.620><c> that</c><00:14:30.150><c> the</c><00:14:31.150><c> approach</c><00:14:31.420><c> is</c>

00:14:31.620 --> 00:14:31.630 align:start position:0%
mentioned earlier that the approach is
 

00:14:31.630 --> 00:14:34.740 align:start position:0%
mentioned earlier that the approach is
sound<00:14:31.870><c> so</c><00:14:32.650><c> if</c><00:14:32.950><c> it's</c><00:14:33.100><c> a</c><00:14:33.190><c> safe</c><00:14:33.520><c> it's</c><00:14:33.730><c> safe</c><00:14:33.940><c> but</c><00:14:34.600><c> it</c>

00:14:34.740 --> 00:14:34.750 align:start position:0%
sound so if it's a safe it's safe but it
 

00:14:34.750 --> 00:14:36.390 align:start position:0%
sound so if it's a safe it's safe but it
gives<00:14:34.900><c> count</c><00:14:35.170><c> it</c><00:14:35.350><c> gives</c><00:14:35.530><c> false</c><00:14:35.860><c> positives</c>

00:14:36.390 --> 00:14:36.400 align:start position:0%
gives count it gives false positives
 

00:14:36.400 --> 00:14:39.030 align:start position:0%
gives count it gives false positives
which<00:14:37.240><c> is</c><00:14:37.480><c> basically</c><00:14:38.440><c> false</c><00:14:38.770><c> counter</c>

00:14:39.030 --> 00:14:39.040 align:start position:0%
which is basically false counter
 

00:14:39.040 --> 00:14:40.860 align:start position:0%
which is basically false counter
examples<00:14:39.460><c> so</c><00:14:39.670><c> your</c><00:14:40.060><c> assertion</c><00:14:40.480><c> might</c><00:14:40.660><c> be</c>

00:14:40.860 --> 00:14:40.870 align:start position:0%
examples so your assertion might be
 

00:14:40.870 --> 00:14:43.530 align:start position:0%
examples so your assertion might be
correct<00:14:41.590><c> and</c><00:14:41.830><c> safe</c><00:14:42.010><c> by</c><00:14:42.760><c> the</c><00:14:42.820><c> tool</c><00:14:43.090><c> says</c><00:14:43.330><c> it's</c>

00:14:43.530 --> 00:14:43.540 align:start position:0%
correct and safe by the tool says it's
 

00:14:43.540 --> 00:14:46.410 align:start position:0%
correct and safe by the tool says it's
not<00:14:43.660><c> safe</c><00:14:43.720><c> why</c><00:14:44.650><c> does</c><00:14:44.830><c> that</c><00:14:44.860><c> happen</c><00:14:45.190><c> it</c><00:14:45.970><c> happens</c>

00:14:46.410 --> 00:14:46.420 align:start position:0%
not safe why does that happen it happens
 

00:14:46.420 --> 00:14:49.170 align:start position:0%
not safe why does that happen it happens
because<00:14:46.570><c> we</c><00:14:47.140><c> have</c><00:14:47.290><c> to</c><00:14:47.410><c> abstract</c><00:14:47.890><c> the</c><00:14:48.790><c> encoding</c>

00:14:49.170 --> 00:14:49.180 align:start position:0%
because we have to abstract the encoding
 

00:14:49.180 --> 00:14:50.940 align:start position:0%
because we have to abstract the encoding
sometimes<00:14:49.600><c> so</c><00:14:49.990><c> for</c><00:14:50.140><c> example</c><00:14:50.470><c> for</c><00:14:50.620><c> complex</c>

00:14:50.940 --> 00:14:50.950 align:start position:0%
sometimes so for example for complex
 

00:14:50.950 --> 00:14:53.520 align:start position:0%
sometimes so for example for complex
types<00:14:51.280><c> and</c><00:14:51.610><c> functions</c><00:14:52.480><c> say</c><00:14:53.380><c> like</c>

00:14:53.520 --> 00:14:53.530 align:start position:0%
types and functions say like
 

00:14:53.530 --> 00:14:57.090 align:start position:0%
types and functions say like
cryptographic<00:14:53.800><c> Elections</c><00:14:54.550><c> we</c><00:14:55.390><c> it's</c><00:14:56.380><c> not</c><00:14:56.530><c> our</c>

00:14:57.090 --> 00:14:57.100 align:start position:0%
cryptographic Elections we it's not our
 

00:14:57.100 --> 00:14:58.440 align:start position:0%
cryptographic Elections we it's not our
approach<00:14:57.430><c> not</c><00:14:57.640><c> expressive</c><00:14:58.060><c> enough</c><00:14:58.150><c> to</c>

00:14:58.440 --> 00:14:58.450 align:start position:0%
approach not expressive enough to
 

00:14:58.450 --> 00:15:00.330 align:start position:0%
approach not expressive enough to
actually<00:14:58.600><c> implement</c><00:14:59.050><c> it</c><00:14:59.260><c> so</c><00:14:59.470><c> we</c><00:14:59.860><c> have</c><00:15:00.040><c> to</c><00:15:00.220><c> use</c>

00:15:00.330 --> 00:15:00.340 align:start position:0%
actually implement it so we have to use
 

00:15:00.340 --> 00:15:04.740 align:start position:0%
actually implement it so we have to use
symbolic<00:15:01.060><c> variables</c><00:15:01.660><c> on</c><00:15:03.240><c> on</c><00:15:04.240><c> the</c><00:15:04.360><c> application</c>

00:15:04.740 --> 00:15:04.750 align:start position:0%
symbolic variables on on the application
 

00:15:04.750 --> 00:15:06.690 align:start position:0%
symbolic variables on on the application
of<00:15:04.840><c> the</c><00:15:04.930><c> function</c><00:15:05.290><c> and</c><00:15:05.410><c> that's</c><00:15:05.860><c> as</c><00:15:06.070><c> far</c><00:15:06.310><c> as</c><00:15:06.550><c> it</c>

00:15:06.690 --> 00:15:06.700 align:start position:0%
of the function and that's as far as it
 

00:15:06.700 --> 00:15:09.510 align:start position:0%
of the function and that's as far as it
gets<00:15:07.230><c> so</c><00:15:08.230><c> we</c><00:15:08.410><c> don't</c><00:15:08.590><c> really</c><00:15:08.710><c> know</c><00:15:08.980><c> what</c><00:15:09.250><c> the</c>

00:15:09.510 --> 00:15:09.520 align:start position:0%
gets so we don't really know what the
 

00:15:09.520 --> 00:15:11.820 align:start position:0%
gets so we don't really know what the
actual<00:15:09.940><c> value</c><00:15:10.210><c> of</c><00:15:10.510><c> the</c><00:15:11.080><c> function</c><00:15:11.260><c> call</c><00:15:11.680><c> is</c>

00:15:11.820 --> 00:15:11.830 align:start position:0%
actual value of the function call is
 

00:15:11.830 --> 00:15:13.800 align:start position:0%
actual value of the function call is
going<00:15:11.980><c> to</c><00:15:12.040><c> be</c><00:15:12.190><c> so</c><00:15:13.060><c> in</c><00:15:13.180><c> these</c><00:15:13.360><c> abstractions</c>

00:15:13.800 --> 00:15:13.810 align:start position:0%
going to be so in these abstractions
 

00:15:13.810 --> 00:15:15.930 align:start position:0%
going to be so in these abstractions
might<00:15:14.140><c> lead</c><00:15:14.320><c> to</c><00:15:14.350><c> false</c><00:15:14.620><c> positives</c><00:15:14.790><c> also</c><00:15:15.790><c> if</c>

00:15:15.930 --> 00:15:15.940 align:start position:0%
might lead to false positives also if
 

00:15:15.940 --> 00:15:17.940 align:start position:0%
might lead to false positives also if
you<00:15:16.060><c> call</c><00:15:16.270><c> external</c><00:15:16.900><c> function</c><00:15:17.170><c> if</c><00:15:17.290><c> you</c><00:15:17.320><c> do</c><00:15:17.500><c> if</c>

00:15:17.940 --> 00:15:17.950 align:start position:0%
you call external function if you do if
 

00:15:17.950 --> 00:15:22.260 align:start position:0%
you call external function if you do if
you<00:15:18.280><c> yeah</c><00:15:18.850><c> I</c><00:15:18.880><c> call</c><00:15:19.480><c> external</c><00:15:20.470><c> functions</c><00:15:21.270><c> we</c>

00:15:22.260 --> 00:15:22.270 align:start position:0%
you yeah I call external functions we
 

00:15:22.270 --> 00:15:25.080 align:start position:0%
you yeah I call external functions we
might<00:15:22.510><c> have</c><00:15:22.720><c> you</c><00:15:23.020><c> we</c><00:15:23.980><c> do</c><00:15:24.250><c> clear</c><00:15:24.580><c> the</c><00:15:24.760><c> knowledge</c>

00:15:25.080 --> 00:15:25.090 align:start position:0%
might have you we do clear the knowledge
 

00:15:25.090 --> 00:15:28.880 align:start position:0%
might have you we do clear the knowledge
after<00:15:25.570><c> the</c><00:15:26.080><c> call</c><00:15:26.290><c> after</c><00:15:26.740><c> a</c><00:15:27.370><c> function</c><00:15:27.670><c> call</c><00:15:27.850><c> so</c>

00:15:28.880 --> 00:15:28.890 align:start position:0%
after the call after a function call so
 

00:15:28.890 --> 00:15:31.829 align:start position:0%
after the call after a function call so
it<00:15:29.890><c> might</c><00:15:30.190><c> not</c><00:15:30.550><c> have</c><00:15:30.910><c> been</c><00:15:30.940><c> the</c><00:15:31.270><c> case</c><00:15:31.450><c> that</c><00:15:31.780><c> the</c>

00:15:31.829 --> 00:15:31.839 align:start position:0%
it might not have been the case that the
 

00:15:31.839 --> 00:15:34.720 align:start position:0%
it might not have been the case that the
that<00:15:32.440><c> state</c><00:15:33.100><c> variable</c><00:15:33.460><c> a</c><00:15:33.610><c> got</c><00:15:33.970><c> rewritten</c>

00:15:34.720 --> 00:15:34.730 align:start position:0%
that state variable a got rewritten
 

00:15:34.730 --> 00:15:37.600 align:start position:0%
that state variable a got rewritten
but<00:15:35.449><c> you</c><00:15:35.839><c> never</c><00:15:35.959><c> know</c><00:15:36.230><c> so</c><00:15:36.260><c> to</c><00:15:36.589><c> be</c><00:15:36.920><c> safe</c><00:15:37.160><c> again</c>

00:15:37.600 --> 00:15:37.610 align:start position:0%
but you never know so to be safe again
 

00:15:37.610 --> 00:15:40.240 align:start position:0%
but you never know so to be safe again
we<00:15:37.970><c> have</c><00:15:38.149><c> to</c><00:15:38.420><c> clear</c><00:15:38.750><c> the</c><00:15:38.839><c> knowledge</c><00:15:39.110><c> also</c><00:15:39.920><c> the</c>

00:15:40.240 --> 00:15:40.250 align:start position:0%
we have to clear the knowledge also the
 

00:15:40.250 --> 00:15:42.040 align:start position:0%
we have to clear the knowledge also the
contract<00:15:40.610><c> state</c><00:15:40.760><c> invariants</c><00:15:41.269><c> you</c><00:15:41.779><c> as</c><00:15:41.959><c> the</c>

00:15:42.040 --> 00:15:42.050 align:start position:0%
contract state invariants you as the
 

00:15:42.050 --> 00:15:43.990 align:start position:0%
contract state invariants you as the
developer<00:15:42.470><c> of</c><00:15:42.500><c> the</c><00:15:42.680><c> contract</c><00:15:43.100><c> might</c><00:15:43.639><c> know</c>

00:15:43.990 --> 00:15:44.000 align:start position:0%
developer of the contract might know
 

00:15:44.000 --> 00:15:45.790 align:start position:0%
developer of the contract might know
that<00:15:44.420><c> certain</c><00:15:44.779><c> properties</c><00:15:45.170><c> are</c><00:15:45.350><c> valid</c>

00:15:45.790 --> 00:15:45.800 align:start position:0%
that certain properties are valid
 

00:15:45.800 --> 00:15:47.889 align:start position:0%
that certain properties are valid
throughout<00:15:46.010><c> your</c><00:15:46.190><c> contract</c><00:15:46.639><c> but</c><00:15:47.329><c> the</c><00:15:47.570><c> SMT</c>

00:15:47.889 --> 00:15:47.899 align:start position:0%
throughout your contract but the SMT
 

00:15:47.899 --> 00:15:50.939 align:start position:0%
throughout your contract but the SMT
checker<00:15:48.110><c> is</c><00:15:48.230><c> not</c><00:15:48.410><c> yet</c><00:15:49.279><c> smart</c><00:15:49.940><c> enough</c><00:15:50.180><c> to</c>

00:15:50.939 --> 00:15:50.949 align:start position:0%
checker is not yet smart enough to
 

00:15:50.949 --> 00:15:55.800 align:start position:0%
checker is not yet smart enough to
deduce<00:15:51.949><c> those</c><00:15:52.220><c> properties</c><00:15:52.610><c> automatically</c><00:15:53.120><c> so</c>

00:15:55.800 --> 00:15:55.810 align:start position:0%
 
 

00:15:55.810 --> 00:15:58.750 align:start position:0%
 
and<00:15:56.810><c> one</c><00:15:57.500><c> point</c><00:15:57.740><c> that</c><00:15:57.829><c> I</c><00:15:57.889><c> wanted</c><00:15:58.220><c> to</c><00:15:58.279><c> mention</c>

00:15:58.750 --> 00:15:58.760 align:start position:0%
and one point that I wanted to mention
 

00:15:58.760 --> 00:16:00.670 align:start position:0%
and one point that I wanted to mention
in<00:15:59.120><c> this</c><00:15:59.240><c> talk</c><00:15:59.449><c> is</c><00:15:59.720><c> you</c><00:15:59.779><c> can</c><00:16:00.170><c> actually</c><00:16:00.380><c> help</c>

00:16:00.670 --> 00:16:00.680 align:start position:0%
in this talk is you can actually help
 

00:16:00.680 --> 00:16:03.639 align:start position:0%
in this talk is you can actually help
the<00:16:00.920><c> SMT</c><00:16:01.310><c> checker</c><00:16:01.519><c> you</c><00:16:01.670><c> can</c><00:16:01.820><c> help</c><00:16:02.029><c> the</c><00:16:02.720><c> tool</c><00:16:02.930><c> to</c>

00:16:03.639 --> 00:16:03.649 align:start position:0%
the SMT checker you can help the tool to
 

00:16:03.649 --> 00:16:06.519 align:start position:0%
the SMT checker you can help the tool to
actually<00:16:04.220><c> find</c><00:16:04.459><c> it</c><00:16:04.610><c> proofs</c><00:16:04.820><c> and</c><00:16:05.199><c> it's</c><00:16:06.199><c> a</c><00:16:06.320><c> very</c>

00:16:06.519 --> 00:16:06.529 align:start position:0%
actually find it proofs and it's a very
 

00:16:06.529 --> 00:16:10.150 align:start position:0%
actually find it proofs and it's a very
simple<00:16:06.800><c> way</c><00:16:07.040><c> to</c><00:16:07.070><c> do</c><00:16:07.370><c> it</c><00:16:07.550><c> you</c><00:16:08.240><c> can</c><00:16:09.040><c> flood</c><00:16:10.040><c> your</c>

00:16:10.150 --> 00:16:10.160 align:start position:0%
simple way to do it you can flood your
 

00:16:10.160 --> 00:16:12.720 align:start position:0%
simple way to do it you can flood your
code<00:16:10.399><c> with</c><00:16:10.550><c> requires</c><00:16:10.899><c> so</c><00:16:11.899><c> every</c><00:16:12.170><c> assumption</c>

00:16:12.720 --> 00:16:12.730 align:start position:0%
code with requires so every assumption
 

00:16:12.730 --> 00:16:16.120 align:start position:0%
code with requires so every assumption
even<00:16:13.730><c> very</c><00:16:14.720><c> simple</c><00:16:14.899><c> things</c><00:16:15.320><c> that</c><00:16:15.589><c> you</c><00:16:15.860><c> know</c>

00:16:16.120 --> 00:16:16.130 align:start position:0%
even very simple things that you know
 

00:16:16.130 --> 00:16:20.470 align:start position:0%
even very simple things that you know
are<00:16:16.339><c> true</c><00:16:16.370><c> at</c><00:16:16.880><c> that</c><00:16:17.329><c> point</c><00:16:18.519><c> even</c><00:16:19.519><c> if</c><00:16:19.940><c> it's</c><00:16:20.180><c> if</c>

00:16:20.470 --> 00:16:20.480 align:start position:0%
are true at that point even if it's if
 

00:16:20.480 --> 00:16:22.329 align:start position:0%
are true at that point even if it's if
even<00:16:20.870><c> if</c><00:16:20.959><c> it</c><00:16:21.079><c> might</c><00:16:21.290><c> sound</c><00:16:21.560><c> redundant</c><00:16:22.070><c> to</c><00:16:22.220><c> you</c>

00:16:22.329 --> 00:16:22.339 align:start position:0%
even if it might sound redundant to you
 

00:16:22.339 --> 00:16:24.910 align:start position:0%
even if it might sound redundant to you
it<00:16:22.790><c> might</c><00:16:23.120><c> help</c><00:16:23.329><c> the</c><00:16:23.510><c> solver</c><00:16:23.839><c> because</c><00:16:24.199><c> the</c>

00:16:24.910 --> 00:16:24.920 align:start position:0%
it might help the solver because the
 

00:16:24.920 --> 00:16:27.069 align:start position:0%
it might help the solver because the
more<00:16:25.130><c> constrained</c><00:16:25.730><c> to</c><00:16:25.910><c> give</c><00:16:26.120><c> the</c><00:16:26.510><c> last</c><00:16:26.690><c> false</c>

00:16:27.069 --> 00:16:27.079 align:start position:0%
more constrained to give the last false
 

00:16:27.079 --> 00:16:29.379 align:start position:0%
more constrained to give the last false
positives<00:16:27.620><c> the</c><00:16:28.459><c> tool</c><00:16:28.639><c> is</c><00:16:28.730><c> gonna</c><00:16:28.910><c> it's</c><00:16:29.300><c> gonna</c>

00:16:29.379 --> 00:16:29.389 align:start position:0%
positives the tool is gonna it's gonna
 

00:16:29.389 --> 00:16:32.800 align:start position:0%
positives the tool is gonna it's gonna
issue<00:16:29.709><c> so</c><00:16:30.790><c> I'm</c><00:16:31.790><c> gonna</c><00:16:31.940><c> run</c><00:16:32.240><c> a</c><00:16:32.449><c> couple</c><00:16:32.600><c> examples</c>

00:16:32.800 --> 00:16:32.810 align:start position:0%
issue so I'm gonna run a couple examples
 

00:16:32.810 --> 00:16:36.910 align:start position:0%
issue so I'm gonna run a couple examples
right<00:16:33.199><c> now</c><00:16:34.480><c> think</c><00:16:35.480><c> of</c><00:16:35.540><c> how</c><00:16:35.660><c> like</c><00:16:35.920><c> eight</c>

00:16:36.910 --> 00:16:36.920 align:start position:0%
right now think of how like eight
 

00:16:36.920 --> 00:16:49.310 align:start position:0%
right now think of how like eight
minutes

00:16:49.310 --> 00:16:49.320 align:start position:0%
 
 

00:16:49.320 --> 00:16:53.130 align:start position:0%
 
can<00:16:50.320><c> everyone</c><00:16:50.560><c> read</c><00:16:51.210><c> not</c><00:16:52.210><c> in</c><00:16:52.330><c> general</c><00:16:52.660><c> but</c>

00:16:53.130 --> 00:16:53.140 align:start position:0%
can everyone read not in general but
 

00:16:53.140 --> 00:17:04.860 align:start position:0%
can everyone read not in general but
screen<00:16:57.600><c> what</c><00:16:58.600><c> I</c><00:16:59.190><c> did</c><00:17:00.190><c> push</c><00:17:03.510><c> yeah</c><00:17:04.510><c> and</c><00:17:04.660><c> it</c><00:17:04.720><c> sorry</c>

00:17:04.860 --> 00:17:04.870 align:start position:0%
screen what I did push yeah and it sorry
 

00:17:04.870 --> 00:17:08.250 align:start position:0%
screen what I did push yeah and it sorry
this<00:17:05.140><c> one</c><00:17:05.470><c> like</c><00:17:06.360><c> okay</c><00:17:07.360><c> so</c><00:17:07.420><c> this</c><00:17:07.720><c> is</c><00:17:07.870><c> like</c><00:17:08.230><c> a</c>

00:17:08.250 --> 00:17:08.260 align:start position:0%
this one like okay so this is like a
 

00:17:08.260 --> 00:17:10.829 align:start position:0%
this one like okay so this is like a
very<00:17:08.439><c> tiny</c><00:17:08.709><c> token</c><00:17:09.130><c> and</c><00:17:09.280><c> not</c><00:17:10.150><c> very</c><00:17:10.360><c> interesting</c>

00:17:10.829 --> 00:17:10.839 align:start position:0%
very tiny token and not very interesting
 

00:17:10.839 --> 00:17:13.970 align:start position:0%
very tiny token and not very interesting
so<00:17:11.730><c> we</c><00:17:12.730><c> have</c><00:17:12.850><c> a</c><00:17:12.880><c> map</c><00:17:13.089><c> in</c><00:17:13.120><c> with</c><00:17:13.420><c> balance</c>

00:17:13.970 --> 00:17:13.980 align:start position:0%
so we have a map in with balance
 

00:17:13.980 --> 00:17:17.460 align:start position:0%
so we have a map in with balance
constructor<00:17:14.980><c> initializes</c><00:17:15.459><c> the</c><00:17:16.360><c> balance</c><00:17:17.290><c> of</c>

00:17:17.460 --> 00:17:17.470 align:start position:0%
constructor initializes the balance of
 

00:17:17.470 --> 00:17:18.630 align:start position:0%
constructor initializes the balance of
the<00:17:17.589><c> message</c><00:17:17.829><c> center</c><00:17:18.100><c> with</c><00:17:18.250><c> a</c><00:17:18.280><c> bunch</c><00:17:18.520><c> of</c>

00:17:18.630 --> 00:17:18.640 align:start position:0%
the message center with a bunch of
 

00:17:18.640 --> 00:17:23.549 align:start position:0%
the message center with a bunch of
tokens<00:17:18.819><c> and</c><00:17:21.660><c> accounts</c><00:17:22.660><c> can</c><00:17:22.780><c> transfer</c><00:17:23.170><c> tokens</c>

00:17:23.549 --> 00:17:23.559 align:start position:0%
tokens and accounts can transfer tokens
 

00:17:23.559 --> 00:17:25.439 align:start position:0%
tokens and accounts can transfer tokens
which<00:17:23.740><c> other</c><00:17:23.890><c> right</c><00:17:24.370><c> so</c><00:17:24.910><c> there</c><00:17:25.059><c> are</c><00:17:25.089><c> few</c><00:17:25.240><c> line</c>

00:17:25.439 --> 00:17:25.449 align:start position:0%
which other right so there are few line
 

00:17:25.449 --> 00:17:27.090 align:start position:0%
which other right so there are few line
a<00:17:25.480><c> few</c><00:17:25.750><c> extra</c><00:17:26.079><c> lines</c><00:17:26.260><c> in</c><00:17:26.559><c> this</c><00:17:26.650><c> piece</c><00:17:26.800><c> of</c><00:17:26.920><c> code</c>

00:17:27.090 --> 00:17:27.100 align:start position:0%
a few extra lines in this piece of code
 

00:17:27.100 --> 00:17:29.490 align:start position:0%
a few extra lines in this piece of code
right<00:17:27.250><c> compared</c><00:17:27.730><c> to</c><00:17:27.809><c> normal</c><00:17:28.840><c> token</c>

00:17:29.490 --> 00:17:29.500 align:start position:0%
right compared to normal token
 

00:17:29.500 --> 00:17:33.240 align:start position:0%
right compared to normal token
implementations<00:17:30.929><c> so</c><00:17:31.929><c> first</c><00:17:32.230><c> of</c><00:17:32.350><c> all</c><00:17:32.440><c> this</c><00:17:33.100><c> is</c>

00:17:33.240 --> 00:17:33.250 align:start position:0%
implementations so first of all this is
 

00:17:33.250 --> 00:17:35.400 align:start position:0%
implementations so first of all this is
a<00:17:33.280><c> normal</c><00:17:33.610><c> one</c><00:17:33.640><c> right</c><00:17:34.030><c> we</c><00:17:34.210><c> required</c><00:17:34.570><c> that</c><00:17:34.780><c> the</c>

00:17:35.400 --> 00:17:35.410 align:start position:0%
a normal one right we required that the
 

00:17:35.410 --> 00:17:38.250 align:start position:0%
a normal one right we required that the
message<00:17:35.710><c> sender</c><00:17:35.950><c> actually</c><00:17:36.520><c> has</c><00:17:36.960><c> the</c><00:17:37.960><c> amount</c>

00:17:38.250 --> 00:17:38.260 align:start position:0%
message sender actually has the amount
 

00:17:38.260 --> 00:17:40.740 align:start position:0%
message sender actually has the amount
in<00:17:38.620><c> their</c><00:17:39.250><c> balance</c><00:17:39.550><c> but</c><00:17:40.270><c> here</c><00:17:40.450><c> I'm</c><00:17:40.630><c> actually</c>

00:17:40.740 --> 00:17:40.750 align:start position:0%
in their balance but here I'm actually
 

00:17:40.750 --> 00:17:44.610 align:start position:0%
in their balance but here I'm actually
storing<00:17:41.350><c> the</c><00:17:41.500><c> old</c><00:17:41.730><c> values</c><00:17:43.110><c> for</c><00:17:44.110><c> the</c><00:17:44.170><c> balances</c>

00:17:44.610 --> 00:17:44.620 align:start position:0%
storing the old values for the balances
 

00:17:44.620 --> 00:17:46.980 align:start position:0%
storing the old values for the balances
for<00:17:44.860><c> the</c><00:17:44.920><c> person</c><00:17:45.640><c> sending</c><00:17:45.880><c> the</c><00:17:46.480><c> transaction</c>

00:17:46.980 --> 00:17:46.990 align:start position:0%
for the person sending the transaction
 

00:17:46.990 --> 00:17:49.260 align:start position:0%
for the person sending the transaction
and<00:17:47.110><c> the</c><00:17:47.170><c> person</c><00:17:47.500><c> receiving</c><00:17:47.800><c> and</c><00:17:48.130><c> yeah</c><00:17:49.090><c> the</c>

00:17:49.260 --> 00:17:49.270 align:start position:0%
and the person receiving and yeah the
 

00:17:49.270 --> 00:17:50.669 align:start position:0%
and the person receiving and yeah the
person<00:17:49.540><c> received</c><00:17:49.870><c> the</c><00:17:49.990><c> account</c><00:17:50.140><c> receiving</c>

00:17:50.669 --> 00:17:50.679 align:start position:0%
person received the account receiving
 

00:17:50.679 --> 00:17:53.970 align:start position:0%
person received the account receiving
the<00:17:50.920><c> amount</c><00:17:51.510><c> here</c><00:17:52.510><c> the</c><00:17:52.840><c> balances</c><00:17:53.500><c> are</c><00:17:53.559><c> updated</c>

00:17:53.970 --> 00:17:53.980 align:start position:0%
the amount here the balances are updated
 

00:17:53.980 --> 00:17:55.680 align:start position:0%
the amount here the balances are updated
right<00:17:54.190><c> and</c><00:17:54.490><c> here</c><00:17:55.030><c> we</c><00:17:55.090><c> have</c><00:17:55.210><c> an</c><00:17:55.300><c> assertion</c><00:17:55.540><c> that</c>

00:17:55.680 --> 00:17:55.690 align:start position:0%
right and here we have an assertion that
 

00:17:55.690 --> 00:17:58.950 align:start position:0%
right and here we have an assertion that
says<00:17:56.020><c> that</c><00:17:56.980><c> the</c><00:17:57.730><c> sum</c><00:17:58.000><c> of</c><00:17:58.030><c> the</c><00:17:58.210><c> balances</c><00:17:58.750><c> before</c>

00:17:58.950 --> 00:17:58.960 align:start position:0%
says that the sum of the balances before
 

00:17:58.960 --> 00:18:00.750 align:start position:0%
says that the sum of the balances before
the<00:17:59.320><c> transaction</c><00:17:59.830><c> before</c><00:17:59.980><c> the</c><00:18:00.340><c> operations</c>

00:18:00.750 --> 00:18:00.760 align:start position:0%
the transaction before the operations
 

00:18:00.760 --> 00:18:03.210 align:start position:0%
the transaction before the operations
have<00:18:01.300><c> to</c><00:18:01.450><c> be</c><00:18:01.540><c> equal</c><00:18:01.840><c> the</c><00:18:02.230><c> sum</c><00:18:02.410><c> of</c><00:18:02.470><c> the</c><00:18:02.770><c> balances</c>

00:18:03.210 --> 00:18:03.220 align:start position:0%
have to be equal the sum of the balances
 

00:18:03.220 --> 00:18:05.280 align:start position:0%
have to be equal the sum of the balances
after<00:18:03.580><c> the</c><00:18:03.670><c> operation</c><00:18:04.030><c> oh</c><00:18:04.179><c> sorry</c>

00:18:05.280 --> 00:18:05.290 align:start position:0%
after the operation oh sorry
 

00:18:05.290 --> 00:18:08.280 align:start position:0%
after the operation oh sorry
yeah<00:18:05.920><c> this</c><00:18:06.070><c> should</c><00:18:06.250><c> be</c><00:18:06.400><c> the</c><00:18:06.520><c> right</c><00:18:07.290><c> assertion</c>

00:18:08.280 --> 00:18:08.290 align:start position:0%
yeah this should be the right assertion
 

00:18:08.290 --> 00:18:13.919 align:start position:0%
yeah this should be the right assertion
but<00:18:08.410><c> I</c><00:18:08.470><c> want</c><00:18:08.650><c> it</c><00:18:08.740><c> to</c><00:18:08.800><c> break</c><00:18:08.950><c> so</c><00:18:12.450><c> okay</c><00:18:13.450><c> so</c><00:18:13.480><c> here</c>

00:18:13.919 --> 00:18:13.929 align:start position:0%
but I want it to break so okay so here
 

00:18:13.929 --> 00:18:16.470 align:start position:0%
but I want it to break so okay so here
the<00:18:14.110><c> tool</c><00:18:14.290><c> tell</c><00:18:14.770><c> the</c><00:18:15.010><c> compiler</c><00:18:15.220><c> tells</c><00:18:15.550><c> us</c><00:18:15.760><c> the</c>

00:18:16.470 --> 00:18:16.480 align:start position:0%
the tool tell the compiler tells us the
 

00:18:16.480 --> 00:18:19.140 align:start position:0%
the tool tell the compiler tells us the
assertion<00:18:16.870><c> is</c><00:18:16.900><c> broken</c><00:18:17.200><c> and</c><00:18:17.830><c> gives</c><00:18:18.700><c> a</c><00:18:18.850><c> bunch</c><00:18:19.030><c> of</c>

00:18:19.140 --> 00:18:19.150 align:start position:0%
assertion is broken and gives a bunch of
 

00:18:19.150 --> 00:18:22.799 align:start position:0%
assertion is broken and gives a bunch of
values<00:18:19.660><c> for</c><00:18:20.110><c> for</c><00:18:20.800><c> our</c><00:18:21.010><c> variables</c><00:18:21.880><c> right</c><00:18:22.179><c> so</c>

00:18:22.799 --> 00:18:22.809 align:start position:0%
values for for our variables right so
 

00:18:22.809 --> 00:18:24.120 align:start position:0%
values for for our variables right so
but<00:18:23.080><c> there's</c><00:18:23.260><c> something</c><00:18:23.559><c> weird</c><00:18:23.830><c> right</c><00:18:23.980><c> so</c>

00:18:24.120 --> 00:18:24.130 align:start position:0%
but there's something weird right so
 

00:18:24.130 --> 00:18:25.950 align:start position:0%
but there's something weird right so
it's<00:18:24.250><c> saying</c><00:18:24.490><c> that</c><00:18:24.640><c> it</c><00:18:24.970><c> gave</c><00:18:25.150><c> zero</c><00:18:25.450><c> to</c><00:18:25.630><c> both</c>

00:18:25.950 --> 00:18:25.960 align:start position:0%
it's saying that it gave zero to both
 

00:18:25.960 --> 00:18:28.740 align:start position:0%
it's saying that it gave zero to both
two<00:18:26.230><c> and</c><00:18:26.260><c> message</c><00:18:26.679><c> sender</c><00:18:27.040><c> which</c><00:18:27.790><c> commonly</c>

00:18:28.740 --> 00:18:28.750 align:start position:0%
two and message sender which commonly
 

00:18:28.750 --> 00:18:32.010 align:start position:0%
two and message sender which commonly
people<00:18:29.110><c> prevent</c><00:18:29.620><c> right</c><00:18:30.160><c> so</c><00:18:30.730><c> we</c><00:18:30.850><c> can</c><00:18:31.090><c> just</c><00:18:31.720><c> add</c>

00:18:32.010 --> 00:18:32.020 align:start position:0%
people prevent right so we can just add
 

00:18:32.020 --> 00:18:36.720 align:start position:0%
people prevent right so we can just add
that<00:18:32.320><c> here</c><00:18:33.090><c> I</c><00:18:34.090><c> want</c><00:18:34.630><c> message</c><00:18:35.050><c> sender</c><00:18:35.470><c> to</c><00:18:36.130><c> be</c><00:18:36.429><c> oh</c>

00:18:36.720 --> 00:18:36.730 align:start position:0%
that here I want message sender to be oh
 

00:18:36.730 --> 00:18:38.580 align:start position:0%
that here I want message sender to be oh
this<00:18:37.150><c> is</c><00:18:37.210><c> actually</c><00:18:37.450><c> gonna</c><00:18:37.600><c> work</c><00:18:37.809><c> so</c><00:18:38.110><c> I'm</c><00:18:38.410><c> just</c>

00:18:38.580 --> 00:18:38.590 align:start position:0%
this is actually gonna work so I'm just
 

00:18:38.590 --> 00:18:41.400 align:start position:0%
this is actually gonna work so I'm just
gonna<00:18:38.679><c> say</c><00:18:38.950><c> they</c><00:18:39.100><c> have</c><00:18:39.220><c> to</c><00:18:39.340><c> be</c><00:18:39.429><c> different</c><00:18:40.410><c> it's</c>

00:18:41.400 --> 00:18:41.410 align:start position:0%
gonna say they have to be different it's
 

00:18:41.410 --> 00:18:46.180 align:start position:0%
gonna say they have to be different it's
fine<00:18:41.620><c> if</c><00:18:41.740><c> there</c><00:18:41.860><c> is</c><00:18:41.920><c> zero</c>

00:18:46.180 --> 00:18:46.190 align:start position:0%
 
 

00:18:46.190 --> 00:18:48.850 align:start position:0%
 
so<00:18:46.820><c> okay</c><00:18:47.120><c> now</c><00:18:47.150><c> it</c><00:18:47.420><c> changed</c><00:18:47.780><c> right</c><00:18:47.960><c> so</c><00:18:48.260><c> two</c><00:18:48.320><c> and</c>

00:18:48.850 --> 00:18:48.860 align:start position:0%
so okay now it changed right so two and
 

00:18:48.860 --> 00:18:50.980 align:start position:0%
so okay now it changed right so two and
two<00:18:48.980><c> one</c><00:18:49.160><c> before</c><00:18:50.060><c> was</c><00:18:50.210><c> zero</c><00:18:50.390><c> mass</c><00:18:50.660><c> percentage</c>

00:18:50.980 --> 00:18:50.990 align:start position:0%
two one before was zero mass percentage
 

00:18:50.990 --> 00:18:52.120 align:start position:0%
two one before was zero mass percentage
to<00:18:51.110><c> zero</c><00:18:51.320><c> but</c><00:18:51.440><c> that's</c><00:18:51.590><c> fine</c><00:18:51.740><c> because</c><00:18:51.920><c> they're</c>

00:18:52.120 --> 00:18:52.130 align:start position:0%
to zero but that's fine because they're
 

00:18:52.130 --> 00:18:54.730 align:start position:0%
to zero but that's fine because they're
different<00:18:52.280><c> and</c><00:18:53.050><c> the</c><00:18:54.050><c> assertion</c><00:18:54.410><c> is</c><00:18:54.440><c> actually</c>

00:18:54.730 --> 00:18:54.740 align:start position:0%
different and the assertion is actually
 

00:18:54.740 --> 00:18:57.040 align:start position:0%
different and the assertion is actually
saying<00:18:55.010><c> that</c><00:18:55.130><c> the</c><00:18:55.220><c> balance</c><00:18:55.520><c> before</c><00:18:56.050><c> was</c>

00:18:57.040 --> 00:18:57.050 align:start position:0%
saying that the balance before was
 

00:18:57.050 --> 00:18:59.470 align:start position:0%
saying that the balance before was
greater<00:18:57.410><c> than</c><00:18:57.710><c> the</c><00:18:58.340><c> balance</c><00:18:58.850><c> right</c><00:18:59.060><c> now</c><00:18:59.270><c> which</c>

00:18:59.470 --> 00:18:59.480 align:start position:0%
greater than the balance right now which
 

00:18:59.480 --> 00:19:02.590 align:start position:0%
greater than the balance right now which
means<00:18:59.510><c> that</c><00:18:59.930><c> some</c><00:19:00.080><c> tokens</c><00:19:00.440><c> vanished</c><00:19:00.770><c> right</c><00:19:01.600><c> so</c>

00:19:02.590 --> 00:19:02.600 align:start position:0%
means that some tokens vanished right so
 

00:19:02.600 --> 00:19:04.330 align:start position:0%
means that some tokens vanished right so
the<00:19:02.900><c> assertion</c><00:19:03.080><c> is</c><00:19:03.260><c> basically</c><00:19:03.530><c> saying</c><00:19:03.830><c> every</c>

00:19:04.330 --> 00:19:04.340 align:start position:0%
the assertion is basically saying every
 

00:19:04.340 --> 00:19:05.970 align:start position:0%
the assertion is basically saying every
time<00:19:04.520><c> there's</c><00:19:04.700><c> a</c><00:19:04.760><c> transfer</c><00:19:05.120><c> tokens</c><00:19:05.510><c> vanish</c>

00:19:05.970 --> 00:19:05.980 align:start position:0%
time there's a transfer tokens vanish
 

00:19:05.980 --> 00:19:08.530 align:start position:0%
time there's a transfer tokens vanish
which<00:19:06.980><c> hopefully</c><00:19:07.340><c> is</c><00:19:07.550><c> wrong</c><00:19:07.820><c> and</c><00:19:08.120><c> the</c><00:19:08.390><c> tool</c>

00:19:08.530 --> 00:19:08.540 align:start position:0%
which hopefully is wrong and the tool
 

00:19:08.540 --> 00:19:10.600 align:start position:0%
which hopefully is wrong and the tool
set<00:19:08.720><c> is</c><00:19:08.750><c> wrong</c><00:19:09.020><c> can</c><00:19:09.620><c> say</c><00:19:09.740><c> balance</c><00:19:09.950><c> from</c><00:19:10.220><c> plus</c>

00:19:10.600 --> 00:19:10.610 align:start position:0%
set is wrong can say balance from plus
 

00:19:10.610 --> 00:19:14.220 align:start position:0%
set is wrong can say balance from plus
balance<00:19:10.940><c> to</c><00:19:11.530><c> is</c><00:19:12.530><c> actually</c><00:19:12.950><c> the</c><00:19:13.040><c> same</c><00:19:13.310><c> as</c>

00:19:14.220 --> 00:19:14.230 align:start position:0%
balance to is actually the same as
 

00:19:14.230 --> 00:19:17.230 align:start position:0%
balance to is actually the same as
balance<00:19:15.230><c> of</c><00:19:15.380><c> serum</c><00:19:15.680><c> plus</c><00:19:16.280><c> balance</c><00:19:16.640><c> of</c><00:19:16.940><c> one</c>

00:19:17.230 --> 00:19:17.240 align:start position:0%
balance of serum plus balance of one
 

00:19:17.240 --> 00:19:20.440 align:start position:0%
balance of serum plus balance of one
which<00:19:17.540><c> are</c><00:19:17.750><c> the</c><00:19:17.990><c> accounts</c><00:19:19.030><c> so</c><00:19:20.030><c> if</c><00:19:20.210><c> we</c><00:19:20.360><c> actually</c>

00:19:20.440 --> 00:19:20.450 align:start position:0%
which are the accounts so if we actually
 

00:19:20.450 --> 00:19:28.030 align:start position:0%
which are the accounts so if we actually
fix<00:19:21.020><c> the</c><00:19:21.110><c> assertion</c><00:19:26.680><c> there</c><00:19:27.680><c> you</c><00:19:27.770><c> go</c><00:19:27.860><c> if</c>

00:19:28.030 --> 00:19:28.040 align:start position:0%
fix the assertion there you go if
 

00:19:28.040 --> 00:19:30.400 align:start position:0%
fix the assertion there you go if
there's<00:19:28.340><c> no</c><00:19:28.570><c> if</c><00:19:29.570><c> it</c><00:19:29.780><c> doesn't</c><00:19:29.990><c> complain</c><00:19:30.230><c> it</c>

00:19:30.400 --> 00:19:30.410 align:start position:0%
there's no if it doesn't complain it
 

00:19:30.410 --> 00:19:34.660 align:start position:0%
there's no if it doesn't complain it
means<00:19:30.560><c> it's</c><00:19:30.680><c> safe</c><00:19:33.160><c> I'm</c><00:19:34.160><c> gonna</c><00:19:34.310><c> move</c><00:19:34.490><c> on</c><00:19:34.610><c> to</c>

00:19:34.660 --> 00:19:34.670 align:start position:0%
means it's safe I'm gonna move on to
 

00:19:34.670 --> 00:19:36.670 align:start position:0%
means it's safe I'm gonna move on to
it's<00:19:35.210><c> likely</c><00:19:35.450><c> a</c><00:19:35.480><c> better</c><00:19:35.600><c> example</c><00:19:35.840><c> with</c><00:19:36.350><c> a</c>

00:19:36.670 --> 00:19:36.680 align:start position:0%
it's likely a better example with a
 

00:19:36.680 --> 00:19:44.130 align:start position:0%
it's likely a better example with a
bunch<00:19:37.100><c> of</c><00:19:37.220><c> false</c><00:19:37.430><c> positives</c><00:19:37.940><c> oh</c><00:19:40.450><c> not</c><00:19:41.450><c> this</c>

00:19:44.130 --> 00:19:44.140 align:start position:0%
 
 

00:19:44.140 --> 00:19:52.540 align:start position:0%
 
this<00:19:45.140><c> okay</c><00:19:45.980><c> so</c><00:19:46.040><c> here</c><00:19:46.340><c> we</c><00:19:46.370><c> have</c><00:19:51.370><c> yeah</c><00:19:52.370><c> this</c>

00:19:52.540 --> 00:19:52.550 align:start position:0%
this okay so here we have yeah this
 

00:19:52.550 --> 00:19:54.490 align:start position:0%
this okay so here we have yeah this
contract<00:19:52.910><c> see</c><00:19:53.120><c> this</c><00:19:53.450><c> there's</c><00:19:54.260><c> external</c>

00:19:54.490 --> 00:19:54.500 align:start position:0%
contract see this there's external
 

00:19:54.500 --> 00:20:00.880 align:start position:0%
contract see this there's external
contract<00:19:55.010><c> this</c><00:19:55.700><c> matter</c><00:19:56.120><c> for</c><00:19:56.480><c> now</c><00:19:56.710><c> oh</c><00:19:59.890><c> sorry</c>

00:20:00.880 --> 00:20:00.890 align:start position:0%
contract this matter for now oh sorry
 

00:20:00.890 --> 00:20:01.870 align:start position:0%
contract this matter for now oh sorry
about<00:20:01.010><c> that</c><00:20:01.130><c> it's</c><00:20:01.370><c> not</c><00:20:01.400><c> the</c><00:20:01.520><c> one</c><00:20:01.640><c> I</c><00:20:01.700><c> want</c><00:20:01.850><c> to</c>

00:20:01.870 --> 00:20:01.880 align:start position:0%
about that it's not the one I want to
 

00:20:01.880 --> 00:20:07.990 align:start position:0%
about that it's not the one I want to
show<00:20:03.850><c> this</c><00:20:04.850><c> one</c><00:20:04.930><c> so</c><00:20:05.930><c> we</c><00:20:06.140><c> have</c><00:20:06.580><c> just</c><00:20:07.580><c> like</c><00:20:07.790><c> kind</c>

00:20:07.990 --> 00:20:08.000 align:start position:0%
show this one so we have just like kind
 

00:20:08.000 --> 00:20:12.520 align:start position:0%
show this one so we have just like kind
of<00:20:08.060><c> an</c><00:20:08.240><c> account</c><00:20:08.540><c> but</c><00:20:09.100><c> some</c><00:20:10.100><c> it</c><00:20:10.760><c> stores</c><00:20:11.600><c> the</c>

00:20:12.520 --> 00:20:12.530 align:start position:0%
of an account but some it stores the
 

00:20:12.530 --> 00:20:17.470 align:start position:0%
of an account but some it stores the
some<00:20:13.000><c> the</c><00:20:14.000><c> balance</c><00:20:14.390><c> of</c><00:20:15.460><c> like</c><00:20:16.460><c> it's</c><00:20:16.880><c> its</c><00:20:17.270><c> own</c>

00:20:17.470 --> 00:20:17.480 align:start position:0%
some the balance of like it's its own
 

00:20:17.480 --> 00:20:20.110 align:start position:0%
some the balance of like it's its own
balance<00:20:18.290><c> and</c><00:20:18.650><c> here</c><00:20:19.460><c> it</c><00:20:19.520><c> counts</c><00:20:19.940><c> how</c><00:20:19.970><c> many</c>

00:20:20.110 --> 00:20:20.120 align:start position:0%
balance and here it counts how many
 

00:20:20.120 --> 00:20:22.750 align:start position:0%
balance and here it counts how many
transactions<00:20:20.810><c> how</c><00:20:21.680><c> many</c><00:20:21.860><c> times</c><00:20:22.370><c> the</c><00:20:22.580><c> fall</c>

00:20:22.750 --> 00:20:22.760 align:start position:0%
transactions how many times the fall
 

00:20:22.760 --> 00:20:24.460 align:start position:0%
transactions how many times the fall
back<00:20:22.940><c> function</c><00:20:23.330><c> was</c><00:20:23.480><c> called</c><00:20:23.660><c> increasing</c><00:20:24.380><c> the</c>

00:20:24.460 --> 00:20:24.470 align:start position:0%
back function was called increasing the
 

00:20:24.470 --> 00:20:25.960 align:start position:0%
back function was called increasing the
value<00:20:24.770><c> increasing</c><00:20:25.310><c> the</c><00:20:25.400><c> balance</c><00:20:25.700><c> of</c><00:20:25.850><c> this</c>

00:20:25.960 --> 00:20:25.970 align:start position:0%
value increasing the balance of this
 

00:20:25.970 --> 00:20:27.910 align:start position:0%
value increasing the balance of this
account<00:20:26.140><c> so</c><00:20:27.140><c> here</c><00:20:27.350><c> we</c><00:20:27.410><c> have</c><00:20:27.530><c> the</c><00:20:27.620><c> fall</c><00:20:27.770><c> back</c>

00:20:27.910 --> 00:20:27.920 align:start position:0%
account so here we have the fall back
 

00:20:27.920 --> 00:20:32.650 align:start position:0%
account so here we have the fall back
function<00:20:28.280><c> that</c><00:20:28.370><c> says</c><00:20:30.490><c> that</c><00:20:31.490><c> the</c><00:20:31.760><c> value</c><00:20:32.300><c> sent</c>

00:20:32.650 --> 00:20:32.660 align:start position:0%
function that says that the value sent
 

00:20:32.660 --> 00:20:35.950 align:start position:0%
function that says that the value sent
to<00:20:33.080><c> be</c><00:20:33.230><c> greater</c><00:20:33.470><c> than</c><00:20:33.500><c> zero</c><00:20:33.800><c> and</c><00:20:34.570><c> this</c><00:20:35.570><c> is</c><00:20:35.630><c> just</c>

00:20:35.950 --> 00:20:35.960 align:start position:0%
to be greater than zero and this is just
 

00:20:35.960 --> 00:20:38.890 align:start position:0%
to be greater than zero and this is just
to<00:20:36.490><c> give</c><00:20:37.490><c> a</c><00:20:37.520><c> constraint</c><00:20:37.880><c> for</c><00:20:38.030><c> an</c><00:20:38.330><c> avoider</c><00:20:38.690><c> if</c>

00:20:38.890 --> 00:20:38.900 align:start position:0%
to give a constraint for an avoider if
 

00:20:38.900 --> 00:20:42.820 align:start position:0%
to give a constraint for an avoider if
cause<00:20:39.080><c> later</c><00:20:39.610><c> requiring</c><00:20:40.610><c> that</c><00:20:41.320><c> this</c><00:20:42.320><c> account</c>

00:20:42.820 --> 00:20:42.830 align:start position:0%
cause later requiring that this account
 

00:20:42.830 --> 00:20:44.320 align:start position:0%
cause later requiring that this account
cannot<00:20:43.070><c> have</c><00:20:43.280><c> more</c><00:20:43.520><c> than</c><00:20:43.670><c> 1</c><00:20:43.820><c> million</c><00:20:44.030><c> the</c>

00:20:44.320 --> 00:20:44.330 align:start position:0%
cannot have more than 1 million the
 

00:20:44.330 --> 00:20:46.170 align:start position:0%
cannot have more than 1 million the
balance<00:20:44.600><c> cannot</c><00:20:44.810><c> be</c><00:20:44.960><c> greater</c><00:20:45.200><c> than</c><00:20:45.410><c> 1</c><00:20:45.650><c> million</c>

00:20:46.170 --> 00:20:46.180 align:start position:0%
balance cannot be greater than 1 million
 

00:20:46.180 --> 00:20:49.180 align:start position:0%
balance cannot be greater than 1 million
so<00:20:47.180><c> here</c><00:20:47.480><c> we</c><00:20:47.600><c> just</c><00:20:47.840><c> increase</c><00:20:48.290><c> the</c><00:20:48.770><c> sum</c><00:20:49.040><c> and</c>

00:20:49.180 --> 00:20:49.190 align:start position:0%
so here we just increase the sum and
 

00:20:49.190 --> 00:20:50.920 align:start position:0%
so here we just increase the sum and
increase<00:20:49.430><c> account</c><00:20:49.730><c> right</c><00:20:50.030><c> and</c><00:20:50.270><c> here</c><00:20:50.720><c> we</c><00:20:50.780><c> have</c>

00:20:50.920 --> 00:20:50.930 align:start position:0%
increase account right and here we have
 

00:20:50.930 --> 00:20:53.110 align:start position:0%
increase account right and here we have
a<00:20:51.110><c> function</c><00:20:51.320><c> called</c><00:20:51.500><c> average</c><00:20:51.980><c> that</c><00:20:52.610><c> computes</c>

00:20:53.110 --> 00:20:53.120 align:start position:0%
a function called average that computes
 

00:20:53.120 --> 00:20:56.140 align:start position:0%
a function called average that computes
the<00:20:53.270><c> average</c><00:20:54.160><c> the</c><00:20:55.160><c> average</c><00:20:55.280><c> value</c><00:20:55.790><c> that</c><00:20:55.820><c> was</c>

00:20:56.140 --> 00:20:56.150 align:start position:0%
the average the average value that was
 

00:20:56.150 --> 00:20:57.700 align:start position:0%
the average the average value that was
sent<00:20:56.390><c> per</c><00:20:56.690><c> transaction</c>

00:20:57.700 --> 00:20:57.710 align:start position:0%
sent per transaction
 

00:20:57.710 --> 00:21:01.180 align:start position:0%
sent per transaction
all<00:20:58.520><c> right</c><00:20:58.960><c> so</c><00:20:59.960><c> here</c><00:21:00.500><c> I</c><00:21:00.529><c> put</c><00:21:00.740><c> is</c><00:21:00.860><c> required</c>

00:21:01.180 --> 00:21:01.190 align:start position:0%
all right so here I put is required
 

00:21:01.190 --> 00:21:04.180 align:start position:0%
all right so here I put is required
because<00:21:01.610><c> if</c><00:21:02.169><c> if</c><00:21:03.169><c> there</c><00:21:03.440><c> was</c><00:21:03.590><c> no</c><00:21:03.740><c> transaction</c>

00:21:04.180 --> 00:21:04.190 align:start position:0%
because if if there was no transaction
 

00:21:04.190 --> 00:21:06.269 align:start position:0%
because if if there was no transaction
doesn't<00:21:04.340><c> make</c><00:21:04.490><c> sense</c><00:21:04.669><c> compute</c><00:21:05.000><c> the</c><00:21:05.059><c> average</c>

00:21:06.269 --> 00:21:06.279 align:start position:0%
doesn't make sense compute the average
 

00:21:06.279 --> 00:21:08.529 align:start position:0%
doesn't make sense compute the average
but<00:21:07.279><c> here</c><00:21:07.460><c> we</c><00:21:07.610><c> have</c><00:21:07.789><c> an</c><00:21:07.909><c> ax</c><00:21:07.970><c> so</c><00:21:08.000><c> here</c><00:21:08.450><c> we</c>

00:21:08.529 --> 00:21:08.539 align:start position:0%
but here we have an ax so here we
 

00:21:08.539 --> 00:21:09.820 align:start position:0%
but here we have an ax so here we
compute<00:21:08.870><c> the</c><00:21:08.929><c> average</c><00:21:09.020><c> and</c><00:21:09.409><c> we</c><00:21:09.470><c> assert</c><00:21:09.799><c> that</c>

00:21:09.820 --> 00:21:09.830 align:start position:0%
compute the average and we assert that
 

00:21:09.830 --> 00:21:11.590 align:start position:0%
compute the average and we assert that
the<00:21:10.100><c> average</c><00:21:10.429><c> has</c><00:21:10.909><c> to</c><00:21:11.029><c> be</c><00:21:11.090><c> greater</c><00:21:11.299><c> than</c><00:21:11.330><c> zero</c>

00:21:11.590 --> 00:21:11.600 align:start position:0%
the average has to be greater than zero
 

00:21:11.600 --> 00:21:12.789 align:start position:0%
the average has to be greater than zero
right<00:21:11.809><c> because</c><00:21:12.230><c> if</c><00:21:12.350><c> you</c><00:21:12.440><c> did</c><00:21:12.620><c> have</c><00:21:12.770><c> a</c>

00:21:12.789 --> 00:21:12.799 align:start position:0%
right because if you did have a
 

00:21:12.799 --> 00:21:16.240 align:start position:0%
right because if you did have a
transaction<00:21:13.370><c> because</c><00:21:14.210><c> of</c><00:21:14.539><c> this</c><00:21:14.750><c> line</c><00:21:15.250><c> we</c>

00:21:16.240 --> 00:21:16.250 align:start position:0%
transaction because of this line we
 

00:21:16.250 --> 00:21:18.820 align:start position:0%
transaction because of this line we
cannot<00:21:16.539><c> compute</c><00:21:17.539><c> we</c><00:21:17.659><c> cannot</c><00:21:17.870><c> we</c><00:21:18.080><c> don't</c><00:21:18.289><c> count</c>

00:21:18.820 --> 00:21:18.830 align:start position:0%
cannot compute we cannot we don't count
 

00:21:18.830 --> 00:21:22.600 align:start position:0%
cannot compute we cannot we don't count
zeros<00:21:19.480><c> in</c><00:21:20.480><c> a</c><00:21:20.539><c> transaction</c><00:21:20.990><c> so</c><00:21:21.399><c> the</c><00:21:22.399><c> assertion</c>

00:21:22.600 --> 00:21:22.610 align:start position:0%
zeros in a transaction so the assertion
 

00:21:22.610 --> 00:21:33.740 align:start position:0%
zeros in a transaction so the assertion
is<00:21:23.120><c> true</c><00:21:23.779><c> agreed</c>

00:21:33.740 --> 00:21:33.750 align:start position:0%
 
 

00:21:33.750 --> 00:21:36.240 align:start position:0%
 
okay<00:21:34.750><c> so</c><00:21:34.810><c> it's</c><00:21:35.560><c> telling</c><00:21:35.740><c> us</c><00:21:35.920><c> that</c><00:21:36.040><c> the</c>

00:21:36.240 --> 00:21:36.250 align:start position:0%
okay so it's telling us that the
 

00:21:36.250 --> 00:21:39.810 align:start position:0%
okay so it's telling us that the
assertion<00:21:36.700><c> is</c><00:21:36.910><c> actually</c><00:21:37.780><c> not</c><00:21:37.900><c> true</c><00:21:38.640><c> and</c><00:21:39.640><c> give</c>

00:21:39.810 --> 00:21:39.820 align:start position:0%
assertion is actually not true and give
 

00:21:39.820 --> 00:21:42.630 align:start position:0%
assertion is actually not true and give
some<00:21:40.150><c> value</c><00:21:40.510><c> so</c><00:21:40.810><c> it</c><00:21:41.410><c> says</c><00:21:41.770><c> that</c><00:21:42.040><c> if</c><00:21:42.160><c> count</c><00:21:42.430><c> is</c>

00:21:42.630 --> 00:21:42.640 align:start position:0%
some value so it says that if count is
 

00:21:42.640 --> 00:21:45.570 align:start position:0%
some value so it says that if count is
one<00:21:42.880><c> and</c><00:21:43.120><c> sum</c><00:21:43.360><c> is</c><00:21:43.570><c> zero</c><00:21:43.890><c> then</c><00:21:44.890><c> the</c><00:21:45.130><c> average</c><00:21:45.400><c> is</c>

00:21:45.570 --> 00:21:45.580 align:start position:0%
one and sum is zero then the average is
 

00:21:45.580 --> 00:21:48.750 align:start position:0%
one and sum is zero then the average is
zero<00:21:45.790><c> which</c><00:21:46.360><c> is</c><00:21:46.600><c> correct</c><00:21:47.050><c> right</c><00:21:47.580><c> but</c><00:21:48.580><c> then</c><00:21:48.730><c> the</c>

00:21:48.750 --> 00:21:48.760 align:start position:0%
zero which is correct right but then the
 

00:21:48.760 --> 00:21:52.110 align:start position:0%
zero which is correct right but then the
question<00:21:49.090><c> is</c><00:21:49.620><c> can</c><00:21:50.620><c> this</c><00:21:50.740><c> ever</c><00:21:50.920><c> happen</c><00:21:51.340><c> can</c>

00:21:52.110 --> 00:21:52.120 align:start position:0%
question is can this ever happen can
 

00:21:52.120 --> 00:21:54.600 align:start position:0%
question is can this ever happen can
count<00:21:52.450><c> can</c><00:21:53.290><c> it</c><00:21:53.620><c> have</c><00:21:53.830><c> ever</c><00:21:54.100><c> happened</c><00:21:54.520><c> that</c>

00:21:54.600 --> 00:21:54.610 align:start position:0%
count can it have ever happened that
 

00:21:54.610 --> 00:22:00.320 align:start position:0%
count can it have ever happened that
count<00:21:54.850><c> is</c><00:21:55.000><c> 1</c><00:21:55.210><c> and</c><00:21:55.480><c> sum</c><00:21:55.690><c> is</c><00:21:55.870><c> zero</c><00:21:56.640><c> why</c>

00:22:00.320 --> 00:22:00.330 align:start position:0%
 
 

00:22:00.330 --> 00:22:03.240 align:start position:0%
 
exactly<00:22:01.330><c> so</c><00:22:01.630><c> message</c><00:22:02.530><c> Valley</c><00:22:02.740><c> is</c><00:22:02.890><c> an</c><00:22:03.010><c> integer</c>

00:22:03.240 --> 00:22:03.250 align:start position:0%
exactly so message Valley is an integer
 

00:22:03.250 --> 00:22:05.850 align:start position:0%
exactly so message Valley is an integer
right<00:22:03.610><c> with</c><00:22:04.450><c> this</c><00:22:04.660><c> require</c><00:22:05.020><c> is</c><00:22:05.260><c> a</c><00:22:05.440><c> message</c>

00:22:05.850 --> 00:22:05.860 align:start position:0%
right with this require is a message
 

00:22:05.860 --> 00:22:08.760 align:start position:0%
right with this require is a message
value<00:22:06.190><c> is</c><00:22:06.400><c> actually</c><00:22:07.240><c> at</c><00:22:07.540><c> least</c><00:22:07.570><c> one</c><00:22:08.050><c> here</c><00:22:08.590><c> and</c>

00:22:08.760 --> 00:22:08.770 align:start position:0%
value is actually at least one here and
 

00:22:08.770 --> 00:22:12.240 align:start position:0%
value is actually at least one here and
count<00:22:09.340><c> only</c><00:22:09.850><c> increases</c><00:22:10.210><c> by</c><00:22:10.360><c> one</c><00:22:10.600><c> so</c><00:22:11.590><c> this</c>

00:22:12.240 --> 00:22:12.250 align:start position:0%
count only increases by one so this
 

00:22:12.250 --> 00:22:18.320 align:start position:0%
count only increases by one so this
property<00:22:12.580><c> here</c><00:22:15.510><c> is</c><00:22:16.510><c> true</c><00:22:16.810><c> right</c>

00:22:18.320 --> 00:22:18.330 align:start position:0%
property here is true right
 

00:22:18.330 --> 00:22:21.120 align:start position:0%
property here is true right
it's<00:22:19.330><c> an</c><00:22:19.480><c> invariant</c><00:22:19.900><c> it's</c><00:22:20.110><c> true</c><00:22:20.350><c> like</c><00:22:20.680><c> at</c><00:22:20.890><c> any</c>

00:22:21.120 --> 00:22:21.130 align:start position:0%
it's an invariant it's true like at any
 

00:22:21.130 --> 00:22:24.600 align:start position:0%
it's an invariant it's true like at any
point<00:22:21.520><c> of</c><00:22:21.730><c> the</c><00:22:21.850><c> contract</c><00:22:22.360><c> right</c><00:22:23.370><c> but</c><00:22:24.370><c> it's</c>

00:22:24.600 --> 00:22:24.610 align:start position:0%
point of the contract right but it's
 

00:22:24.610 --> 00:22:27.000 align:start position:0%
point of the contract right but it's
hard<00:22:24.850><c> for</c><00:22:24.970><c> the</c><00:22:25.060><c> SMT</c><00:22:25.330><c> checker</c><00:22:25.540><c> to</c><00:22:25.900><c> figure</c><00:22:26.860><c> that</c>

00:22:27.000 --> 00:22:27.010 align:start position:0%
hard for the SMT checker to figure that
 

00:22:27.010 --> 00:22:29.490 align:start position:0%
hard for the SMT checker to figure that
out<00:22:27.070><c> on</c><00:22:27.220><c> its</c><00:22:27.460><c> own</c><00:22:27.610><c> and</c><00:22:27.990><c> that's</c><00:22:28.990><c> what</c><00:22:29.200><c> I</c><00:22:29.230><c> meant</c>

00:22:29.490 --> 00:22:29.500 align:start position:0%
out on its own and that's what I meant
 

00:22:29.500 --> 00:22:31.650 align:start position:0%
out on its own and that's what I meant
with<00:22:30.010><c> you</c><00:22:30.400><c> as</c><00:22:30.580><c> a</c><00:22:30.610><c> developer</c><00:22:30.790><c> of</c><00:22:31.120><c> the</c><00:22:31.240><c> contract</c>

00:22:31.650 --> 00:22:31.660 align:start position:0%
with you as a developer of the contract
 

00:22:31.660 --> 00:22:33.120 align:start position:0%
with you as a developer of the contract
know<00:22:32.170><c> this</c><00:22:32.410><c> kind</c><00:22:32.590><c> of</c><00:22:32.680><c> thing</c><00:22:32.860><c> then</c><00:22:33.040><c> you</c><00:22:33.100><c> can</c>

00:22:33.120 --> 00:22:33.130 align:start position:0%
know this kind of thing then you can
 

00:22:33.130 --> 00:22:35.250 align:start position:0%
know this kind of thing then you can
help<00:22:33.490><c> you</c><00:22:33.700><c> can</c><00:22:33.910><c> help</c><00:22:33.940><c> destiny</c><00:22:34.510><c> checker</c><00:22:34.750><c> by</c>

00:22:35.250 --> 00:22:35.260 align:start position:0%
help you can help destiny checker by
 

00:22:35.260 --> 00:22:37.080 align:start position:0%
help you can help destiny checker by
adding<00:22:35.680><c> those</c><00:22:35.800><c> invariants</c><00:22:36.370><c> whenever</c><00:22:36.940><c> you</c>

00:22:37.080 --> 00:22:37.090 align:start position:0%
adding those invariants whenever you
 

00:22:37.090 --> 00:22:40.320 align:start position:0%
adding those invariants whenever you
have<00:22:37.270><c> these</c><00:22:37.510><c> harder</c><00:22:37.810><c> checks</c><00:22:38.610><c> let's</c><00:22:39.610><c> see</c><00:22:39.820><c> okay</c>

00:22:40.320 --> 00:22:40.330 align:start position:0%
have these harder checks let's see okay
 

00:22:40.330 --> 00:22:45.320 align:start position:0%
have these harder checks let's see okay
now<00:22:40.510><c> it's</c><00:22:40.660><c> fine</c><00:22:43.050><c> so</c><00:22:44.050><c> I</c><00:22:44.080><c> have</c><00:22:44.260><c> one</c><00:22:44.530><c> last</c><00:22:44.740><c> example</c>

00:22:45.320 --> 00:22:45.330 align:start position:0%
now it's fine so I have one last example
 

00:22:45.330 --> 00:22:47.790 align:start position:0%
now it's fine so I have one last example
which<00:22:46.330><c> was</c><00:22:46.480><c> the</c><00:22:46.600><c> one</c><00:22:46.660><c> that</c><00:22:46.810><c> actually</c><00:22:46.900><c> closed</c>

00:22:47.790 --> 00:22:47.800 align:start position:0%
which was the one that actually closed
 

00:22:47.800 --> 00:22:51.870 align:start position:0%
which was the one that actually closed
here<00:22:49.890><c> yeah</c><00:22:50.890><c> it's</c><00:22:51.010><c> the</c><00:22:51.070><c> same</c><00:22:51.340><c> it's</c><00:22:51.760><c> the</c><00:22:51.820><c> same</c>

00:22:51.870 --> 00:22:51.880 align:start position:0%
here yeah it's the same it's the same
 

00:22:51.880 --> 00:22:53.580 align:start position:0%
here yeah it's the same it's the same
contract<00:22:52.360><c> just</c><00:22:52.570><c> with</c><00:22:52.780><c> the</c><00:22:52.960><c> extension</c><00:22:53.290><c> that</c><00:22:53.440><c> we</c>

00:22:53.580 --> 00:22:53.590 align:start position:0%
contract just with the extension that we
 

00:22:53.590 --> 00:22:57.830 align:start position:0%
contract just with the extension that we
have<00:22:53.710><c> this</c><00:22:53.830><c> exterior</c><00:22:54.040><c> contract</c><00:22:54.580><c> and</c><00:22:55.320><c> we</c><00:22:56.320><c> call</c>

00:22:57.830 --> 00:22:57.840 align:start position:0%
have this exterior contract and we call
 

00:22:57.840 --> 00:23:00.270 align:start position:0%
have this exterior contract and we call
some<00:22:58.840><c> function</c><00:22:59.230><c> f</c><00:22:59.380><c> next</c><00:22:59.740><c> we</c><00:22:59.800><c> know</c><00:22:59.890><c> contract</c>

00:23:00.270 --> 00:23:00.280 align:start position:0%
some function f next we know contract
 

00:23:00.280 --> 00:23:02.580 align:start position:0%
some function f next we know contract
and<00:23:00.790><c> what</c><00:23:01.030><c> what</c><00:23:01.420><c> happens</c><00:23:01.720><c> here</c><00:23:02.050><c> is</c><00:23:02.200><c> that</c><00:23:02.230><c> when</c>

00:23:02.580 --> 00:23:02.590 align:start position:0%
and what what happens here is that when
 

00:23:02.590 --> 00:23:04.290 align:start position:0%
and what what happens here is that when
we<00:23:02.740><c> call</c><00:23:02.920><c> the</c><00:23:03.040><c> external</c><00:23:03.340><c> function</c><00:23:03.700><c> the</c>

00:23:04.290 --> 00:23:04.300 align:start position:0%
we call the external function the
 

00:23:04.300 --> 00:23:10.560 align:start position:0%
we call the external function the
knowledge<00:23:06.030><c> gets</c><00:23:07.770><c> basically</c><00:23:08.770><c> erased</c><00:23:09.310><c> and</c><00:23:09.670><c> you</c>

00:23:10.560 --> 00:23:10.570 align:start position:0%
knowledge gets basically erased and you
 

00:23:10.570 --> 00:23:13.530 align:start position:0%
knowledge gets basically erased and you
would<00:23:10.720><c> need</c><00:23:10.900><c> to</c><00:23:11.350><c> add</c><00:23:11.710><c> new</c><00:23:12.550><c> constraints</c><00:23:13.120><c> after</c>

00:23:13.530 --> 00:23:13.540 align:start position:0%
would need to add new constraints after
 

00:23:13.540 --> 00:23:17.010 align:start position:0%
would need to add new constraints after
the<00:23:13.750><c> after</c><00:23:14.230><c> the</c><00:23:14.850><c> after</c><00:23:15.850><c> the</c><00:23:16.510><c> function</c><00:23:16.840><c> call</c>

00:23:17.010 --> 00:23:17.020 align:start position:0%
the after the after the function call
 

00:23:17.020 --> 00:23:18.650 align:start position:0%
the after the after the function call
you<00:23:17.170><c> maybe</c><00:23:17.500><c> even</c><00:23:17.830><c> need</c><00:23:17.950><c> to</c><00:23:18.040><c> repeat</c>

00:23:18.650 --> 00:23:18.660 align:start position:0%
you maybe even need to repeat
 

00:23:18.660 --> 00:23:23.340 align:start position:0%
you maybe even need to repeat
unconstrained<00:23:19.660><c> sue</c><00:23:21.480><c> in</c><00:23:22.480><c> order</c><00:23:22.870><c> to</c><00:23:22.990><c> help</c><00:23:23.140><c> us</c>

00:23:23.340 --> 00:23:23.350 align:start position:0%
unconstrained sue in order to help us
 

00:23:23.350 --> 00:23:25.170 align:start position:0%
unconstrained sue in order to help us
over<00:23:23.650><c> to</c><00:23:23.770><c> actually</c><00:23:24.070><c> prove</c><00:23:24.280><c> it</c><00:23:24.430><c> and</c><00:23:24.550><c> not</c><00:23:24.970><c> get</c>

00:23:25.170 --> 00:23:25.180 align:start position:0%
over to actually prove it and not get
 

00:23:25.180 --> 00:23:32.300 align:start position:0%
over to actually prove it and not get
false<00:23:25.480><c> positives</c>

00:23:32.300 --> 00:23:32.310 align:start position:0%
 
 

00:23:32.310 --> 00:23:34.940 align:start position:0%
 
and<00:23:32.930><c> one</c><00:23:33.930><c> last</c><00:23:34.050><c> thing</c><00:23:34.170><c> that</c><00:23:34.290><c> I</c><00:23:34.410><c> wanted</c><00:23:34.620><c> to</c><00:23:34.710><c> say</c>

00:23:34.940 --> 00:23:34.950 align:start position:0%
and one last thing that I wanted to say
 

00:23:34.950 --> 00:23:38.600 align:start position:0%
and one last thing that I wanted to say
is<00:23:36.020><c> future</c><00:23:37.020><c> plans</c><00:23:37.290><c> that</c><00:23:37.590><c> we</c><00:23:37.740><c> have</c><00:23:37.890><c> for</c><00:23:37.920><c> for</c><00:23:38.490><c> the</c>

00:23:38.600 --> 00:23:38.610 align:start position:0%
is future plans that we have for for the
 

00:23:38.610 --> 00:23:41.930 align:start position:0%
is future plans that we have for for the
tool<00:23:39.710><c> yeah</c><00:23:40.710><c> we</c><00:23:40.890><c> have</c><00:23:41.040><c> more</c><00:23:41.190><c> examples</c><00:23:41.280><c> and</c><00:23:41.790><c> I'd</c>

00:23:41.930 --> 00:23:41.940 align:start position:0%
tool yeah we have more examples and I'd
 

00:23:41.940 --> 00:23:45.020 align:start position:0%
tool yeah we have more examples and I'd
be<00:23:42.240><c> glad</c><00:23:42.390><c> to</c><00:23:42.510><c> talk</c><00:23:42.810><c> about</c><00:23:42.960><c> the</c><00:23:43.890><c> tool</c><00:23:44.070><c> more</c>

00:23:45.020 --> 00:23:45.030 align:start position:0%
be glad to talk about the tool more
 

00:23:45.030 --> 00:23:47.240 align:start position:0%
be glad to talk about the tool more
offline<00:23:45.990><c> if</c><00:23:46.260><c> you</c><00:23:46.320><c> guys</c><00:23:46.440><c> want</c><00:23:46.710><c> I</c><00:23:46.920><c> want</c><00:23:47.070><c> to</c><00:23:47.100><c> talk</c>

00:23:47.240 --> 00:23:47.250 align:start position:0%
offline if you guys want I want to talk
 

00:23:47.250 --> 00:23:51.590 align:start position:0%
offline if you guys want I want to talk
about<00:23:47.340><c> it</c><00:23:48.530><c> as</c><00:23:49.530><c> future</c><00:23:49.980><c> plans</c><00:23:50.280><c> we</c><00:23:50.610><c> have</c><00:23:50.820><c> what</c><00:23:51.570><c> I</c>

00:23:51.590 --> 00:23:51.600 align:start position:0%
about it as future plans we have what I
 

00:23:51.600 --> 00:23:54.800 align:start position:0%
about it as future plans we have what I
mentioned<00:23:51.870><c> which</c><00:23:52.770><c> is</c><00:23:53.090><c> this</c><00:23:54.090><c> sort</c><00:23:54.420><c> of</c><00:23:54.510><c> function</c>

00:23:54.800 --> 00:23:54.810 align:start position:0%
mentioned which is this sort of function
 

00:23:54.810 --> 00:23:59.120 align:start position:0%
mentioned which is this sort of function
modular<00:23:55.850><c> verification</c><00:23:56.850><c> part</c><00:23:57.120><c> which</c><00:23:57.540><c> is</c><00:23:58.170><c> kind</c>

00:23:59.120 --> 00:23:59.130 align:start position:0%
modular verification part which is kind
 

00:23:59.130 --> 00:24:02.090 align:start position:0%
modular verification part which is kind
of<00:23:59.280><c> involved</c><00:23:59.790><c> with</c><00:23:59.820><c> the</c><00:24:00.330><c> state</c><00:24:01.100><c> invariant</c>

00:24:02.090 --> 00:24:02.100 align:start position:0%
of involved with the state invariant
 

00:24:02.100 --> 00:24:04.550 align:start position:0%
of involved with the state invariant
automatic<00:24:02.790><c> deduction</c><00:24:03.240><c> which</c><00:24:04.110><c> is</c><00:24:04.230><c> a</c><00:24:04.290><c> very</c><00:24:04.470><c> hard</c>

00:24:04.550 --> 00:24:04.560 align:start position:0%
automatic deduction which is a very hard
 

00:24:04.560 --> 00:24:07.400 align:start position:0%
automatic deduction which is a very hard
thing<00:24:04.800><c> to</c><00:24:04.830><c> do</c><00:24:05.070><c> but</c><00:24:05.340><c> we</c><00:24:05.580><c> want</c><00:24:05.700><c> to</c><00:24:05.880><c> try</c><00:24:06.120><c> it</c><00:24:06.180><c> anyway</c>

00:24:07.400 --> 00:24:07.410 align:start position:0%
thing to do but we want to try it anyway
 

00:24:07.410 --> 00:24:09.170 align:start position:0%
thing to do but we want to try it anyway
and<00:24:07.590><c> also</c><00:24:07.920><c> one</c><00:24:08.520><c> other</c><00:24:08.550><c> thing</c><00:24:08.700><c> we</c><00:24:09.030><c> want</c>

00:24:09.170 --> 00:24:09.180 align:start position:0%
and also one other thing we want
 

00:24:09.180 --> 00:24:13.100 align:start position:0%
and also one other thing we want
introduced<00:24:09.540><c> rudder</c><00:24:10.430><c> soon</c><00:24:11.430><c> is</c><00:24:11.870><c> actually</c><00:24:12.870><c> the</c>

00:24:13.100 --> 00:24:13.110 align:start position:0%
introduced rudder soon is actually the
 

00:24:13.110 --> 00:24:17.690 align:start position:0%
introduced rudder soon is actually the
ability<00:24:13.410><c> to</c><00:24:13.650><c> let</c><00:24:15.650><c> that</c><00:24:16.650><c> developers</c><00:24:17.220><c> give</c><00:24:17.490><c> this</c>

00:24:17.690 --> 00:24:17.700 align:start position:0%
ability to let that developers give this
 

00:24:17.700 --> 00:24:22.690 align:start position:0%
ability to let that developers give this
variance<00:24:18.150><c> so</c><00:24:18.500><c> something</c><00:24:19.500><c> like</c><00:24:20.450><c> you</c><00:24:21.450><c> could</c>

00:24:22.690 --> 00:24:22.700 align:start position:0%
variance so something like you could
 

00:24:22.700 --> 00:24:25.760 align:start position:0%
variance so something like you could
write<00:24:23.700><c> something</c><00:24:23.940><c> like</c><00:24:24.470><c> declare</c><00:24:25.470><c> your</c>

00:24:25.760 --> 00:24:25.770 align:start position:0%
write something like declare your
 

00:24:25.770 --> 00:24:33.740 align:start position:0%
write something like declare your
invariants<00:24:26.340><c> and</c><00:24:31.850><c> this</c><00:24:32.850><c> would</c><00:24:33.060><c> be</c><00:24:33.210><c> one</c><00:24:33.450><c> of</c><00:24:33.480><c> them</c>

00:24:33.740 --> 00:24:33.750 align:start position:0%
invariants and this would be one of them
 

00:24:33.750 --> 00:24:37.010 align:start position:0%
invariants and this would be one of them
and<00:24:34.970><c> with</c><00:24:35.970><c> this</c><00:24:36.090><c> invariant</c><00:24:36.540><c> is</c><00:24:36.630><c> invariant</c>

00:24:37.010 --> 00:24:37.020 align:start position:0%
and with this invariant is invariant
 

00:24:37.020 --> 00:24:38.480 align:start position:0%
and with this invariant is invariant
would<00:24:37.230><c> be</c><00:24:37.350><c> applied</c><00:24:37.650><c> as</c><00:24:37.890><c> a</c><00:24:37.920><c> require</c><00:24:38.280><c> in</c><00:24:38.400><c> the</c>

00:24:38.480 --> 00:24:38.490 align:start position:0%
would be applied as a require in the
 

00:24:38.490 --> 00:24:40.550 align:start position:0%
would be applied as a require in the
beginning<00:24:38.760><c> of</c><00:24:38.820><c> every</c><00:24:38.940><c> function</c><00:24:39.450><c> and</c><00:24:39.570><c> asserted</c>

00:24:40.550 --> 00:24:40.560 align:start position:0%
beginning of every function and asserted
 

00:24:40.560 --> 00:24:44.780 align:start position:0%
beginning of every function and asserted
in<00:24:40.710><c> the</c><00:24:40.830><c> end</c><00:24:40.950><c> of</c><00:24:41.250><c> every</c><00:24:41.520><c> function</c><00:24:42.350><c> in</c><00:24:43.350><c> Diani</c><00:24:44.100><c> we</c>

00:24:44.780 --> 00:24:44.790 align:start position:0%
in the end of every function in Diani we
 

00:24:44.790 --> 00:24:46.610 align:start position:0%
in the end of every function in Diani we
could<00:24:45.090><c> even</c><00:24:45.420><c> use</c><00:24:45.570><c> that</c><00:24:45.900><c> to</c><00:24:46.080><c> get</c><00:24:46.170><c> inductive</c>

00:24:46.610 --> 00:24:46.620 align:start position:0%
could even use that to get inductive
 

00:24:46.620 --> 00:24:51.980 align:start position:0%
could even use that to get inductive
proofs<00:24:47.210><c> and</c><00:24:49.160><c> yeah</c><00:24:50.160><c> just</c><00:24:50.700><c> get</c><00:24:51.240><c> give</c><00:24:51.540><c> more</c><00:24:51.750><c> power</c>

00:24:51.980 --> 00:24:51.990 align:start position:0%
proofs and yeah just get give more power
 

00:24:51.990 --> 00:24:54.350 align:start position:0%
proofs and yeah just get give more power
mm<00:24:52.500><c> jacquard</c><00:24:52.800><c> and</c><00:24:52.920><c> actually</c><00:24:53.190><c> get</c><00:24:53.360><c> harder</c>

00:24:54.350 --> 00:24:54.360 align:start position:0%
mm jacquard and actually get harder
 

00:24:54.360 --> 00:24:56.480 align:start position:0%
mm jacquard and actually get harder
properties<00:24:54.990><c> proven</c><00:24:55.530><c> anyway</c><00:24:55.950><c> even</c><00:24:56.250><c> though</c>

00:24:56.480 --> 00:24:56.490 align:start position:0%
properties proven anyway even though
 

00:24:56.490 --> 00:25:00.260 align:start position:0%
properties proven anyway even though
they're<00:24:56.760><c> pretty</c><00:24:57.060><c> hard</c><00:24:58.370><c> so</c><00:24:59.370><c> yeah</c><00:24:59.520><c> open</c><00:25:00.060><c> for</c>

00:25:00.260 --> 00:25:00.270 align:start position:0%
they're pretty hard so yeah open for
 

00:25:00.270 --> 00:25:02.810 align:start position:0%
they're pretty hard so yeah open for
questions<00:25:00.360><c> not</c><00:25:00.750><c> sure</c><00:25:00.960><c> how</c><00:25:01.770><c> much</c><00:25:01.950><c> time</c><00:25:02.490><c> there's</c>

00:25:02.810 --> 00:25:02.820 align:start position:0%
questions not sure how much time there's
 

00:25:02.820 --> 00:25:06.020 align:start position:0%
questions not sure how much time there's
left<00:25:03.030><c> yeah</c><00:25:03.720><c> no</c><00:25:03.900><c> time</c><00:25:04.050><c> left</c><00:25:04.290><c> so</c><00:25:04.550><c> we</c><00:25:05.550><c> can</c><00:25:05.730><c> discuss</c>

00:25:06.020 --> 00:25:06.030 align:start position:0%
left yeah no time left so we can discuss
 

00:25:06.030 --> 00:25:17.550 align:start position:0%
left yeah no time left so we can discuss
offline<00:25:06.470><c> time</c><00:25:07.470><c> is</c><00:25:07.560><c> gone</c><00:25:07.710><c> thank</c><00:25:08.580><c> you</c>

00:25:17.550 --> 00:25:17.560 align:start position:0%
 
 

00:25:17.560 --> 00:25:19.620 align:start position:0%
 
you

