Previously, we introduced the notion of a tautology, which is a statement that is true for every assignment of the primitives in that compound statement. In this video, we want to introduce the opposite notion that is the notion of a contradiction. A contradiction is a compound statement, which is false for every possible combination of truth values of contradictions and tautologies are opposites of each other. Now the method that we introduced to show that something is a tautology was to construct a truth table and then show that the column in the truth table involving the proposed tautology contains only true values. Well, to do that, as modifying that procedure, you can also show that a contradiction is in fact a contradiction from a truth table. You would construct a truth table and show that every value in the column is actually false.  That is to say, p and not p cannot be a true statement. p and its negation cannot simultaneously be true. Now this is a very easy one to demonstrate because there's only one primitive involved in this one. So you have your primitive p, which means it takes on two values true and false. There's only two rows in this table. I'll use the negation as another column, which you switch the signs false and true, and then you take the conjunction of that, looking at these values here. A conjunction is only true if they're simultaneously true. True and false is false, and then false and true is likewise false. So this statement is always false, regardless of what the primitive statement p is. It doesn't matter. p and not p is always a false statement hint of a contradiction. Now I do want to mention that in the last video of this lecture, we introduced the notion of a logical equivalence, for which two statements are logically equivalent if they have always the same truth values. I want you to note that every contradiction is logically equivalent to every other contradiction. That is, you are a contradiction if you are logically equivalent to this statement right here. And similar things can be said for totalities, because a totality has t's in all of its columns. That is to say, in every row in its column. And therefore, all totalities are logically equivalent to each other as well. And so if you have one, you have basically all of them, because they're all logically equivalent to each other. Now, we're not going to place a lot of emphasis on tautologies, but we are going to put a lot of emphasis on contradictions. Because in the future, we're going to introduce a technique known as proof by contradiction. And the basic idea is we can prove something to be true by finding a contradiction. We'll make more sense of that in the future. And the contradiction we typically find is this one. But honestly, if we find any contradiction, it's logically equivalent to this one. So whether it looks like it has this form or not, a contradiction is always arrived by looking for this statement right here. And that brings us to the end of lecture nine in our lecture series. Thanks for watching. If you learned anything from these videos, please like them. If you want to see more videos like this in the future, subscribe to the channel. And as always, if you have any questions, please post them in the comments below and I'll be glad to answer them as soon as I can.


It's really a privilege and honor and you know if there was the equivalent of celebrity sightings in the marketing and advertising industry this would be it. Many of the women that are here have been my role models and peers and mentors and friends for many years and it really feels like a real celebration. Great women leaders actually know the balance of both feminine and masculine energy so I think their ability to switch on their femininity but also be able to bring a lot of the things that are successful about being a boss. Sometimes those sort of span both genders but I think the biggest thing is I think femininity and feminine energy is now in vogue. Empathy, collaborative skills, multitasking are all things that now every leader whether it be a man or woman are looking to do so I think women are going to be the new bosses and you know I think we have the advantage.


