 We are back again from the HUC or about future studios on the RC3 Remote Congress 3 this year, sadly remote, but we'll do as we can. We have a really nice talk coming up here about type theory in linguistics and about meaning in linguistics from Daheb. We will be talking about the uses of type theory in both programming languages and natural languages and maybe draw similarities between them. He has a PhD in computer science, was in Sweden for six years at a university and is now back in Germany. There is sadly no translation for this talk because there aren't enough angels to do all the translation work. There is a pixel flute behind me, it's my own implementation, so if you want to spam me you can, I'm not sure if it will work, but apart from that, I think that's enough of introduction, let's go to Daheb. Thanks and a little bit about me, I would call myself a computational linguist even though my PhD officially trusts as computer science and I see myself in the tradition of this slightly outdated XKCD where people try to use computers to test linguistic theories. In addition to that, I spent my time in Sweden in a very well-known functional programming group and basically next to a research group dedicated to type theory, so my interests are both into functional programming and I got a little bit spoiled also by type theory and that inspired me to give this talk. To start, the question is what is meaning in natural language? So I came up with a few examples, example sentences and the question is what is the meaning of these sentences? But before we dive into that, a little bit about linguistics. So there are several sub-disciplines in linguistics and one is syntax which is mostly people drawing trees and people are really good at drawing trees these days. On the slides you can see various formalisms, how people draw trees and that's pretty well established these days. But that's basically what are valid sentences in a language. The next question is what is the meaning of these sentences and within linguistics for a long time, semantics was something you would not really try to approach because it's really really difficult. But actually, semantics is the literal meaning and in addition to semantics, we might have the meaning in context. So this is a very great example of so-called pragmatics. Your greatest weakness, answer of the person, interpreting semantics of a question but ignoring the pragmatics. Could you give an example? Yes. So in this example, the person only looked at the literal meaning. Can you give an example? Yes, I can give an example. Not interpreted as the request to actually give an example. So we have the literal meaning and besides that we even have an additional meaning in context. So if we look at statements in natural language, we might have challenges in interpreting what do they mean. All men are mortal, every man is mortal. That we can interpret pretty literal. Yesterday it was raining, tomorrow it will be raining. The first one could be a literal fact. The one about the future, who knows. Then there are statements about things that could potentially happen. It could be raining. Then there are statements which in our world could never actually happen, like China searching for a unicorn. It's pretty much a matter of fact that there are no real life unicorns. So if China is searching for a unicorn, we don't really claim that there might be unicorns in our world. And then we have questions like could you pass me the thought where we don't really have the literal meaning or we don't care about the literal meaning. We don't care if the answer is yes or no. But what the person making the statement actually means is please hand me the thought, please pass me the thought. And in addition there is kind of an assumption that there is actually thought on the table. While we don't really assume that if China is searching for a unicorn that there is a unicorn, if someone asks the question can you pass me the thought, there is actually thought on the table. So meaning is a very philosophical problem. And why do people care about it? There are relevant questions. For example, when are two statements equivalent? When do they mean the same? All men are mortal. Does it mean the same as every man is mortal? Or a bit more challenging. I saw the morning star. I saw the evening star. I saw Venus. As a matter of fact, these three are meaning exactly the same. But if someone says I saw the morning star, do we know that they actually also know that they saw Venus, that the morning star is the same as Venus? And another relevant question is when does one statement follow from other statements? And especially in computational linguistics, we want to find automatic ways to decide these questions. There are a few more examples. So if there is a very well-known example, all men are mortal. Socrates is a man. So we should come to the conclusion that Socrates is also mortal. Or more challenging, every European has the right to live in Europe. Every European is a person. Every person who has the right to live in Europe can travel freely within Europe. Can we answer the question, can every European travel freely within Europe? And hopefully we will find some way to answer this question with the yes. Humans are, people are usually pretty good at deciding this with a little bit of logic and a lot of intuition. But computers are really bad about intuition. So we are interested in models or ways that actually also work for computers. And these days there are basically two big branches, the one are the formal approaches and the other are the statistical approaches. The formal approaches use logic to try to answer the questions while the statistical approaches just look at plenty of data. I shouldn't say just. They use lots of data to answer the questions we are interested in. In this talk I will only focus on the formal approaches because I like them more. But both approaches, both kinds of approaches have the right to exist and can be also very helpful in their own way. So back to the kind of the title of the talk, now a slight paraphrase, type theory and semantics. And there are basically two big approaches to type theory. Okay, what is type theory? Computer science type theory is the study of what systems of types exist and what properties do they have. We will shortly see what that could mean. So if we go back in history then there are simply type languages. They go back to Alonso Church, I think 1940. He described the simply type lambda calculus. And then a few decades later a guy called Richard Montague used this approach or adapted this approach which was purely from logic to natural languages. And Richard Montague was a very particular person. He had a great influence but also he was not an easy person. He openly attacked colleagues but his influence on linguistics started in the 70s and there are still people trying to work out details about this theory. Now we come to one answer what is meaning in linguistics and that's so-called truth conditional or model theoretic semantics. So what is the meaning of the sentences like all men are mortal? And the meaning of this sentence is can we come up with a model which is kind of a picture of a world that makes this sentence true? And here in the picture we have an example of that. We have the set of all mortal things and we have the set of all men in our world and they are a subset. Meaning everything that's a man is also a mortal thing. And then we have the second sentence which says Socrates is a man. Which means we know that Socrates is one of these objects in the set of all men. And then is the question is Socrates mortal? And because we know that all men are in the set of the mortal things we can answer this question quite easily with yes. So one approach to meaning of natural language is can we find a world in which all the properties are in a way that all the sentences we are given are true? And because we look at models it's called model theoretic semantics. And the big influence of Montague was, as I mentioned before, there was already the theory by Alonso Church of the simply typed lambda calculus which was an approach in logic. And then there came around Montague and made this statement, this very bold statement. There is in my opinion no important theoretical difference between natural languages and the artificial languages of logicians. Indeed I consider it possible to comprehend the syntax and semantics of both kinds of languages with a single natural and mathematically precise theory. And that's really bold statement because we know that usually if we for example look at programming languages they are very small and very well defined compared to what we can express in natural languages. But yeah he made the statement and then he started to demonstrate that this is actually possible. Then let's look a bit at types and I called this a simply typed language and we have infinitely many types. And every object in our logic language or in our logic language has a type. And the type is either E for an entity, T for truth value, or if we have some type alpha and some other type beta, then we have this pair alpha beta which is a type. And then logicians like to be very precise and they say nothing else is tied in this language. And that's again rather abstract. Let's look at some examples. We have certain classes of words in our language, for example we have names. And they, our examples are for example John and Mary. And we have the semantic type E, which is a basic type. And then we have intransitive verbs, which means verbs that don't take a direct object like sleeps or transitive verbs that have a direct object like loves. And then we have sentences and they have the semantic type T, which is as a computer scientist, I would call it Boolean. It's a truth value. It's either truth or false. And intransitive verbs have this type of a pair E to T, which we, for example, could interpret as a function from entities to truth values. And then I have a few examples down here. So what's in these double square brackets? That's our natural language. And what's not in italics and not in these double square brackets? That's our logic language. So for simple things like the name John, we just claim that there's some object representing John, we call it just J, the same for Mary. And also sleeps and love we translate to just our, some object in our logic language. But what are these exactly? There are two ways to look at them. Sleep prime, for example, is either the set of all objects that are sleeping in our world. For example, the set only consisting only having the element John or J representing John. So John is the only sleeping entity in our world. Or we can represent it as a function from entities to truth values. And the function returns true if X is a sleeping element in our world and false otherwise. And if we define it the following way that J is mapped to true and M is mapped to false, then we get exactly the same representation as with the set before. And that theory, that's usually called a characteristic function. So either we can treat it as a set or as a function. In this case, it doesn't really matter. But the next question is what is love and or love prime to be precise. And while sleep is a property of an entity, for each entity we can decide if it's sleeping or not. Love is not a property of one entity, but it's a relation between two entities. So it's either a set of pairs or it is a function which takes two parameters. And as soon as we apply it to one of the parameters, we end up with a second function. So the function with two parameters represents the relation between two entities or two individuals. But if we apply it to one of the parameters, we get a function which is the property, for example, to be loved by someone. Just to keep in mind, for simple predicates, sets and functions are equivalent. And for these relations, it's either pairs or it's a function. And if we apply it to one of the arguments, we get another function. One of the driving forces behind the theory of Montague is compositionality. And that's usually attributed to Frege, even though he never really expressed it that way. But one of the most well-known interpretations is the meaning of a compound expression is a function of the meaning of its parts and the way they are syntactically combined. So if we go back here, we kind of have our simplest parts. We have our names and we have some verbs. And we have rather simple interpretations, what they mean. And now the question is, how can we combine them to form, for example, the meaning of more complex sentences or in general of sentences? And for that, we need a little bit of syntax. Syntax tells us how we can combine these elements to form sentences. So the rule syntax one, for example, says if we have a name and an intransitive verb, we can combine them to a sentence. And the second rule, syntax two, says if we have a transitive verb and a name, we can combine it to an intransitive verb. Now we want to look at the meaning of sentences like John sleeps. And the meaning of John sleeps is if we interpret the meaning of sleeps. And that's a predicate which can be applied to an entity or an individual to give a truth value. And John is of type E, so we can apply sleeps to John. And we get as a result, sleep prime applied to John. Or the slightly more complex example of John loves Mary. We can first apply the same semantic rule that we can apply the rest of the sentence to the subject of the sentence. And then we have to interpret loves Mary, which is this function that takes two parameters. And then it's first applied to the object and then to the subject. So the meaning of loves Mary is kind of the predicate to be in a state of loving Mary. And then we apply it to John and we get the meaning love Mary John. And now the question is how do we actually come up with these semantic rules? So how do we know that we have to apply loves Mary to John? And that's where the types give us guidance. So we know that loves Mary is of the category IV in transitive verb, which has the type E to T. And we know that John is of the category N, which is of semantic type E. And if we see E to T as a function which takes an E as a parameter to produce a T as a result, then we know that we can apply loves Mary to John. Then I already before mentioned the word lambda calculus or lambda expression. Probably not everyone knows what a lambda expression is. It's kind of a solution to a very almost nitpicky problem. So if we have some formulas and expression like x squared plus 2x, what does it exactly mean? And then we could come up with just putting numbers instead of x. And if we put 1, we get the result 3. And if we put 2, we get the result 8. And if we put the x equals 3, we get 15. But what we usually mean is it's some kind of function which takes a number and then maps this number to the number squared plus 2x. That's what we mean, but it's not really written down precisely. And that's where logicians came up with a new operator called lambda, which can introduce a variable and turn a expression which is not completely clear like the one we had before into a function. So if we write lambda x, x squared plus 2x, we know that it is a function which has a parameter which we call x. And we use that in our expression x squared plus 2x. And then we can apply this, for example, to 1, which means we have to replace all x's in our expression by 1. And then we get exactly the same results as we had in our informal expression, but now it's on a proper foundation. Why do we need that? Because we actually have kind of higher order types. So we know that the type e to t is kind of a function from individuals to truth values. That's the same for common noun like man, bird and so on. But what is the type of what we call determinants or quantifiers? Some, every, there. So the meaning of man is just man prime or man prime of x. The same as sleep as we had before. And the meaning of every, now we use this lambda, because the meaning of every is for all things x, which are individuals, if they meet some predicate p, then they also meet some predicate q. That's, again, very abstract. So let's have a look at an example. So the meaning of every man is, we have a new semantic rule meeting our types. So the type of man is e to t and the semantic type of every is this slightly more complex type, but it's a function from e to t to something else. So we know we can apply the determiner to our common noun. Then we do our lambda magic and we end up with the term lambda q for all x, man x implies q x. Meaning for all things, if they are men, then they do something or they have a certain property. And if we now look at every man sleeps, we apply every man. Two sleeps. We just had this term on the previous slide. And the types for q e to t and for sleeps match, we can just put that in there. And the meaning of every man sleeps is for all individuals, if they are men, then they sleep. And that way we get a theory how we can translate expressions of natural language into expressions, into logic expressions for which we can try to find models. So we have this cruise conditional semantics and it is compositional in the way that the meaning of a complex expression depends on its components. The meaning of every man sleeps depends on the meaning of every man and of sleeps and on ways how to combine them. And these ways how to combine them are determined by the types we use. So we have some very nice method of computing meaning in a compositional way into a logic, so that looks already pretty much like what MontiQ claims, but it has certain drawbacks. And for that reason, and also because in logic and computer science the research progressed, people came up with the so-called MTTs, modern type theories, or the original is called Marty Lyft type theory. So this nice bearded guy on the left is kind of the person who invented everything and the nice person on the right who likes to climb mountains. He used to be a professor in the group where I was doing my PhD, used these modern type theories to express the meaning of natural language in a slightly different way. And I'll give a quick glance at what changes they have. But first, one of the biggest applications of these modern type theories is usually in computer science in proof-assistance. So one of the very well-known proof-assistant is the one with the logo on the right called COC. Another dependently type programming language is the language ACTA, which both of them are used quite extensively in formalizing and verifying, for example, proofs in mathematics, verifying and proving properties about programs, but they can also be used to reason about natural language. So a different approach to meaning in language is the so-called proof-theoretic semantics. So before we looked at what models can be used to express conditions under which things can be seen as true, and now we care more about proofs than about truth. And that goes back to logic and computer science again, where it's usually referred to as the Curry-Howard isomorphism. It's that proofs in mathematics can be expressed as programs in a computational framework. And that allows us practical reasoning on computers. And in formal, if you want to prove something A, we can construct a term or write a program T of this type. And an example is at the top of the slide where we kind of want, first, it's a function and it's the function from a semantic representation of the sentence every man walks to the sentence John is a man and finally the sentence John walks. So we have the two sentences every man walks and John is a man and we want to get to the conclusion or want to figure out if it is a conclusion that John walks. And this is a small proof in the proof-assistant COC where we can in a few lines of COC code find the proof that actually from the sentence every man walks and John is a man we can conclude that John walks. The first big extension is we have more expressive types. So before we had the type E for entities and the type T for truth values. Actually, the type T doesn't change a lot. We now just call it prop, the type of all propositions. But for common nouns like man, which were properties E to T, properties of individuals, we just introduce new types like man, book and so on. And for verbs, for example, we define them as functions from one of these types to property. So not just from any individual, but from meaningful domains. So for example, if the meaning of talk requires that whoever is talking is actually human because except for a few situations where other things could talk, it's usually only humans that talk. And the meaning of mortal is something has to first be alive to be mortal. That's already nice. So we can limit our domains of the predicates to very meaningful things where people intuitively would say that makes sense. But then we end up in a problem. For example, if we have the meaning of Socrates is Socrates is of type man. And we have mortal, but mortal is of this type from it takes a parameter that's animate and return the property. And now we want to interpret Socrates is mortal in pretty much the same way as we did it before or in a similar way as we interpreted things before. So we want to apply this meaning of mortal to Socrates. But we have the problem that man doesn't match the type animate. So how does it work? And the answer to that is we can assume subtypes or we can introduce subtypes. So if we assume that humans are animate and man are human, then we can actually apply the function that takes an animate object as a parameter to something that's a man. And also we want to assume that modified objects like a heavy book should still be a subtype of book. And fortunately, we can do that in this theory. And the final thing is some functions. So we can already rule out some some things with the here. If we say that talk only works for humans, we can already rule out some nonsensical things. But we can use a little bit of this proof theoretic a bit more. So if we have this now is, I hope it's not too distracting that it's a bit of a weird syntax. We define a new type which is consumable and we define two objects that are consumable, it's bread and wine. And then we define a new type of action with the two actions. One is eat, one is drink. And then we define a new type performance which depends on both a consumable object and an action. And then we can construct object of this performance by using this constructor perform. So the meaning of drink wine for example could be perform wine drink. But we can also in this setting define the meaning of eat wine as perform wine eat. And that's usually something we want to rule out. We want to have only to be able to drink wine or to eat bread but not to eat wine or drink bread. And that we can do by defining a new type of for example edible and drinkable objects. And we define eat bread as edible bread and drink wine as drinkable wine. And then we modify our action and performance that the action of eating needs an object of this type edible for the thing we want to consume. And this object is kind of the proof that whatever consumable we want to eat is actually edible. And then we can still define drink wine in a pretty similar way. But we cannot find any way of performing eat on wine because there is no way of constructing an edible object for wine. Which is a very powerful thing of modeling how our real world happens to work. And that pretty much concludes my talk. Here are a few references. And now I'm open for questions. Right. So far we have one question I see. And the question is so how far can we take this? Has anyone ever formulated a sufficiently detailed type system for English or at least some variant of English which can be used to reason about human written or even informal texts like algorithmic language processing? That's a very good question. That's one of the big weak spots of this that it involves lots of work. And these days a lot of research and effort is more on statistical models where you hopefully where you hope that the computer might learn these things. There is for example a data set. So some logicians sat down at some point and made many sentences in this style like every European has the right to live in Europe and so on. I think it's a few hundred sentences. And that's kind of the benchmark where people try to test the systems. And that kind of works. I think now there are systems that can cover the whole benchmark and give the right results. But there are other data sets that are not created by logicians but by everyday people crowdsourced on the Internet. And there it's much more difficult to actually agree on what is the conclusion. Okay, so the main problem is that there aren't any curated big enough data sets to check the algorithms against? That's part of the problem. But it's also really difficult to make that work for the complete language or for really big parts. But if you have a small application, a small domain, then it's definitely a feasible thing to do. And it gives you also an explanation why one sentence follows from another. Either by giving you the model in which the sentences are true or in the modern type theory by giving you a proof. So there is lots of research in doing that without logic and with just machine learning and they seem to be pretty good. But then sometimes the system just gives you the wrong result and you have no idea why. And yeah, that's the balance. So you get the highly reliable results from this system, but you have to do a lot of work to get it working. Or you use a machine learning system which works much broader. But if something goes wrong, it's much more difficult to figure out what is exactly going wrong. Okay, thank you very much. We have a question from Gordon in the IRC, live.hack.media for anyone who isn't there yet. How you not managed to mention LOG ban, loge ban? I'm not really sure on how to pronounce that. I don't know too much about loge ban except that it's an artificial language that I think was designed to have a clear semantics, probably something like first order logic. So the approach is different and these people who work on this, which I presented at least, could pretend that they work with that proper English. Even though some people could also turn it around and say they defined it a nice formal language, which just looks very much like English, but it's actually a formal language. Okay. And we have Bob asking whether there is any effort to create a combination of a statistical and logical approach, and if not, why hasn't it been done or what are the challenges? There are definitely approaches that try to do that. Yeah, the question is where do you put the machine learning and where do you put the logic and what parts you can replace by machine learning, for example. But there is definitely approaches. I think one is called CCG Lambda by people in Japan. Yeah, so there are definitely these approaches. Okay, and we have Klondike asking whether there is any work on trying to infer types and rules from the corpuses. I'm not really aware of anything like that. Did you try generating valid sentences by random? Depends on what you define as valid sentences. One answer to this question would be I once wrote a Twitter bot which generates random sentences which are all tautologies. So I used many of these techniques I presented to generate natural language sentences which all have a certain logic structure. And if you have a system like that, generating is usually not a big issue. Analysis is usually the bigger issue. Okay, we have one more question where I can get the context to about the XKCD cartoon. Maybe we can go back to the slide. And they want to know whether you can say something about why there are many competing syntax trees for the same language. Or more like tree is exactly for what are the differences. In this, the main difference is how much effort you want to put into the analysis. So the syntax tree at the top left is basically textbook level. It gives a very simple analysis. And from a linguistic point of view, people could argue what exactly is, for example, the scattering cop for copula. The other two sentences are kind of, I don't want to really say competing syntactic theories. So there are lots of theories where they try to explain how natural languages work. I said people are really good at drawing trees, but they still struggle to explain certain things. And over the last almost 100 years, people came up with lots and lots of theories how syntax actually works. And these theories usually have nice advantages and, on the other hand, drawbacks. So the syntax tree on the top right is called combinatoric category grammars. And it uses categories which are also kind of function types. So np slash n can be seen as a function which takes n as a parameter on the right and generates an np. So the syntactic categories are kind of in parallel to the semantic categories. And that way it's easy to translate from the syntax tree into the semantic representation, while for other syntax formalisms it might be more challenging to do that. So it strongly depends what you want to do, how to express certain concepts. Yeah, it goes a bit in the direction of this XKCD. I can subscribe to any dozens of contradictory models and still be taken seriously. Okay. Are there any issues on these trees with garden path sentences? I should know more about garden path sentences because it's one of the many examples where things go wrong. At the moment I cannot really answer that. I try to give a simple high-level overview of it. There are many interesting problems, garden path sentences, donkey sentences, where syntax or semantics or both can go wrong. Okay. So far I don't see any more questions. So I would like to know from you how does one get into type theory or language analytics or semantics? Hanging out with the wrong people. Computational linguistics is a pretty established field these days. So it's what people call interdisciplinary. It's taking a lot of computer science and hopefully still a bit of linguistics. And then you try to tackle certain problems and one of the big problems of natural language is what do they mean. And when you study that, for example, then you learn something about it. And if you're curious about it, you can put research into it. And to be honest, my research was something completely different. But the topic of semantics was kind of one of the reasons why I wanted to do some more research and stay in academia. Okay. Thank you. Back again to AI language processing. Do you think there is a kind of new, bigger field coming? Well, there was the last few years with natural language processing getting more and more accessible to the public and better. And do you think that there is still a chance for only analytical approaches or do you think that AI will be in the end more prevalent? So actually if you look at the research output in recent years, then you only find a little bit about what I was talking about and you find a lot about what I have listed here as statistical approaches, especially language models. I guess most people who haven't been away from the Internet in the last few months have at least heard a little bit about, for example, GPT2S3, which is one of these fancy AI models that you can use for generating text based on some sentence to start the text or people even implemented a dungeon crawl text adventure using it. So that's the hot shit in research kind of. But they suffer from this problem that as soon as something goes wrong, it's really difficult to figure out what's going wrong and you need shit loads of data. Okay, we have some more questions just came in. We have some book recommendations in the ROC if anyone is interested and we have one person asking whether a function word like conjunctions or some grammar like that clause can be present in type systems. So I haven't done anything about conjunction and so on. In the simply type language, they are just translated to the logic operators. And you only have usually conjunctions on the sentence level. So you could make sentences. John loves Mary and Mary sleeps and because the type of sentence is T, which is truth value, which is kind of a Boolean variable, you can use Boolean operations on it. So you analyze the first sentence and then you analyze the second sentence and then you check if the logic conjunction holds between them. And if you translate that into models, conjunction can also be translated into the set operation of intersection. So conjunctions are, conjunction disjunctions like the function words and it or are pretty easy or still rather easy to express. There is still many, many to which I couldn't go in the time. Okay, I think that answers the question from before and there is also a new one. This for all thing I always thought that required dependent types. Did I miss something or is that actually wrong? If it's a simply type language, then it doesn't require dependent types. There is an equivalent to the for all in dependent type languages. I think that should be the Pi types, which are dependent function types. But in a simply type language, you just have the for all operator. Okay, are there new questions? Oh, I think there are. Can you recommend an intro to linguistics or a book? I think we just had some, but maybe you know some off the top of your mind. So, except for the ones I have in my literature list. There are a few books by a professor called Emily Bender, which she co-authored with other people. One is about syntax, one is about semantics. And I haven't read them myself, but I think they are pretty good from what I heard. Because they also bridge between the linguistic knowledge and the requirements you have these days with more computational. Okay, I think I'm not sure whether the know is directed towards me or you. But apparently some of these were only programming language books, so probably the ones in the IRC. There is also a question really from Twitter, whether semantic web still is a thing in your community? It's a community on its own. I don't know too much about it. It's definitely still a thing. There are still people working on it, but I cannot say too much about it. I think there was probably going in this direction a new new attempt for multilingual Wikipedia, where you use a semantic representation for the Wikipedia page and then use that to generate the articles in various languages. Okay, I think the beings in the IRC are already satisfied. Maybe another answer to the semantic web. And in addition an answer to a question that was before about actually inferring these types somehow is what you can do with these types, especially with expressive types is you kind of create something that's called an ontology, which is in a way a representation of the world. So what I try to do here is I define what is edible, what is drinkable. And it's tedious to hard code all these things about the world. And a lot of this is represented in either data sets or for example in the semantic web. So people already put effort into encoding that somehow and then you just need to extract it and use it. Okay, we are already at the end of time. There is three minutes left. We have one more question. I think after that we'll close it. Are you aware of natural language, hard, wavy, formal, hand-wavy, formal texts like codes of law which have been type checked? I know that there are people who spend their whole PhD on trying to formalize logic texts and not logic, law texts. I think there was also some work on formalizing GDPR. But I heard about a few of these things but I'm not fully aware of what's available and where it is available. Okay, so if you don't have anything more to say, say so. And apart from that I think we are done here, at least for my part. Yep, then thanks for listening.