►
Description
No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).
B
A
Let's
take
a
look:
oh
there's
a
bunch
of
plurals
how
exciting
I
guess
I'll
merge
this
branch
and
just
start
something
from
master.
A
Okay
branch
create
origin,
main
2002.08
coherence
yeah,
so
we
wanted
to
get
around
to
modeling
negative
impulse,
but
before
we
can
do
that,
we
kind
of
need
to
have
the
coherence
check.
I
think
a
little
more
accurate.
So
maybe
we
can
start
with.
Currently
we
have
the
orphan
rules
which
are
incomplete
and
we
don't
have
any
overlap.
Rules.
A
Maybe
it's
more
exciting
to
look
at
the
overlap
rules,
because
that's
what
the
the
negative
impulse
would
also
be
concerned
with.
B
A
Dominic
I
just
saw
that
there
were
various
full
requests
by
you,
which
I
will
look
at
later,
but
we
were
going
to
look
at
the
orphan
and
coherence
check
a
little
bit.
A
A
So
we'll
start
by
making
a
new.
Let
me
just
page
some
of
this
back
in
so
we've
got
this.
This
is
the
main
checking
like
judgment.
It
says
the
whole
program
is
checked.
If
all
this
stuff
is
true,
and
one
of
them
is
that
we
check
every
crate
item
is
defined
here
and
here's
the
rules
for
checking
different
items.
A
A
A
A
Shouldn't
shouldn't
make
any
bugs
nor
fix
any
books,
and
maybe
we
can
add
a
test
before
we
go
further
or
something
we
you
know
expect
to
sort
of.
B
A
Rather
than
putting
them
up
here,
but
if
we
have.
A
Say
one
for
struct
and
one
for
u32
that
should
pass
start
with
that
real
simple
and
I
guess
if
we
run
this
test
source
rust,
test
coherence,
overlap,
we'll
see
a
test
failure
because
right
now
I
don't
see
any
reason
why
this
would
be
rejected
and
it
says
it's
supposed
to
be
rejected.
B
A
A
B
A
It
would
just
be
like
marginally
easier,
but
ignoring
that
we
can
easily
match
across
all
the
crates.
By
doing
this
right,
we
have.
B
A
A
And
a
list
of
items
and
a
list
of
items
is
just
like
that
and
then
here's
the
given
items
we
might
find,
but
let's
stop
for
a
second.
So
so
at
this
point
we've
got.
A
This
is
this
is
kind
of
annoying,
not
sure
why
this
is
giving
me
a
little
warning
thing.
A
We
kind
of
we
want
to
filter
it
down
to
just
the
trait
items
right
right
now
we
have
any
kind
of
crate
item,
but
we
want
to
get
it
down
to
to
just
the
crate.
Just
the
trade
items
we
don't
care
about
the
rest,
so
filtering
is
kind
of
annoying
in.
A
A
And
let's
do
it
like
this,
it's
getting
a
little
confusing
lots
of
dot
dots.
Let's
make
a
meta
function
for
this,
we'll
call
it
all
trait
items,
decal
program.
A
So
this
function
is
going
to
return
all
the
trade
items
when
it's
invoked,
it's
going
to
get
a
decal
program.
It's
going
to
begin
by
extracting
all
the
items
of
any
kind.
A
A
Okay,
let
me
show
you
what
I
just
did
so
so
this
function.
The
select
trade
item
takes
a
single
crate
item
which
could
be
anything
and
returns
a
list
of
either
empty
list
or
or
a
one
item
list
right
and
here
we're
using
these
crazy
patterns
to
say
for
each
crate
and
then
within
each
crate,
for
each
item
and
kind
of
flatten.
A
A
A
It
seems
like
we
have
a
problem
with
our
parentheses,
but
I
think
that
should
solve
it.
Okay,
so
get
a
list
of
all
the
crate
items
in
any
crate.
A
Trait
impuldecal,
I
have
a
question
which
is.
A
Ball,
yeah,
okay,
so
right
so
now
what
we
have
okay!
This
is
how
we're
going
to.
A
B
A
Than
one
yeah
I
was
thinking
what
we
could
do
is
we
could
do
that
or
we
could
so
racket
gives
you
the
ability
to
do
some.
A
Basically,
what
I
was
thinking
is:
if
we
can,
we
should.
We
know
that
this
this
impul
has
to
appear
at
least
once
in
this
list,
so
we
could
find
all
the
things
we
could
find.
The
first
such
appearance
or
any
such
appearance
really
and
then
find
all
the
things
that
come
before
and
all
the
things
that
come
after
and
if
it
appears
more
than
once,
it'll
be
in
one
of
those
two
lists
right,
and
so
as
long
as
we
pair
it,
I
think
it
doesn't
actually
matter
kind
of
which
one
it
originally
was.
A
But
I'm
just
trying
to
remember
how
you
write
those
patterns.
A
I
guess
in
particular.
I
think
it's
going
to
be
a
little.
I
don't
know
if
there's
a
way
to
say
how
do
I
write?
How
do
I
declare
that
I
want
the
first
one,
so
I
could
do
something
like
this.
I
could
say.
A
A
A
A
I
don't
know
not
overlap,
impulse,
equal
or
not
overlap,
we'll
just
call
it
that
for
a
moment,
it's
not
a
very
good
name
but
and
we'll
check.
A
Something
like
this,
so
this
will
say
that
for
all
the
impulse
they're
either
equal
or
they
don't
overlap,
then
we'll
deal
with
the
equal
case
later,
because,
basically
it's
an
error,
if
the
same,
if,
like
literally
the
same
input,
appears
twice,
that's
just
an
error
right,
so
we
should
be
able
to
express
that
somehow.
A
A
Two,
exactly
equal
impulse
are
okay
or
in
particular
we
want
to
say
we
are
checking
the
first.
A
A
A
Like
where
there's
a
list
of
exactly
what
length
one
that
sort
of
of
where
you
you
filter
down
to
only
impulse
that
are
exactly
equal
to
this
and
the
result
should
be
of
length
one
something
like
that
anyway.
So
now
we
have
the
more
interesting
case
where
there's
two
impulse-
and
I
guess
the
next
thing
I
would
point
out-
is
we
haven't
actually
looked
at
what.
A
A
B
A
So
and
now
we
are
extracting
the
name
of
the
trait
extracting
all
the
impulse
of
that
trait,
and
I'm
not
sure
why
this
is
in
a
list.
That's
not
right
all
the
impulse
of
the
tree
getting
a
big
list
of
impulse
and
then
we're
matching
across
them.
So
now
we
know
that
these
two
they
ought
to
be
of
the
same
trait
for
sure.
A
Things
which
is
maybe
okay,
but
maybe
we
want
to
add
it.
I
have
to
look
like
right
now
in
the
logic
solver.
A
A
A
We've
got
the
two
trade
impulse
and
they
have
santiago.
Do
you
remember
we
wrote
down
for
the
negative?
Maybe
it
was
in
the
rfc
or
something
we
were
kind
of
re-expressing.
The
coherence
check
in
some
hack,
md
somewhere.
A
A
A
Come
on
stop
fine.
We
know
they're
of
the
same
trait,
so
we
can
just
assert
that
what
we
want
to
say
is
that
these
parameters.
A
A
A
And
I'm
wondering
I
think,
there's
also
a
yeah.
This
is
a
judgment
form
so
in
in
in
red
x.
There's
like
the
two
modes.
A
The
meta
functions
are
just
sort
of
regular
functions
and
then
the
judgment
forms
are
more
like
prolog
predicates.
That
kind
of
do
search
right,
and
so,
if
you
invoke
one
when
you,
you
can
check
whether
a
judgment
holds
and
what
you
get
back
is
like
a
list
of
values
for
which
it
holds
and
if
that's
the
empty
set,
then
it
doesn't
hold.
A
It
takes
some
in
fire
man.
It
tries
to
prove
something
at
some
point.
Let
me
see
where
does
it
do?
Oh,
I
see
this
is
more
used
after
the
fact.
A
This
is
do
this
is
just
a
test,
maybe
I'm
not
using
this
anywhere.
I
don't
guess
we
don't
have
any
code.
That
sort
of
says
this
is
not
provable
but
we're
gonna
have
to
add
that
I
thought
we
did
it
somewhere.
A
And
goals
which
are
not
so
much
they
may
so
we
can
try
to
prove
that
one
type
equals
another
and
what
we'll
get
back
is
either
an
empty
list
of
things
or
we'll
get
back.
Some.
A
So,
jumping
back
to
context,
we
want
to
show
we'll
start
with
this.
We
want
to
prove
that
these
parameters
see,
if
they're,
equal
or
not
right,
and
it's
only
want
this
to
be
valid
if
they
cannot
be
made
equal,
so
we
have
to
create
for
each
of
these,
these
kind
of
var
ids
correspond
to
the
generics
on
the
impul.
We
need
to
instantiate
them
with
inference
variables
and
then
try
to
unify
essentially.
A
A
A
A
A
A
A
Let
me
let
me
make
a
example:
im
imagine
impul
1
is
simple
for
all
t,
my
let's
call
it
debug
for
backup
t
where
t-book.
A
Then
all
right
so
kinded,
var
ids
one
will
be.
It's
gonna,
be
a
list
of
type
t.
A
And
by
formulas
one
those
are
where
clauses
a
weird
name
that
I've
given
to
them
they're,
like
the
lowered
form
of
where
clauses
will
be
t,
debug
right
and
so
the
the
key
point
is
this:
these
things
reference
t
so
here
when
I
instantiate
with
inference
variables.
A
B
A
A
And
then
we
just
try
to
prove
it.
This
is
the
part
we
don't
have
yet,
though,
but
let's
let's
see
so
I
think
we'll
make
a
we'll
make
a
really
simple
thing
here.
For
now,
that's
probably
not
good
enough,
but
we'll
call
it
cannot
prove
goal.
A
A
How
do
we
express
it?
I
think
we
need
a
meta
function
actually.
A
A
I'll
try
to
remember
now
how
this
works
right,
so
this
is
getting
into
the
the
weeds
of
red
x,
but,
like
we
have
these
judgments
and
we
have
these
meta
functions
that
are
pure
functions
that
always
return
a
result,
and
these
return
many
results
and
there's
a
you
can't
like
connect
them
directly,
but
you
can
call
this
function.
Judgment
holds.
A
But
basically
it's
not
it's
it's
like
a
not
what
do
you
say?
It's
a
racket
function.
It's
not
part
of
the
pure,
it's
kind
of
like
calling
out
into
the
base
racket
level
because
it
doesn't
fit
the
pure
mathematical
set
or
hold
on
a
second,
oh
there's,
a
question
in
chat.
A
A
A
Yes,
okay,
so
this
is
going
to
try
to
prove
this,
which
says
this
weird
name
is
the
name
of
the
solver
invoke
the
solver
on
the
given
environment
with
this
goal,
and
if
it
comes
back
with
anything
here
like
end
out,
that's
the
success.
That
means
it
succeeded
and
it
created
a
new
environment
that
contains
whatever
like
constraints
or
bindings
on
the
inference
variables
or
whatever
else
had
to
be
true.
For
this
goal
to
be
provable.
A
A
So
this
is
going
to
yield
a
list
of
solutions
each
one
of
which
is
going
to
be
an
environment
right.
So
if
it
was
successful,
it
could
be
like
environment,
one
environment,
two
environment,
three,
but
we're
gonna
check
that
it's
an
empty
list
and
I
guess
we
can
actually
we
don't
really
need
the
helper
function
to
do
this.
We
can
actually
do
this
here.
A
It's
just
weird.
I
think
you
write
it
like
side
condition.
A
So,
basically,
how
we
write
our
cannot
prove
goal
and
environment
is
by
saying,
find
all
the
solutions,
and
if
they'll,
if
that's
an
empty
list,
then
we
can't
prove
it,
and
this
is
okay
is
is
empty,
is
probably
not
how
you
I
don't
know.
How
do
you
ask
for
an
empty
list
in
a
racket.
A
A
The
caller
has
to
interpret
what
this
means.
So
what
I
mean
by
this
is
like
the
fact
that
we
can't
prove
something
to
be
true
doesn't
mean
necessarily
it's
not
true.
A
It
depends
on
your
assumptions
right,
like
first
of
all,
your
approver
might
just
not
be
that
smart,
and
so
maybe
something
is
provable,
but
it
can't
find
the
right
solution
to
prove
it
in
now.
In
our
case,
we
know
that,
like
the
ways
that
rust
can
prove,
things
are
limited,
so
we
don't
have
to
worry
about
that.
It's
considered
complete
meaning.
A
It
just
means
that
there
might
be
types
for
which
it
does
and
there
might
be
types
for
which
it
doesn't.
So.
My
point
is
the
fact
that
we
can't
prove
things
like
you
have
to
the
reason.
We're
kind
of
careful
with
this-
and
we
don't
just
want
to
add
a
general
purpose
negation
operator
to
rust-
is
that
you
have
to
interpret
it.
A
The
fact
that
you
can't
prove
it
doesn't
necessarily
mean
it's
not
true
unless
you
meet
certain
conditions,
so
in
the
case
of
coherence,
we're
kind
of
careful
with
how
we
use
it
in
theory.
So
now
we
can.
A
A
A
A
A
A
Oh
so
I
added
this
parameter,
so
it
takes
two
parameters:
the
name
of
the
trait
and
the
item,
but
I
didn't
add
the
name
of
the
trait
into
the
second
clause.
So
I
couldn't
find.
A
A
So
I'm
gonna
have
to
run
now
for
the
lang
team
meeting,
but
we
can
follow
up
more
on
this
and
I
can
push
this
stuff.
Obviously
we're
not
yet
at
the
point
where
it
kind
of
works.
A
Where
clauses
to
not
be
unifiable?
We
have
to
figure
that
out
and
then
we
have
then
we
would
add
the
negative
impulse
cases
which
work
a
little
differently
right,
where
we
sometimes
add
like
for
all
this
there.
It
does
not
exist
to
that
and
stuff
like
that.
A
Right,
I
guess
now
I
realize
the
last
thing
I'll
do
is
we
don't
actually
need
the
biff
buy
formulas?
We
don't
need
in
this
particular
case,
because
those
would
be
useful
if
we
were
going
we'll
need
them
in
other
other
ones
where
like.
If
the
parameters
are
unifiable
we'll
need
them
so
that
we
can
go
find
if
any
of
the
where
clauses
cannot
be
proven.