What's going on everyone Sam here with late in sports cards have been 22 panini chronicles football hobby 12 box full case break number 2 Random division style so look again at your random results as always you can find those on your website under the results tab as well As the link that's in chat Yeah, we do a prism choice tiered random team styles a pretty good one 10 box break We generally will do of those. That's I think 200 dollars on a buy-in 10 autos to that bunch of numbered stuff If you want to do like a PYT we have there's pretty good teams like the trail blazers will be available for like around that if we do like an Optic break or four box or a prism Select has been pretty fire this year so far as well Trying to think what else would be contenders when we do contenders. That's always a fun break We do we do 10 box Tuesday Which is like a 10 box mixer of different products generally from different years sometimes those are around 200 maybe a little over Those are always a lot of fun, too. There's a lot a lot of different ones for sure. All right box one. Good luck here, buddy Yes, no, let me double check hold on CD three cool in a job. Oh got a Kenneth Murray ascensions auto for the AFC West. That's when they're It's Rick Wollin 2199 NFC West Kenny pick it Justin Jefferson to 199 for the Vikings Hutch and John Dotson Did not sorry Sean That was kind of a bot move. My bad.  Nice pick it I would say Brock Purdy silver Brock Purdy base and Vylus Jones very nice great pack right there great pack It's a green pick it to 70 or 49 even better like a legacy update Tremac ride Brock Purdy Baker Mayfield Rams Jersey to 199 not gonna see too many of these. I have to say that's pretty cool Baker Mayfield is a ram NFC West Darren Bland to 199 Willis and Josh Jacobs No Devontae Devontae Adams that is Quay Walker to 49 7 to 49 that's Jersey numbered Christian Watson both of those going to the AFC north prison black Christian Billy Zappie John Dotson silver score update Hutch and cave on it to do box two Baker touchdown maker man five to go on channel twos full case of this divisional Style five to go Let's get that sold out everybody Sauce Gardner 17 to 35 Jalen Petrie orange legacy update auto for the AFC south Nice one there AFC south canine to 199 Seahawks Hutch prison black Devontae Adams Silver Garrett Wilson prison black for the AFC east Chris Olave and Skymore Tremac Bride 149 NFC west on the red Kenny picket flux and cave on to do There's a George Kittle for the NFC west to 99 on the photogenic Johan Dotson and a Brock Purdy behind it as well Purdy Got Kyler Murray NFC west 112 about a 199 for the Cardinals or for the NFC west nice one there in the Chronicles jersey Uh, Tyree killed a 199 AFC east Olave and Derek Stingley The Desmond Ritter rookie as well as a Sam Howell Christian Watson auto gridiron kings to 199 NFC north Christian Watson very nice Silver Malik Willis Kyle Hamilton dynegon and Johan Dotson We need to see uh, Justin Poccarotta from out of the show That's what we need more than we need air breed sounds like The golf guy in the morning today Done golfing in the morning And then coming into work fair silver George Pickens, uh prison black Matt Corral and Isaiah Spiller checko So Nico Collins ascension auto for the AFC south Very nice AFC south that is Eric arts silver John Dotson sauce gardener and James Sony gray nice 31 to 75 Sam Howell orange Prison black auto going to the NFC east congrats Stephen P Here you go Stephen All right, so on there buddy Jalen Hertz to 199 Bailey zappy chrome and dany gray. I would yeah Checko burrow Shravan Walker Shravan Walker again Uh, Brian Robinson jr. Luminance update to 149 NFC east Josh Allen prison black and sauce gardeners printing plate that is going to be Uh, Gabe Davis from base rookies mosaic choice red Uh, AFC east nice one there. I like that they put these printing plates in this year. That's really cool Kind of like a national treasures vibe to it to some degree Look put in the uh, like a lot of times you'll get like one one one a case Uh, Chris Olava 225 on the blue Kenneth Walker dynegon and Cooper cup So AFC east picking up that Gabe Davis printing plate. That's cool. I have one of those in our last break. Desmond Ritter There's a quay walker, uh jersey to 199 for the NFC north Uh, josh allen two 99 AFC east shravan walker and cd land Spox here everybody getting guys channel two with kyle And donnie five to go still On their full case divisional channel two John mechie 17 of 99 AFC south because I got another error box because that's going to be also a Malik willis auto 18 of 25 AFC south There you go, eric sweeping the hits in that pack Very nice. Garrett wilson silver prison black gresaul and chris olave silver malik willis legacy update perty on the dynegon and david a job of chris olave photogenic to 199 sauce gardener prison black chris macaferi perty chronicles baserookie damian pierce uh great iron kings do 49 AFC south chris watson and desmond ritter playoff momentum It's going to be your photogenic jersey to 199 for the AFC north Nice one there, steven Trey mcbride to 99 NFC west cunny picket dynegon and jesson fields Take one here Let's see a shield Desmond ritter rock perty rookie Jill and petrie aiden hutchinson silhouette nice one there 26 of 99 on the crown royale auto Congrats to the a or NFC north there NFC north tom brady orange prison black to 75 Kenneth walker and chris olave That orange is pretty sweet brady map burrita for the giant school one there 17 of 50 And six of 10 going to the NFC east that is going to be john dotson. I'll go to the same place as the burrita Pickins and david bill garret wilson finally a number dynegon green garret wilson to 49 11 of 49 grads on that color match AFC east chris watson and james cook job of silver in hutchinson Kenneth walker josh shakeups Tante foreman bailey zappy brissol. Ooh That is a printing plate downtown cam newton. That's pretty awesome. Congrats. AFC east That's so cool, dude downtown printing plate cam newton from 2020 optic football that's a blast from the past right that's cam newton a patriot too There you go tiktok. That's pretty sweet. It's cheap. It's a no, but am I there you go tiktok nobody in chat But uh to 99 jalen hurts bailey zappy on the dynegon and garret wilson Yeah, that's kind of nasty actually they have a bunch of printing plates from older products in this which I do really like That is that is a great great edition Uh timeless treasures bailey zappy 12 of 99 jersey auto for the a of c east nice one there Get through that printing plate in the recap the uh, you just just uh newton one. That one's kind of cool silver malik willis damien pierce and shrey london berks Walker, there's a damien pierce timeless treasures jersey card for the a of c south 240 Nice one there josh allen a 199 eight sand williams and jamison wilkins as well and guys channel two Still five to go Lincoln bio tiktok if you want to buy group rake spots or personals Uh aiden hushinson prism black silver auto and there you go, uh, nfc north Very cool one there. We've got a red damien pierce. That is an awesome color match to 99 with the battle red bailey zappy prism black david bell can you pick it photogenic? I know I heard you guys talking about that re saw silver What'd they add in instead? I That's not gonna be fun to play against That'll be fun to have silhouette james cook 28 49 cook rook. Nice one there a of c east jersey auto 249 sliver george pickings bailey zappy chrome treylon berks Christian watson aiden hutchinson to 99 for the, uh, nfc north chris olave and garret wilson Kittle There's a joke burrow nice one there to 199 for the bangles Uh treylon berks to 199 kind of thwacker and jaymel Christian watson 74 of 99 for the packers nfc north sam williams and james cook Cook rook see Down to four to go four to go on channel two everybody four to go. Let's get that filled up everybody four to go Four to go kyle and donnie rip it a full case like you see here same style everything random divisions Random divisions silver drake london score updates, uh chris olave prism black calvin austin rishad white nice one there for the buccaneers great iron kings auto going to the nfc south Uh, alexandro scratch buddy like willis to 99 that is a jack jones and jelani woods can hutchinson to 99 for the, uh, nfc north jmo and a sake one barkley Uh, damian pierce 18 of 25 afc south on that's one john dotts and prism black commanders nfc east Let's pick one in here. It feels like a lot shield shield shield Christian watson trevon walker one of one tag baby. Let's go afc south eric are congrats buddy Hell yeah, man One of one two cases of this we'd rip we've ripped two one of ones Trevon walker One of one in the platinum foil and vaughn to be freaking out about that one. That's actually really sick. I like that Uh, 73 of 99 is jalen hurts pierre strong jr. And kenneth walker trevon walker kenneth walker Plates and patches jersey auto 32 of 99 nfc west On that one nice canine Malcolm rodriguez silva jordan davis and romeo dobs. Hello forest Hello mr. Moons One second yellow card on forest. Oh boy Oh boy channel two guys four to go just four divisions left Four to go on channel two full case of chronicles random division style guys Let's get that filled up for kyle and danie silver chrysolave Resolve and k-bomb to do pretty chronicles three to go no way no way Three to go three to go everybody Saus Gardner 11 to 25 two colored patch for the jets There's a tyler algear 249 chrysolave and bryan robinson. Oh man. Oh man I think I got to give you guys a link again. That's gonna be three two go on channel two Donnie there's one of the guys on channel two right there. I don't know if that's a good thing or a bad thing Three two go everybody. Let's get that filled up. Yeah, let's get that filled up Baker may feel to 199. I know it's not we're not paying them to stand around Not paying them to look pretty I mean I can't do that for pretty so Romeo tops five of ten. That's nasty Like the blue mojo very cool on the essentials update for the nfc north Those essentials are nice. They're really really clean. They're on like these are awesome the photogenics. Yeah. Oh my god, dude Like look at look at this thing. Which one one of one trade on walk Right to 99 darin bland sauce gardener prism lack chrysolave and then take a look at this This is a new addition this year. I'm pretty sure. What is it? Um They add in like one or two a case you get a printing plate from like previous years That's at the downtown from 2020 optic for uh ham newton. Isn't that awesome? Isn't that awesome? That is really really cool Redemption usually a printing plate guy, but that's cool. Yeah, uh, brian robinson jr Score premium rookie signatures for the commanders nfc. Um Going to the nfc east nfc east on that one Bailey's happy silver prism black rock purdy dionagon and serique woollen Prism blacks look nice. They look really good. The color looks really good too. Like there's uh Sam howl orange right there. Yeah, we pulled we pulled one of those earlier. Oh, yeah. Yeah, I'm same one. Hell, yeah We pulled 270 fits of that card tonight 36 of 99 some ear white blue for the uh afc west k9 and tyler algear Uh two out of select basketball So far still on the select. Yeah two out of chronicles And then I think that was it actually Hopefully there's one sitting in that divisional Yeah, right we got in there. I bet there is dude I bet there is there's probably going to be at least one or two printing plates.  I don't think we've got uh, we might have one printing plate In one we did earlier one we did earlier was but I think we got one Forest is high. Hi forest any picket Uh sauce gardener There's a cd lamb to 199 photogenic for the uh nfc east jalen petrie brian robinson jr I want to look at the checklist and see what the parallels are for the photogenics I think that's the set that I might want to go. Yeah, they're super clean super clean. We're really cool Joe burrow, uh, smear white is going to be your rookie auto 235 uh afc west playoff momentum the dynagons look great again too uh red kenneth walker dynagon 60 of 99 that's going to the nfc west like pull the green of uh Um, Garrett wilson earlier. Yeah, how is shawn doing? i'm struggling i'm tired. Yeah, i'm not feeling anything. I'm tired. I'm tired. Shravan walker 7 to 35 nice one there for the jags. I have seen south eight My home's prism black and chris 11. You know, shawn's tired. He's not talking.  Yeah, he's out of it at that point. Yeah, uh christian walks in 62 of 75 for the nfc north Silver christian watson, uh, can he pick it prism black and a day I need a day to myself Day not golfing.  I like Refuse to do anything on the days I break like I can't physically do it. Uh, silver quay It's my day. I like going to sleep right after I play. Yeah. No, it's the way to do it honestly I call now Next box Garrett wilson nice photogenic jersey card 56 of 199 afc east Congrats afc east jelani woods the 199 malik willis prism black And jamar chase for ridder 36 of 99 nfc south nice one there. Hey, can you pick it prism black? And kind of walker silver k-von tibido Chris olave dynegon and jelani woods Three to go on this guy this guy right here to my right on his jack On his chronicles full case It's true Only three five and 49 Uh to nfc north. That's in hutchinson smear white and romeo dobs I think sound like a lot of spots to me kyle Sounds like very few if you ask me Sean's doing all right All right, garratt wilson crearon king signatures red going to the afc east Done, dude. The golf killed me. This is so tired The golf killed me afc east is uh garratt wilson on the redemption silver brissol Afc east can you pick it and calvin austin?  Animal oh nfc south keeshawn johnson 30 of 50 Invincible ink very nice Uh paschema homes photogenic to 199 for the afc west. That's so cool Petrie and sick one Again guys, here's your link just three remaining spots over on channel two full case Chronicles random division style three to go three to go. Let's fill that up to go And three to go that is it that is all three to go kyle and donnie Gonna be taking that one on Calling you the best possible cards they can Toe yankees the seven run lead over the a's A checko garratt wilson matt corral geno smith nice one there to 199 on the jersey card for the nfc west That is tyler algear nfc or no not tyler algear rishad whites for the nfc south same division different running back It's a 99 george piggins prison black and garratt wilson My dad said that hermon had a no-hitter too See if that's still the case Yeah, domingo hermon with a no-hitter right now In the bottom of the sixth Yeah, oh perfect game alert Oh, man From the yankees tom brady silver sauce gardener domingo hermon bailey zappy and sauce gardener That's ox loss to miami again Someone was saying they're just giving them batting practice today bailey zappy. There's a photogenic Javante williams to 199 uh jahan dotson aiden hutchinson david bell great iron kings rookie auto to 75 a of c north Then a of c south is going to be to a tag of i lower no a of c east excuse me to 99 Brock purdy and i say a spiller something else thing Yesterday was 10 runs now we're below 500. Oh man Uh brian robinson jr. 1 of 49 Actually bad now tanny gray James cook there's redemption carrot wilson place and patches rookie jersey autograph prime nice one there going to the a fc east Not well not well for us not well Not well, I did not I will give you a hint of how bad it went Of this is indicative of my performance. I did not get Padres orials the mani machado answer, which is the easiest I'm a bot resaw silver keth walker prism black and nick chubb Appreciate that must thank thank you buddy Uh a of c east a fc east Yeah, I I stumped today on the grid for us really bad really bad Put area to for that He played on the Wait, he played on san diego when I don't remember that I remember him on the orials obviously Um like a little bit When did he play I don't remember that. Why do I not remember him playing there k. Montevideo 6 to 35 orange rookie auto nice one there christian mccaffrey to 99 Garrett wilson and brie salt. You know what I'm pissed about for the ace orials I'm really pissed about this. I put Jorge Mateo and he We traded him to the a's for sonny gray And I guess he never debuted and then he played in baltimore for a little bit I was so pissed about that So pissed about that That that didn't count Freakin live it about that sauce gardener to 199 photogenic. She's had a fc east rake london mack growl Is bad in san diego?  Oh, man. Ain't no place in here Now we really got some bots We really got a bop lobby rock purdy pike wanthorton johan dots and john mechie sauce gardener to 199 Uh, in hutchinson dine-a-gon and josh Allen Isaiah pacheco on the jersey card to 199 for the chiefs a of c west Nice pacheco Malik willis and bryan robinson june Purdy rookie silver kenny picket devin loyde and malik willis Do a quick recap here guys 18 up 18 down for herman herman It's 11 era and four stars in 2021. I genuinely I do not remember that forest Thanks, ben appreciate that buddy Gino smith garret wilson billy zappy one of one printing plate cam newton. Do you like that one forest?   Justin afc les Got sam howell nice one there to 75 Uh for the nfc east and then a one-of-one trayvon walker For the afc south that'll do it for the break guys. Thanks again for the fill up next is number three


Hi, everyone. My name is Noor Zafra and I'm an attorney with the ACLU. Part of my work at the ACLU is I work in the National Security Project and in that project what we do is challenge abusive government policies in the national security space, challenge abusive immigration and criminal law policies as well. I want to thank Simon and ArtsLink for putting together this program and for inviting me to give a short presentation. So what I want to do in my talk is build upon this concept of solidarity, but I want to look at it from a slightly different angle. You know, because in my work what we see a lot is that different government policies that are discriminatory and abusive actions by the state are often interconnected and we see this repeatedly, right? A policy can be enacted as a national security measure, but it ends up having negative impacts and discriminatory impacts on certain groups of immigrants. So that highlights for me the fact that it's all the more important for our resistance to these policies to be similarly collaborative and intersectional because these policies themselves are interconnected. And therefore the resistance to them must take into account the intersectional nature of these policies. And I want to use the example of the Muslim ban to further highlight and elucidate this point. So when the Muslim ban was enacted, the underlying or the primary rationale for the ban was the Muslim administration basically said that the president has unchecked power as an executive to exclude anyone he wants based on, for national security reasons, right? That was the underpinning rationale of the ban is that the executive, he has been given this power to unilaterally decide who can and cannot come into this country and if the president unilaterally decides that a group of people pose some sort of national security threat that he has the power to exclude them. This rationale was upheld and endorsed when the Supreme Court allowed the ban to stay in place. So in doing so, you know, if you read through the court's opinion, a big part of the argument that the plaintiffs made was that you have to look at the president's statements, that his deputies and other people in the administration made. And if you do that, it's fairly clear that this policy is not based on national security, but that this policy is a xenophobic, Islamophobic, racist policy that pretty much enacts the xenophobia that Trump kind of rode on during his campaign and into his presidential tenure. The court ignored all that, saying that's irrelevant. And instead basically agreed with the Trump administration in saying that the president does have unlimited power and if he says national security, then that means that national security is actually what's at issue and that can be used to exclude groups of people and that can be used to enact a discriminatory immigration policy. So now fast-forwarding to a couple months later. I'm sure many of you read about this last week, the president enacted an asylum ban that essentially prevents people, individuals migrating from Central American countries from receiving asylum. And it's interesting because if you look at, so this ban was also enacted via a presidential proclamation, unilateral executive order, and if you look at the text of this proclamation, it relies on the very same authority that underpinned the Muslim ban. Namely, that the president has unchecked executive power and that if he says a group of people pose a national security threat, that those individuals can be excluded because he has the power to do that. So, I mean, what this connection between the Muslim ban and this new asylum ban shows is that policies and rationales and reasonings that are used in one realm to exclude one group of people, if those are sanctioned by the courts, which, you know, which the Muslim ban was, they will very quickly and can very easily be used to target a completely different group of people under a very similar rationale.  But the court, but the Supreme Court, when it refused to look at all that, essentially sanctioned the use of national security as a sort of pretext to allow the president to allow the executive to discriminate. So, that just shows some interesting connections between, you know, a policy that was designed to exclude Muslims and then a policy that is designed to exclude Latino refugees and migrants. And the parallels don't stop there. I think they go a little bit further. So, this, you know, I spoke about how kind of in the domestic realm and the realm of domestic policy, domestic law, there's these interconnections between national security and immigration. That extends to the global space as well because if you, you know, in both Central American countries from where these migrants are coming and in the Middle Eastern countries or primarily Middle Eastern countries from which Muslims have been excluded, the U.S. has a pretty long history of imperialism and war-making and military intervention, right? And it's not a coincidence that the U.S. has been involved in very negative ways in both parts of these worlds and created the conditions from which people are fleeing and then when those people are trying to flee those conditions and seek refuge in this country, we're turning around and excluding them. So, you know, an example, in Guatemala, the U.S. and this is, this is like, you know, a history that throughout the 80s repeated itself in various Central American countries. In Guatemala, in El Salvador, in Honduras, in Nicaragua, in all these countries, the U.S. supported right-wing regimes that were brutally oppressive towards their people and it supported military coups that created, you know, decades of violence which is, or the effects of which we're seeing to this day and the effects of which are precisely what people are fleeing from. So, the U.S. is not, you know, some kind of innocent bystander when it comes to people all of a sudden showing up at its borders. Like there's a history and a global history to this that we have to recognize and I think in order to have policies, immigration policies that are moral, that are compassionate, we really have to understand history in a way that I think oftentimes in this country we try to ignore. We have a very short-sighted view of. Similarly, in the Middle East, the same story repeats itself, maybe on a little bit more of a recent timeline. You know, when the U.S. invaded Iraq, it destabilized that region and created conditions that led to the rise of ISIS, which is now destabilizing Syria, which is where a lot of these refugees and immigrants that we have banned are coming from. The U.S. is complicit in the Saudi-led war in Yemen, which has created one of the worst humanitarian crises of our lifetimes. And we've always had kind of like tension with Iran ever since we supported a coup that overthrew their democratically elected prime minister, and that's just been an ongoing source of really brutal economic and foreign policies. So I think just pointing out these intersections in both the domestic space and globally to me highlights two points. The first is that these links between the Muslim ban and the asylum ban and the links between these bans in U.S. foreign policy emphasizes the fact that our resistance to these policies has to be intersectional. And we have to understand that one law, one group of policies that's used to target one group of people can easily be used to target a different group of people and that we've seen through the Muslim and the asylum bans. At the same time, our resistance to these policies also has to take into account a sort of global understanding of the issue in a global framework because oftentimes policies that are enacted here in the U.S. have global repercussions and people across the world feel repercussions of things that we allow our lawmakers to sanction. So I think those are just two important principles to keep in mind when thinking about how do we kind of continue to resist abusive and discriminatory state policies. And then just one last point about the usefulness of courts. I think when the Supreme Court upheld the Muslim ban, it was a pretty disheartening moment for a lot of lawyers because just by virtue of our profession, we put a lot of faith in the courts. And I think that highlighted for a lot of folks that while maybe the courts can continue to be one avenue of redress, that they should not be the exclusive avenue of redress. And the real organizing and the real resistance and the real change happens when people organize and people get together and people change the narratives and change the stories that we tell about others because the courts never lead change, they always follow change. And I think we as people and we as communities and we as people of conscience have to create the change and change the narrative so that the courts and the legal system can then follow. Thank you.


This next patient unfortunately has a known primary neoplasm rule out metastatic disease. Let's look at our images. We only have one, a sagittal T1 non-contrast MRI. The Climus doesn't look so good, does it? Take a gander at the entire image, it's a single image, and we're going to turn our attention to the question. Question number one. The most common metastatic lesion to the pituitary gland or stalk is A, breast and prostate. B, lymphoma and lung. C, breast and lymphoma. D, breast and lung. E, lung and colon. Well, I'll tell you the answer now before we go back to the case. The answer is breast and lung. By a long shot. Let's go back and look at our imaging. Why is this not infiltrative nasopharyngeal carcinoma? Because we don't have a mass in the adenoids. Or we haven't shown you anything in the phosphorosimular or torus tuberis. Why isn't it lymphoma? It could be. But that wasn't the question that was asked. And lymphoma is far less common than metastatic disease from the breast and lung. Why isn't it a cordoma? It's not lobulated. It's not cauliflower-like. We didn't show you any T2 hyperintensity. The patient has a known primary, and also that wasn't one of the choices. Cordoma also has a pretty high frequency of calcification and more heterogeneity. So the question was a relatively simple one. You just have to know that breast and lung are going to be the two most common lesions that go to the pituitary gland and the pituitary stalk, even though this lesion went specifically to the clivus. But there's another observation that perhaps you should have made, which is there is a lesion in C2, a metastatic lesion at that. So this is metastasis to the infracellar region, to the clivus, but the point of the case is breast and lung, the most common pituitary and stalk metastases.


Hi everyone. Welcome to a real conversation between myself, Liz Wade, and right beside me is Adam Navas. Hi Adam. Hello Liz. Hello everyone. And today we are going to talk about our featured program, Northern Lights. So if you have not heard that program or seen that program, you can visit our website, www.spotlightenglish.com. And there you can listen to it and follow along with the script. If you would prefer to see that program on YouTube and follow along on the script that way, you can go to the little I in the top corner of this video and we will provide a link for that there. And today we'll just have a real conversation about that program. We've both listened to the program and looked through it. And we were talking about this a little bit before we started, but this is kind of a sciency program, isn't it Adam? Yeah. I'm excited to talk about this program and we can get into the Northern Lights and the program itself. But it's a very, I love topics or things in the world that are highly sciency. Like why are these Northern Lights happen? Electromagnets and the sun. But that are also like beautiful and inspiring and just how they can evoke an emotional reaction. So it's that it's that nice combination of things.  And we are going to put a picture or a little video, it depends on what I can find of the Northern Lights in this video. So maybe I'll just put it right here so that you can see what the Northern Lights look like. So you might see the Northern Lights or or even just some other thing in nature that you might wonder about. And what I what I love about spotlight is that, you know, you are practicing your English, but you're also learning a little bit about something in the world. Like why does this thing happen? Or what is it? What is it in? What is its place in culture? And before we get started on this program, I also wanted to mention that we have memberships now for Spotlight English. And you can check out memberships just by hitting the join button under this video. And that is not if you hit the join button, you're not paying any money right away, right? You can think about it and look at it. So feel free to hit that join button just to learn more about what our memberships are like. Memberships have a have different levels. So at the basic level, you'll get special emojis and badges to use on our channel. And then also we thank our supporters, any supporters, any members in every video. And then at an advanced level and the conversational and fluent levels, you also can get access to exclusive member videos, PDF scripts and also personal video shoutouts and be a member of our Facebook group. There's lots of really cool things there. And I have loved seeing our membership grow. So if that is something that you are interested in, you want to put more time into your English learning with these resources, please just hit that join button below. And while you're looking at those buttons below right now, just click like on this video. And if you're not subscribed, please subscribe, hit the little bell and you'll never miss any of our content. So whoosh, back to the Northern Lights. So, Adam, you were saying this program is a sort of a science program. So this program really goes through describing what the Northern Lights are. And again, I think I'm going to put another video here. There's just so many great pictures of the Northern Lights. Really, they are just lights that you see in the sky. Yeah, energy that you see in the sky in the north. And they're also called Aurora Borealis, which is a very fun name to roll around in your mouth. Yes, it sounds, I'm surprised my kids don't go to school with someone named Aurora Borealis. It seems very trendy. Yeah, it's very fun to say. But then what I love about this science program is it also has the stories of how the Northern Lights are perceived in cultures. So some of these older cultures that have noticed these lights over the years, what do they think they are? And then it goes into sort of the science explanation of what the Northern Lights are and ends with such a great poem, which that is a really great way to practice your English, but also talking about this particular thing. Well, I love that we included that poem because like you were saying earlier, humans, and this is kind of what we do a spotlight, we see something and we try to make meaning of it. Right? And sometimes, let's say something that is like an earthquake. You see an earthquake and it used to be people would be like, oh, the gods are angry and they're shaking the earth or they see the Northern Lights and they say, oh, those are our ancestors or those are our spirits dancing in the sky or they see the stars shooting and they make meaning of that. Right? And we make meaning in a, we kind of sometimes say, well, we look at science and we'd like to explain things to make meaning. But it's still, it's true. We have those reactions and we want to, you know, it's like the double rainbow and it's like people get excited about seeing these things, maybe not an earthquake or something like that. But it is, we have those parts inside us that we want to react to things and we want to get excited about what we see, even though we might have an explanation for it. Right. What I love is like all of these little, yeah, like, you know, making meaning of things, but these lights have been happening for the whole history of the earth. And it's interesting to me to see what these older cultures thought these lights were, what meaning they did give to these lights. Yeah. You know, the talks about the Viking period, they were images of young women who were dead. That's a little bit. Okay. Or they were like huge fliers in the north or, you know, people believing that they were dead spirits coming to visit them, which in some of these are like nicer stories, but then the scarier stories or the, you know, that they weren't that they weren't good things. Yeah. I think it's really interesting. So like, I mean, how does that, how does your interpretation of the northern lights work in your life? Right? Like, cultures? Because of course, there are many things that are good and bad and clearly so. But there are also things, whether it's northern lights or maybe a lucky number or something that that we give meaning to that it happens, right? It's more about us than it is about the thing itself. It's what we need at that time or it's it's what we fear at that time. And I think it is, yeah, the northern lights are a great, they force you. So I've got it. So I've seen the northern lights. Really? Yeah. I'm in it because you jealous. Well, the conditions where we live in Michigan, we aren't like it has to be just right and it has to be very dark. It's true. I have heard that it is possible to see, like, you know, that it'll be on the news or whatever. But yeah, it's not common to see them here. No. And I'll be, so you must have been further north. We were, we were further north. And I was a little younger. But I will be honest, there are certain things in the world or the universe in this case that kind of freak me out. So one of like, for example, one of those things is that your heart can never stop beating. Yeah. Like when I think about that, and I think your heart, like when you're sleeping from the time you're born to the time you die, your heart has to just keep beating. I don't like it. I also don't like thinking about, like I know that scientists have said the earth is, it will eventually fall into the sun, but it will be like a billion years from now. So when I think about the solar system and the universe and that our earth just goes around the sun and that these northern lights are caused by the sun's energy, this big fiery fall of energy, like I get a little panicky sometimes when I'm like, well, what if it just stops? What if it just like goes and it all ends? Sorry, spotlight friends, you're getting a little insight into this is a little view into your mind, Adam. I don't think about these things all the time. Yeah. But there are times in my life when I see this thing that is beautiful and inspiring. And I think, well, we're all going to die. Well, what I thought when I read this program, I did actually learn what causes the northern lights I had not known before. Yeah, so you're saying that the energy off the sun, so I think it's sun flares, right? It's like sun storms off the sun. And then they reach the earth, but they're affected by the earth's magnetic field, which I think is really interesting. I'm not sure I'm freaked out about it. Well, it's not like I see the northern lights and want to cower, but my brain thinks the natural, the natural like, oh, I have to think about this, which leads me to think about that.  How we have no control over any of it. Yes, the illusion is broken. This science program got like really deep philosophically. Yes. Well, you know, we, I think it's a fascinating program. And if you haven't read, or if you haven't watched it, please go do. We have, we have several programs like this. I don't know if we have a science and technology playlist. I don't know. We do have a program about the sun specifically, which I think is it's, well, it is actually one of our most popular programs. So you might want to check out that program about the sun before we, yeah, and I will make a playlist about science and technology. I think that's a really good one. Speaking of like other questions of our world or things, we do have a mini playlist about our bodies. So like, why do I sneeze? Why do I hiccup? And why do I, there's another one that I always forget. Why do I sneeze? So like a chew or hiccup? No, it's not cough. Anyway, check out that playlist. It's a mini playlist. It's only three programs and it's all really interesting content. But what I would encourage you to do is to really read through this poem at the end. I think it's just, it's, you know, now that you have the context of the Aurora Borealis or the Northern Lights, it's a great way to practice your English. But it's also a great way to think about things in a different way. So with that encouragement, again, if you liked this video, please hit the like button below that really helps us spread our videos on YouTube. Subscribe and then hit the little bell so that you never miss a notification. Check out joining. We have a lot of resources there and we'll be adding more resources every week. Again, you can request whatever program scripts you want for a PDF that you keep forever. Yeah. And I hope you keep listening to Spotlight. Make sure if you're listening to this as a podcast, check out our YouTube so that you can see what we look like. If you're listening to this on our website, same thing. There's a link for each video. Check those out and yeah, continue your journey. And yeah, I guess that's all we have to say about the Northern Lights. I think we've covered all that we know about the Northern Lights. Yeah. Leave us a comment below. If you live in the North, have you ever seen the Northern Lights? Are they common in your area or would you love to see the Northern Lights? Or what sort of things do you see in the sky where you live? I would love to see those answers. Yeah. Anyway, until then, listen, watch, practice and learn Spotlight out.


What is up everybody, Jason here for jaskyscasebrace.com. We just sold out 2019 NT football. This is a one box pick your team, ran a number block for 12 different teams. Got it including chasing some Tyler Murray rookies guys with the Cardinals. Got some big teams in here from the Cowboys, Jaguars, Giants all the way down to the Bucks. You get a piece of these teams via the serial number. We go by the first number on the left side of the serial number dash. And of course any and all redemptions go automatically to spot zero. Any one of ones go to spot one. So here we go guys, here's the dice roll. Let's roll it. You got us also one of two, three times. One, two, three. Three times, three, three. Joseph down to Francis. And three times here. One, two, three. Boom, boom. Eight down to two. All right, so Joseph, you got spot eight. Mark with three, Brian with four, Jason with nine. Ten, any and all redemptions go to spot zero for you. Stephen with six and seven or seven and six. Christian with five, Will. Any one of ones will be going to you for these teams. And then Francis with spot two. So again, obviously I just copied that for the sorting team just so they know which teams are part of this. And now I'm just gonna make it look nice. But coming up in a separate video guys would be the break. And good luck guys.  Thank you.


Hello, everybody. How are you doing today? So what I want to talk about today is a framework for reasoning about rather large class of problems that I've had come up in my work over the last several years. Basically, I want to take every problem that I wasn't smart enough to solve individually and try and throw them in a blender and solve them all at the same time. That's what propagators are to me in some sense. Most of the math I will be talking about here, I might be somewhat bad at predicting the next slide because I have to have this in a mode because I'm going to be doing some live coding in the middle here, comes out of this book on lattices and order by Davy and Priestly. And if you just want to dust off your mathematical chops, it's a good book to learn a lot about what order theory is and like semilattices and lattices and ways to stick them together and whatnot. And hopefully, throughout the course of this talk, we might find some actual practical uses for these structures throughout computer science. So I'm going to introduce the main workhorse of this when I try to get to what a propagator is. In order to be able to even define what a propagator is, I'm going to need to introduce some algebra. And so what I want to define are the properties that go into what I'll call a join semilatus. And so a join semilatus is commutative. We use this funny little or like V to refer to join. It's associative, it's idempotent, and it's unital. So we have, if you know what a monoid is, that covers the associative and the unital bits. The idempotent means it works like max or min, right? And the commutative, well, max and min are both commutative as well. And so those try not to actually be semilattices if you have a, or join semilatus if you have the bottom. So if I ever use the word lattice throughout this talk, just assume that I actually said join semilatus and I'm just being sloppy, okay? There are some uses for having a meat structure as well as a join structure, but they go beyond the scope of what I want to talk about today. So, given a semilatus, we can construct an order. It's basically, is there an element that I could join with a to get to be? And so this sort of implies, like I'm gonna draw the things that are, like the result of joining two elements are gonna be drawn higher up in the diagram. And there's a notation, like a diagrammatic form that mathematicians tend to use when they're talking about these semilattices, which I'll call a Haas diagram. And a Haas diagram is basically just drawing all of the things that have an immediate, like this is less, like 0, 0, 0 in this case is less than or equal to 1, 0, 0. But there's nothing in between. And so what this little funny dot thing here is saying is this is less than this and there's no, nothing you could join to get to in the middle. So those are the edges we draw. I don't draw an edge from 0, 0, 0 to 1, 1, 0 because it's implied by transitivity. So this is just some notation, some preamble stuff so that we can actually talk about things in the same terms. And examples of these kind of joined semilattices, I can draw like a power set, whereas I'm basically unioning to go up towards the top. My unit here is that I start at the bottom. I could also do, if we flip this entire diagram over, I would have a completely different joined semilattice where I start with the universe of all the things and I do intersections to collapse down to smaller and smaller subsets. So each of these is an example of a joined semilattice. This is an example that I took from an old textbook. It's perhaps a little bit dated with modern gender norms, but it's another kind of standard example. So what is a propagator? The idea of propagators goes back to this paper or this tech report by Alexi Radoul and Jerry Sussman. The ideas actually go back into the 70s. This tech report's probably like six years old or something like that. It went into Alexi Radoul's PhD thesis and it's a wonderful read actually. This book doesn't take, like this tech report doesn't take a lot of math to understand, mainly because there's not a lot of math and rigor behind it. It's a sort of great enthusiasm building. Everything here is a propagator. Yay, let's go. Like there's a sort of way to push information around. And now that I've established what joined semilattices are, I can say what I consider a propagator to be. Okay, because it's not in that thesis. What I consider a propagator to be is a monotone function between joined semilattices. So I have to introduce what monotonicity is. But the joined semilattices are the workhorse. They're what I use to hold information. So monotonicity is just the property that if A is less than or equal to B, then F of A is less than or equal to F of B, right? But this'll be isotonic, whatever, if you wanna be more inordinate about monotonicity implying a direction. So monotone functions between joined semilattices and a propagator network will be a graph where I have propagators as my edges, pushing information around, and joined semilattices as my node. And the execution strategy is something like this. Whenever I gain information, whenever my joined semilattice, like whenever I move upwards in my joined semilattice, whenever I join and I'm not at the element that I was previously at, what I'm going to do is make sure that all of the outbound propagators from that joined semilattice will eventually fire and push the information that they have to the target joined semilattices. And the reason that I'm using joined semilattices instead of some arbitrary monolate or whatever is because once you have this and you have a couple of extra nice conditions off to the side, which I'll come up with a set of sufficient conditions throughout the rest of this talk, it turns out that it doesn't matter what schedule strategy you use to pick which propagators are going to run to push their information around, as long as they all eventually run. So like whenever I have, whenever I gain information, I make sure that all of the other propagators that are coming out of this thing are in queue to eventually run. Whenever I run them, I put them back to sleep. If somebody else wakes them back up, I make sure that they, so I just basically run through this set of active propagators that have to run, push their information around by joining it into whatever joins, whatever semilattice they're going to write to. And when this terminates, it yields a deterministic answer even though we had non-deterministic scheduling in the meantime. Even if I had partitioning in the network, where I was in the middle of this work and I partitioned my network into two different pieces, then we came back together because there was a big network thing. And so the use cases for propagators cover pretty much anything where I want to do a whole bunch of parallel computation and crush information that can kind of be defined this way. So again, naive propagation is the strategy that I just described of queuing all the propagators that lead out of a node whenever that node gains information. And then the propagators fire calculating its output and joining them with the values. And then repeat this until nobody wants to fire. So I need the ability to measure whether I gained any information, like that I'm not at the same element. So I don't get function spaces and some other things that I would like. And again, we get this deterministic result. So there's a phrase here that's gonna, that this is a rather racy comment that was in the middle of Davian Presley. And I like to drop this one in the middle of a talk, whatever I talk about propagators, because it's gonna refer to the way that I draw the diagrams. It's nothing as racy as implied. So they make a comment about when computer scientists draw their diagrams, they prefer to choose models that have bottoms but that don't have a top. So we're not gonna draw the top element of my lattice. So I have to be able to join any two elements to get to something. That's what the laws say to me. So there's gonna be some kind of top element that will often be something like a contradiction. You've told me the answer is both two and six, blow up the universe. And I'm just not going to draw those when I draw the diagrams. So when I draw those little Haas diagrams, I'll be dropping that one particular component. So there's a notion of something I'll call an ascending chain condition, which I was saying that there are a number of nice forms of propagator, of nice lattices that we might be able to build our propagator network with that we can get this termination property that I wanted. One of them is this idea of an ascending chain condition. And basically the idea is like if I were to go up from bottom here to two, and let's say there were stuff further above that, every chain that keeps going up will eventually hit a fixed point. There's some point at which you can't go up any higher. If every one of your lattices in your propagator network had that kind of property, in this particular case, I chose to like look at the integers going off to the side. Here, there's infinitely many things going sideways, but it's still finite in height. Like we go from bottom to two to whatever the hidden contradiction node is at the top. So all chains going up are at most length two. In this particular joint semulabous. And so at this point in time, if all of the lattices that occur in your propagator network have a finite height, then they can only gain information so many times before they have to stop gaining information. And therefore this overall system will terminate.  Commutativity says I don't care about the order in which I ran them. And each one of those laws piecemeal contributes to the fact that I don't actually care about the order in which you scheduled the events, the propagation. Again, deterministic results. And so there's a, Lindsey Cooper did her PhD thesis on this other system she had called LVARS. She built a little language called LVISH in Haskell. L nominally stands for lattice variable. However, I just had a, I just got a dig in her the other day on Twitter about the fact that really only the first half of her thesis talks about lattices. So I refer to these as Lindsey VARS because she uses them even when they're not lattices. And the idea when you're working with LVISH is that you have a monad, we're in Haskell terms. So I apologize to the non-Haskellers in the audience, but you have this universe of computations in which you're allowed to fork, like you can fork threads, you're allowed to write to these lattice variables, which will do a join against the lattice variable. And then she has a funny form of read, okay? And then it turns out that all of the programs that you can run in this LVISH vocabulary will terminate and you'll deterministic answers, which sounds a lot like the propagator vocabulary. And these LVARS are joined semulattices, which sounds a lot like the cells in my propagator network. So I can take LVISH and it turns out that every function that I can define in LVISH is a monotone function. Not every monotone function can be defined in LVISH, but it's a good vocabulary for writing a large class of different propagators. So I rather like her PhD thesis as a common lingua franca for just spewing out code that is like obviously correct. The funny kinds of reads, I wanna introduce the idea of what I'll call a promise or an IVAR. So a promise would be something like, it's going to be one of these joined semulattices, which has like height two, like the one I drew earlier when I had the natural numbers going to the side, because here I've got the natural numbers going off to the side. I have, I don't know what the answer is. You've told me the answer is exactly blah, or you've told me the answer is both blah and something else and therefore there's a contradiction. So a traditional computer science promise can only be fulfilled one time. You have a, like a variable that's going to be filled in by some other thread that's doing some work in the background and it'll eventually write into the promise the answer. But if you try and fulfill the promise twice, even if you wrote the same answer in, it would blow up the universe.  In Lindsay's world, a promise can be fulfilled multiple times as long as you always fill it with the same value and therefore it becomes a joint semi-ladus like all of the other ones that I'm interested in. So I'm trying to steal some other people's vocabulary and try and fit it into the propagator framework. Common thread here is going to be this. So if I look at Radoul's thesis, it says, hey look, these are all propagator problems. What it doesn't do is it doesn't tackle the next question of what are the commonalities, what are the laws, and it doesn't tackle, okay, but there's a lot of these problems we've been working on for 30 years. How do I steal each of the things that we've done over the last 30 years to make each one of those individual domains fast and then transfer those results to the other domains? So that's a lot of what I'm trying to do is take all of the things that we had that we've learned over the last 30 years about all these problem domains that happen to be propagator problems. When I last tried to write out a sheet of different propagator problems that are in common parlance, I think I found 172 of them, just like sitting down and writing from one end to the other end. So there's a lot of different domains to steal knowledge from. I just need to figure out the right lingua franca, the right mathematical widgets to actually say this is actually the properties that I needed from SAT solving or from Datalog or from whatever in order to be able to steal its results. So when Lindsay does a read from her propagator network, she uses what I'll call a filter in mathematical parlance, which is like an upward closed set. So here we've got everything that has one below it in the graph, okay? And the idea is if you give me a set of disjoint filters that they're disjoint except for the fact that they meet at the top element, then I could tell you which filter I've fallen into. And there's no way I could reorder the rights that got me into that filter to get me into another filter without getting up to the top node where I'm gonna blow up the universe. And so this is a safe form of read, but it doesn't get you all the information that was in your original joint semulatus. And so like, let's take an example. Here what I wanna do is I wanna compute an and on this big product lattice. So I have like the bottom element, so I don't know what the thing is. I've got a product of two lattices that were too little promised like lattices. I've got a bottom, the answer is true, the answer is false, contradiction. Remember the contradiction we don't draw. And I've got a product of two of them. So I've got a pair of things and if I don't know anything about either, I'm at two bottoms. But if I know the left-hand side is true, I'm there. If I know both of them are true, I'm up in there. And at that point in time, I can answer the and of these two things is true. On the other hand, the moment I get into this F of bottom or F bottom node where I learned the left-hand side is false, I know and is false. The moment I get here, I know and is false. So I could take an upward closed set, a filter of those elements and say if I'm ever in any one of those elements, like notice that these two sets, the red, it's a real little bit hard to see that those are labeled in red, and the green are disjoint except they could both contain this contradiction node at the top. And so what I can do is I can write a propagator that listens using a threshold read to figure out which of these two traps I landed in, did I land in the true, true trap or did I land in the F of bottom or bottom F trap? And from there, give you an answer that is true or false for and. So and can be written as a threshold read. So again, Elvish, we have this fork computation. We can take a park computation and run it in the background. We can create these lattice variables. We can write to them using the joint semulattice that we have. We're allowed to perform these threshold reads to answer which one of these several different traps that we want to fall into, did we fall into. And if we haven't fallen into one of the traps yet, we just block waiting until we're there. And then blocking is monotone because if I haven't fallen into the trap yet, I don't do any of the actions. And the only thing the actions can do is write to more stuff causing them to increase. And so Elvish is monotone by construction. Turns out there's, you don't actually need monotonicity. There's this notion of inflationary rights. This is all in her thesis. It doesn't actually really matter too much. And again, park computations yield monotone effects. There's a problem with that Elvar approach that I just described, which is that I sort of wake up all of the listeners on every change. And it turns out that what I could do is instead of like doing the propagator for and, a single propagator that listens to like a pair of a big lattice, it's the product lattice, I could break that up into two lattices and then have a park computation that first does a read on the first one and then splits it apart. So I'm gonna do that as an example, just as a quick sketch over here. So instead of trying to deal with that big lattice, let me actually keep that on the screen. Sorry. What I could do instead is have two lattices that look like this. I hope this is at a scale that folks can see. And I have an output one. And then I can have a park computation that comes in here. And I can have a park. And the first one is going to come over here and listen here, expecting everything above true. And when it succeeds, it unblocks and it comes over here and it listens, expecting true. And it writes true into this propagator, into this cell. Okay. And I could also have it listen for this otherwise disjoint F over here. And in the case that this thing happens, we instead of going this direction, we go and just directly scribble into F. So my first thread went off and watched the left hand variable. My second thread just comes over here and listens for F. It doesn't listen for true. And if it's false, it writes directly into the false. So I just fork these two, like two little computations on these smaller propagator networks. And now every time one of these things wakes up, it's making progress. It's not being woke up spuriously because of every change in the propagator network. An example of this kind of thing would be something like if I had a set that had a bunch of names, one a monotone function is Bob in the set. But I don't want to wake every time you write to the set. I want to wake up only when you kind of touch things around Bob. I want to minimize the amount of waking up that I do because if the propagator has to wake up, look, nope, still not Bob. It's going to spend a lot of time doing spurious work. Okay. So this is the idea of breaking apart LVARs. And then there's a bunch of other stuff involving CMRDTs which I'm going to skip today because I have other stuff that I want to fit into the time slot that we have available. All right, building primitives, decomposing reads. Oh, I actually had this on the slide. Oops. So in a small snippet of different propagator applications are the promises that we've already mentioned, SAT solving, data log, replicated data types, which are a way that we do distributed computation, constraint programming, unification works out to be a propagator or form a join-simulatus, interval arithmetic, ILP, cone programming, provenance, incremental programming, unAMB, all these different things kind of fit into the propagator vocabulary. And again, I'm stealing all the results. So in SAT solving, there's two things that made SAT solving fast since like 2001. One of them is the idea of conflict-directed clause learning, and the other one is something I'll call a two-watched literal scheme. And I'm gonna like steal the ideas of these and try and see how we could apply them to other kinds of propagator problems as an example of the kinds of things that you can do with SAT solving.  And the one trick that we have that propagates is that if I ever have a clause, one of these things that I've got several ands of, that only has one element in it, then the only way that I can make the unit clause that contains x true would be to make x true. So I have a set of assignments that I wanna make. And in the empty case where I have an empty clause, there's no way to pick about like a variable, like if I was looking at that top one, I could say x is true, or while y is false, or z is true, would make that top clause true. And every one of these clauses has to be true in order to find a satisfying assignment. So what I'm trying to do is say, like how do I steal the things that made SAT solving fast? One of them was this unit propagation, the other one is conflict-directed clause learning, the other one is two-watched literal scheme. But the key idea with a two-watched literal scheme is something like this. If I ever have a clause, and it hasn't been turned into a unit clause, or an empty clause, there's at least two literals in that clause that have not yet been assigned, is it true or is it false? And so there's two clauses that I have not assigned values to. If I just watch those two clauses instead of watching every clause, I don't need to wake up when you change this clause or this term or this term or this term or this term. I only wake up when you try and change one of these two because it's the only time in which I could ever possibly get down to unit propagation is when I go down from two to one. So I might have 500 active clauses, but I only have to watch two of them in order to be able to catch when I get down to one active clause. This is the idea of unit propagation, or two-watched literal schemes. But this looks a lot like strictness in a functional language. Like it is F of bottom is a propagator applied to bottom, bottom. So we can talk about, like most propagators don't do anything until all of their inputs are non-bottom. Many of them are strict in this fashion. And so we can do a one-watched literal scheme where I'm watching one variable that has not yet been assigned a value, and until I've assigned to that thing, I'm not going to do any work propagating out because F of bottom is bottom. The answer is always going to be bottom until I've raised this thing to not be bottom. And then I'll just watch the next thing that is currently bottom until I've swept through all of the arguments of the propagator. And so my propagators can do less work by watching fewer of their inputs until it's sure that they actually need to do work to actually contribute to the answer. And so this doesn't change the answer to the propagator problem. All it does is let me work more efficiently. I wake up the propagators less, just like when I was trying to decompose the problem over there. And the other thing that I can do is that if every one of the input lattices to my propagator network are just before the top element, right, they're covered by top. We've got that funny little symbol here saying there would be an edge from them to top if we drew it, because we're not going to draw it because we're computer scientists. Then there's no way that this propagator could ever fire because any attempt to increase the amount of information in this input joint semi-latus would blow up the universe before we actually tried to propagate. Like the top is basically always a contradiction node.  We've found a contradictory state. So this is a way to garbage collect the propagator network because if all of your inputs are maxed out, I could throw away the propagators because it will never fire. Other examples of propagator problems. And then I think I'm going to derail off of these slides and try and do something that I think is somewhat more important than the, like, here's a gross pile of examples, is like, let's say I have finite domains. X is between one and five. And Y is between one and five. We could model those as sets. And then I can use, like, the relationship that X is less than or equal to Y to immediately learn that X cannot, or let's say X is less than Y rather than less than or equal to here, that X could possibly be five and Y could not possibly be one if that was a less than. And then if I ever learn more about X, if I ever narrow that set, I could use that to push information into X and Y. And so the idea is you use this to minimize the space of guesses you have to make. So when I first wrote these slides, I was using a much crazier mechanism in order to deal with non-determinism in the presence of a propagator network. Now I actually just bolt non-determinism and I use non-determinism propagators together. So the work on Guanxi is a non-deterministic propagator framework. And there's this classic algorithm. This goes back to the 70s called arc consistency three. I do not expect folks to be able to read the slide, but if you squint at this hard enough, you can actually see a propagator network under the hood. That's the thing that's establishing. Like if I have these relationships pair-wise between a bunch of variables, that each one of those individual pair-wise relationships has been established as like we've trimmed as things as much as possible, but we haven't finished the job. And then like the assignment to things is the thing that actually has to finish the job. So now I think this is a good launching off point to the other topic that I wanted to go through, which is how do I reduce the pressure on my propagator network even further? And so I mentioned this briefly during the talk the other day, but I need to like introduce more algebra. We introduced joint semi-lattices at the start of this. I need to get to the concept of a group action and look at some data structures that can actually model group actions in Haskell. Is this visible for folks? Off the top. Okay. Okay, joined HS. Oh, just try and make sure that I don't use the top line or two. Oh no, I'm off the side too. Oh no. No, it's not quite. Come on. Oh, I'm losing a lot of the screen. Okay. I did not realize how much of the screen was eaten up. There we go. I can see the bulk of my slides. I don't actually know how much of the slide was falling off the screen then. I apologize if I was referencing things on the slide that you couldn't see. All right. So what is a, how many people here are comfortable with the idea of a monoid? How many people are comfortable with the idea of a group? Okay. So a group is a monoid with inverses. So we have monoid in Haskell. I'll move this to like a group G. It's a monoid G to group G. Such that I have an inverse, which goes from G to G. Okay, and we want, you know, the inverse of G, ma-pen G to be empty in Haskell's awful vocabulary and G ma-pen inverse G to be. That's all a group is if it won't be on the test. The notion of a group action is a bit harder. I mentioned it briefly the other day, but a group action of G acting on S, where G is a group, is this idea that we have some kind of act function that takes G to S to S. And what we want is this property that act of empty should be the identity function on S's. An act of M ma-pen N is act of M composed with act of N. This is what a group action means, is that you can turn ma-pened into dot and empty into id. And empty into id. S is an arbitrary set, like an arbitrary Haskell type. So example, my group might be, I'm gonna, for sake of this discussion, just to keep things fast, I'm gonna try and like lock G down some data type delta just so I could actually make slightly, make use of existing code to fly through this example a little bit faster. So relative is gonna take some data type. Let's define delta here to be a group that's gonna be like delta with the integers in it. I'm deriving num show eek. And what can I do with this? I can say instance semi-group delta, where this is plus an instance monoid delta. I'm just gonna lock down to the integers with addition just for the sake of discussion so that we can actually move on with our day. Where empty is zero. Okay, and then the inverse, I'm just stealing num and making it to my work. Okay, so these relative kind of computations. So I gave a talk on monoidal parsing a few years back and I'm gonna try and derive some of the machinery from that talk here, just enough that we can use it. And then we can see how to use this and other notions of group actions to reduce the pressure on the propagator network. This is probably the major result that I've had in the propagator space so I figure it's worth spending pretty much the rest of my time going through. So what would I use this kind of relative thing for? An example would be something like I want to do, let's say I wanted to do incremental parsing. I wanna make it so that in roughly polylog-ish time I could reparse a source file in the presence of small changes. Let's say I wanna be able to give you error messages. But I have the error messages in like one chunk and I've got a finger tree worth of these chunks that I've got to move around the answers in. And so like the error message position is a relative position to like where the chunk starts. I don't actually know where the chunk starts yet. So I might have an error that carries a delta as its position. I'm gonna use bytes since the beginning of the file. The worst error message locator ever. And a message that I wanna have go wrong. About what went wrong at that position. So I could say this is relative. So relocation by delta of an error at delta prime s is just an error at delta, delta prime s. We're just adding the positions up. So if you wanted to shift me by some amount you can shift an error message. That's what rel is here as an example. Maybe these are my token types or my syntax trees or something like that. The problem is is I would like to have something like this instance. Instance relative a gives me relative list of a. So I can give you a list of errors. I don't think this is a big ask. And I could do this like this is fmap.rel or something like that. But it's, this is on to apply. So I wanna apply a crapload of computer science to try and get this down to a one. And I wanna get the appends of these lists down. So because I glue together the list of errors that I get from different portions of my source file I'm gonna get a bigger and bigger list of errors. But appending to lists is linear in the cost of the left hand list in terms of its cost. So I can't even afford to append lists of errors if I'm trying to game for polylogish reparsing time. So one key observation here is that I can change the data type for lists. I can just write down a list of a is nil or cons of a onto a list of a. We're gonna take Tony's approach of defining everything from scratch. Okay. And I want a instance of relative for list of a that does like o one work. In order to do o one work I can't do anything recursive. Thank you. So what I'm gonna do is I'm gonna bake the delta directly into the cons cell here. I'm not going to push it down. I'm going to make it so that the act of unconsing will relocate the elements where I always already have to do work. So to relocate by delta nil is just nil and to relocate by delta cons delta prime a a's. This is just like we did with the error case. This is clearly non recursive. If we want to we can make it so that relocation by delta of anything is just itself. So we can get a little more sharing if we want to be pedantic. But this relative is clearly a one. Cons is gonna take an a and a list of a and give me a list of a cons will be big cons with like the empty delta. And then uncons we want to take a list to maybe an a and a list of a. This is the kind of like what we can do with a list today. Let's just think of this as sort of the API of a list if we didn't have awful head, tail nonsense lying around. But I'm gonna need to know a little bit more about a that it's relative. So unconsing from nil is nothing and unconsing from cons delta a a's is just and then I'm gonna relocate by delta a and I'm gonna relocate by delta a's. And so the second thing is a one and this is a one. So we do two a one steps but uncons was already a one. So we move the cost to where we can afford to pay it. So with this, this worked for any delta that's a monoid. I could like parameterize this with a monoid here. I use backpack in practice because I can unpack this. Hi Michael. And get no overhead for having abstracted over this particular pattern. But this actually has to keep a delta per list console. I can turn on like since I have a group I can do a little bit better. I could replace all of this list code with a group with a list that exploits the fact that I have a group. I have a list, I carry a single delta for the entire list and an actual traditional list to relocate this list. We just do the error trick. This is error basically, right? We have a string here which was a list of charge. And cons doesn't change, really. Cons, well cons does change or uncons doesn't change much. It still needs this relative constraint. But now we have to like deal with like list D something and list D, A cons A's is just, and this is now a list D A's, whatever. But cons picks up a relative constraint because we can see that when we take the A and the list of A's and try and build a new list of A's. So to cons and A onto a list that will be relocated by delta before you see it of A's, I can't just do list D A cons A's because this A would be shifted by delta when you go to uncons and look at it. But I have inverses so I can relocate by the inverse of delta A as I go to insert it into the list. So if I'm gonna be shove 50 characters to the left, I should shove myself 50 characters to the right so that I stay exactly where I wanna be. Right, that's the idea of using the group structure to kinda hack my ability to get down to one list or one delta here. So why am I spending all this time on lists, right? So it turns out like if I wanted to get this list down, this has got me 01 relocation for lists but it didn't get me down to 01 append for lists which is the other thing that I need. But Chris Okasaki wrote a book on purely functional data structures which has a, it's written in Haskell and like the original one is like a dialect of ML but there's a Haskell appendix at the end of it anyways. And in it he includes a number of data structures for like building queues that have 01 access to the, like you can snock in 01 but you can uncons in 01 and then on top of the queues he goes and builds catnable lists that are 01. So if I just redo all the work in Okasaki using this rel, like this, like shoving deltas in the appropriate places just like we did with the original list, I can get 01 catnable lists that I can pull off of that I can relocate in 01, okay? So like everything I want to do with this list is 01 except for like indexing it to it but I don't need to random access into the list. Okay, so I can finally say why I care about this for propagators. So union find is a fairly, like this algorithm, the Tarjan, like there was some work on it before Tarjan but Tarjan like locked it down and like showed this absurd asymptotic complexity bound that you can do it in like N alpha N where alpha is like the inverse of the acrobin function so it's this function that grows super duper slow.  So when you do union find, let's see if I can go into Guangxi and pull up some actual code that does this source. Here's like an equality domain. What you typically have is you have some kind of node that links to its parent and that at the root we get to know the rank of like how many things are below you and you could pretend this is size but it grows a little bit slower. And so basically we're the child of some other term or we're at the root and we know our size and this particular thing does some other stuff other than just union find. And what I have the ability to do is like create these sets, union them together and tell me whether or not I'm in the same set. So what I wanna be able to do is say like X equals Y when we have the earlier constraint of like X is less than or equal to Y. I would like to be able to say X and Y are the same thing. I don't wanna just propagate all the values from X to the values of Y. So there's somehow different views of the same thing but I have propagators that were listening to X and propagators that were listening to Y. And so when I merge them together, I wind up with a set of propagators listening to whichever one has this slightly different view. This like this group that's acting on X or Y before you see it. And so I need to be able to relocate using my group. This works for any groups, the structure that we described earlier in O one time a whole swath of propagators that were listening to the wrong thing. Like X is Y plus four, we were listening to X but now I said, well, actually I linked X to BY but now I have to like shift all these propagators so that they're listening and see the right values. And this has really been the workhorse for me for making propagators viable. Like if I use these various like group like actions that are trying to trim down the size of the propagator network, there's a lot of places where this saves me work linear in the number of cases that X can take on. And that rather matters to me when there can be an infinite number of cases. Okay, so this is really the core trick that I wanted to try and bull through in this talk that like I have not previously, I've given, I think there was a brief overview of this at Monetic Warsaw, but other than that I haven't had a chance to really talk about this core trick publicly as a thing. So I realize I'm basically out of time now. We've got about a minute and a half for questions I think. Any questions? Anyone dares to ask a question? That last list construction that you had where the Delta was sitting outside is the main advantage that there's no Delta per Con cell. It saves your space. Okay, and have you ever come across a use case where you use cons and it was not relative because that was the additional constraint that you required, right? So cons gained a relative constraint. Cons gained a relative constraint in that universe, yes. For the benefit of not carrying Delta for every Con cell. Yes, basically you'll never use that data structure in a non-relative setting. It's just that you gotta save a little bit of work in the other. The main use case for the original construction is it works even if you just have a monoid. Like I didn't need the group for the first thing. I needed the group for the second one. And so I have a bunch of stuff in the Coda repo where I have an example of this where like you can do maps where I can relocate the entire map in 01 where the keys and the values can be relative, they can be relocated. But you have to make sure that the relocation is strictly monotone for the keys. And so that gives me 01 relocation and entire maps from keys to values where those keys are actually dependent. Which is like, hey, I would like to find all the occurrences of this keyword in my original source file. Let me glue these occurrence maps together. Cool, thanks. Jainstreet has something called incremental, right? Yes. Yeah, so is that the implementation of the projectors or is it something? No, incremental is its own thing. So because I was able to compare them, so it's... Yeah, so one of the things, so Gwanshee sits on top, so right now it does not sit on top of an incremental programming framework. I have an incremental programming framework in Haskell called Watch, which is closer to something called NominalAdaptOn than the SAC stuff I think that sits underneath the incremental framework that Jainstreet uses. But I'm happy to talk about the differences between these designs and where they're kind of... When I related, I think they just replaced kind of, they replaced the lattices with the graphs and kind of, it was somewhat similar. There's a lot of overlap between these different, but they are observably different tools, yes.


is a normal day function that results from the dark of a groupie and it has been looking at the collective drainage of the foremost all of the mentality of disability and what would it be about the day-toes? In other countries, as reported by Dr. J. Atal, the decisions of the collective drainage in the past to be about 200 per one-line of the day. In India, about 1.5 to 2 million people have faced from activities and about 1 million people have been living in the collective drainage. The project in this fall is to advise and advise the down to 15 to 20 percent of the collective drainage in the last one to be about 100 per one-line of the day. The practice is a very good process. The family needs to be able to do that. After two minutes of data, the family needs to be able to do that. The community interprets the different types of practices. One of the practices we might have done most to be using machine learning is the artificial learning community. That is the key in the practice of the artificial learning community. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that. We need to be able to do that.


I'd like to tell you about a new approach to diagnosing infectious diseases using mobile phones. So infectious diseases are caused by microorganisms that live and prosper in the human body. Diseases like tuberculosis, malaria, influenza have devastating consequences when these diseases are progressing. Now we're actually outnumbered about 10 to 1 by foreign cells in our own body. But our immune system does a very good job of keeping the bad ones in check and many of the good ones we need for normal, healthy behavior. So the immune system is important until it doesn't do enough or can't do enough. And that's when we have the spread of infectious disease. Even in California in the early 1900s, tuberculosis was a major problem. Each of the black dots on this map shows cases of tuberculosis. But through better understanding of the epidemiology of tuberculosis, better care, and better ability to diagnose the disease, it's been eradicated. Now many diseases throughout the world are diagnosed by looking for the cause of the disease, in particular looking for the microorganism that triggers the results. And how this is done is using a microscope and having a trained person look through that microscope. But that's not available in many parts of the world where these diseases are still significant. So could mobile phones that we all have in our pockets be useful in this? Mobile phones, more people have access to mobile phones now than clean water. And as a result, perhaps the high tech capabilities of mobile phones could be used for diagnostic purposes. So several years ago, we began putting lenses on the end of mobile phones. Some of you may recall a company called Nokia. They made mobile phones. And this is back when they were still making phones. We were able to see using the same camera you would use to take a picture of a family member or a plate of food. We would put a blood sample in front of it and we could see blood cells. We could see white blood cells, red blood cells count platelets. We could do things that you would normally do only at a hospital, only at a well-equipped clinic. And if we added stains to these samples, stains that specifically attach to microorganisms that cause disease, then we could visualize things like malaria.  But images like this still require interpretation. So we started to develop algorithms that would clip out the causes of disease, the microorganisms themselves, and then classify them based on how likely are they to be the diseased organism. And so this is an array of tuberculosis bacteria. So mycobacterium that are responsible for tuberculosis arranged in order of likelihood of being TB based on an algorithm. So this combination of software optics added to mobile phones has led us to build integrated systems that are relatively easy to use and can expand access to infectious disease diagnosis. And so one particular case we've been tackling recently has been river blindness in Central and West Africa. So in collaboration with partners in Cameroon, we've used the device pictured here to diagnose patients who are in need of the treatment, but specifically to diagnose those who have too many of a worm that complicates the treatment, a worm called Loa Loa, and that's pictured here. By counting the number of these worms, we can determine whether or not it's okay to give drugs to an individual to treat for river blindness. And this has allowed us to resume treatment for river blindness in Cameroon just this past month, simply by pricking a finger, inserting it into the device, and then within two minutes you have an answer of whether or not an individual can be treated. And so these types of applications of mobile phones combined with software and hardware additions have allowed access to critical diagnostic tools that didn't exist otherwise. So expanding that access even more broadly is something that we're looking at for a number of different diseases. We've built devices that look for tuberculosis, for malaria, for a range of other infectious diseases, as well as applications in veterinary sciences, plant sciences. Microscopy is used very broadly and all of your mobile phones can do it. So each of us have phones and many of them have health software on them. You can track the number of steps you're taking. You can even in some cases measure your pulse. But how many of you with the phones in your pocket can actually quantify the number of white blood cells, red blood cells and platelets right now? Nobody right now. But all of you could. The technology exists and it's just a matter of time before we're all going to be able to do it. Thank you.