 Okay, so we're going to continue with the Ptoville. Okay? So, so, so, so, so, what's the problem? Seven? So let's go to problem eight. Okay, Ptoville on linear block codes. Okay, so, so the eight question, this case is, there was a linear code C, okay? And, okay, so, so, so, so, so the linear code has at least one. So it also has, so, so, so, okay. So first of all, can a linear code be filled up only with code words? Is that possible? It's not possible. First of all, linear codes should have odd zero, that is even made. And then if you take two odd rate code words, then add it together, you get an even made code words. So it's a, it's a non-trivial code, many non-trivial code should have at least one even made code words. Okay, so it can't, no, this information is a little bit narrow. It says the linear code has at least one odd rate code word. Okay, so it can't have at least one odd rate code word. Then suppose we define these two sets. C equals, okay, and then C over, okay, so these two are subsets of the code. Okay, so we have to show, size of C equals, size of C. Okay, so that is the eight problem. Okay? So you can see, let's say this question is here, right? So you have a code word, it has some odd rate code words, that's some even made code words. Okay? Okay? So, so clearly these two sets will not overlap, right? There will be no overlap in these two sets. And together they will make the entire code C. Okay, so those two things are very obvious. But now we have to show that the size of C, the number of even made code words equals the number of odd rate code words. Okay, so any strategies? Okay, so you have to do some work. So there's some suggestion about how you can take all the even made code words and take one of the odd rate code words and add it to this. And then what do you get? Okay, then what do you do? Okay, so yeah, I think your time is... Okay, so there are various ways of thinking about it, but you're kind of getting to the right approach. But I'll try to prove it in one or two ways, and then you will see, you might like some, you may not like something else. But there are multiple ways of proving this yourself, okay? So the first method is the following. Suppose you think of a generator matrix for this code, okay? There's going to be a generator matrix for this code, okay? There will be, let's say, n-genderters. You want d2, uh, somewhere I can put it differently. And dk-generators, okay? So I'll take the first part to be even, the first few to be even, and the remaining to be odd, okay? So if the code has even one odd-weight code word, then the number of odd-weight vectors in the generator matrix cannot be zero. Suppose if there is no odd part, then what does it mean? If the code will have only even-weight code words, okay? So there should be at least one odd-weight row in the generator matrix. You just collect all the odd-weight lines and put them together, collect all the even-weight lines and put them together. So what is an arbitrary code word? An arbitrary code word is you take messages and multiply on the lesson, okay? How can I get an even-weight code word? Okay, I can add any number of even-weight rows and only get even. For odd, what should I do? I should take only an even number, okay? So here, the first part can be anything, and then this part has to be even. This is for an odd-weight code word. What about an even-weight C? What if I want an even-weight code word? Oh, this is for even-weight, I'm sorry, I'm sorry. Okay, suppose I want odd-weight, what do I do? I should give up. Okay, right? What do I do, sir, an even-weight? Even-weight is it? Here, it can be anything. And then among the odd, I need even, right? Is that clear? Any even-weight can be anything. For odd-weight, what can happen? Okay, again, the even-weight part can be anything. It doesn't matter. Whatever you put there, you'll only get even-weight. For the odd-weight part, what should I do? I should have an odd number of them. I should have an odd number of them. So now here, you can explicitly count the number of even-weight, or what's an odd-weight code word, and show that they have to be equal. Okay, so how many such messages do you have? First part of anything, so that's two pairs of something times. For the remaining part, you only want even-weight vectors. So that will be two powers. How many of our odd numbers you have? Minus one. So overall, it will be two powers k minus one. Okay, so from this argument, you see the number of odd-weight code words. What's two powers k minus one? And what's the equal to the number of even-weight code words? Okay, so this is more of a workshop kind of proof. You know, when you do all the hard work, you can clearly find out how many code words are there and how many messages are there. So that's one way of doing it. Another way is to observe that C is actually a subcode. So you go back and look at the C. Set of all even-weight code words. Okay, so it's a subset of C. I said it's also a subcode. What do I mean by subcode? C by itself is also a linear code. Okay, so how do you prove that? You take any two code words in C and then add it to itself. What will you get? You will get another code. Okay, so that will happen. And then, so then the question we have to ask is, okay, so this is a subcode. So you can take C and partition it into cosets of C, right? So that will be able to do all those things. You have a bigger group and then you have a subgroup. The subgroup's cosets form a partition of C, right? C is the cosets of C, partition C, right? Okay? So then you have to argue that C O is a coset of C. Okay? You can argue very easily. So this is quite easy to see. And then from here also you can also argue that C O is a coset of C. Okay? That is the point that you are making about how you take one not-weight code word and add it to all the even-weight code words. You will get all the other codes. So how do you show that C O is a coset of C? How do you show that? Yeah. So see, there will be a little bit more task here. How do you show, see, how do you show something as a subcode? You add any two things. You should be inside the subcode, right? That happens for C. It's easy to show it's a subcode. How do you show C O is a coset of C? What is the property satisfied by two vectors in the coset of a code? The difference should be in the code. That's the idea, right? See, any two things in the coset will be. The same translation will be there. U plus C. So what is that? What is the property of the coset? You take one vector and then add it to all the code words. So if you take any two vectors in the coset and subtract them, what will happen? The common addition will go away and then you will end up back into code. So that's the property of the coset of the code. So you can show that very easily with C O. You take any two odd code words or broad-weight code words and then add them, what happens? You get an even-weight code word and you go back into the C O. What is the question? How do we know that C O is a coset of C E? That's not what I'm showing. I'm not showing that. I'm just showing what C O is a coset of C E. I'm not going to show anything else. I'm going to show C E is a subcode. I'm going to show C O is an entire C O is a coset of C E. Now what is C E union C O? C E. Equal to C E. So that shows the partitioning of C in terms of the code and its coset is basically C E and C O. So there are only two cosets per C E, itself and C O. And both of them have to have the same size. Coset and code will have the same size. So that's how you prove it. So this is more of a slick proof which uses properties of cosets and subgroups and all that. It kind of hides the details. The total proof I gave you, the generator matrix gives you all the details and how to go up or down. Some people like the other proof. Some people like depending on your taste. You might like one proof or the other. So you show C O is a coset of C E. So we do some proof here. And then you play. This is happening. So C E union C O equals C E. And that implies only two cosets. So two cosets and size of C O equals cosets. So in fact, if you show C O as a coset of C E, you have to worry about the partitioning and all that. So the reason why the partitioning is important is from this, you can show size of C O and size of C E equals 2 power k minus 1. If I only want to show size of C O is equal to size of C E, it's enough if I show C O as a coset of C E. Cosets and the code have the same size. That's enough. If I want to show both of them are equal to 2 power k minus 1, then I need to show that there is no other coset. And that's the kind of technique. So this is an important point to kind of know the number of odd rate code words and the number of even rate code words are equal. The opposite is one more case where the possible is code can have only even rate code words. That is also possible. Remember that. Okay, so the next question is a little bit more interesting. So you have the code C. So it's non-privileged in the following steps. No coordinate is zero all the time in all code words. You understand what I'm saying? So in more position, if the code word is C 1, C 2, C n, for no C i, all code words will C i be zero. At least in one code word, C i will be non-zero. So that is the thing. So now we have to show that the number of code words with the i-position zero equals the number of code words with the i-position one. So that is what we have to show. So you have to show, suppose I say C zero as set of all code words in C, subtract C i equals, or maybe i here, equals zero. And then C 1 i equals, again, for all code words in C, subtract C i equals one. Okay, so what this non-privileged means is for all i, both of these are non-empty. That's what is given to you. That's the non-privileged of this code. So you have to show that C zero i equals C 1 i equals C i minus one. So here again, you can use both proofs. You can use the generator matrix. If a particular position is not zero always, it means that a particular column of the generator matrix is not zero. No column of the generator matrix is zero. So you take all the rows with a particular column being zero in the top and then one in the bottom. Then look at all the message vectors and count how you can get a one in the particular location. You can do that. Okay, so that's one proof. If you understand what I'm saying, so you take generator matrix. Look at the height column. The height column cannot be all zero. What happens if the height column is all zero? Then that position will always be zero. So that's not correct. So the height column, you can arrange it so that you have zeroes for a while and then you have ones after that. Now you ask what message will give me zero in the height position. And then what message will give me one in the height position. You can see the quick counting will give you this. Two times K minus 1. Again, the odd number, even number will come. You'll get two times K minus 1 without any problem. Yes? Can I not give you a code with a flat definition? In a non-privile code? No, you cannot have it. You cannot have it. You can even show it that a non-linear code for linear codes is much easier because of this fact for the linear code. So this implies clearly that the dimension is K. You see that? See it's an NK code. Once you show this dimension is K, but even for a non-linear code that is true. It's a slightly more fancy combinatorial property. But for non-linear codes also it's... All right. So how do you prove it in the other way? You remember our other method? This is the Corset method. How do you prove this in the Corset method? In the Corset method, you have to show that this is a subcode. And you have to show that this is a... Corset of C0i. Again, you will use the same proof. And the union of these two is equal to C. So the Corset partitioning is basically C0i and C1i. So each of them should have size 2.5 kmp. So that's the Corset method for this. The generic matrix method is also nice. The Corset method is also equally good. They are all equally good. Okay. By induction? No. Oh. I don't know. But why would you... I mean, yeah, you can do induction also maybe. Yeah, so you look at that and then say... I don't know if induction is a clean method. Because... Okay. Okay, okay. Yeah, I think maybe you can do it that way. Then the induction will be certainly complicated because they have an nk code which is non-trivial or has at least one not-weight code word. They can be like a k minus 1 code. So then you have to assume all k minus 1 dimensions. So maybe you can do it. Yeah, induction might work. But I think the direct method is also nice. It's not too hard. Okay, so let's go to the 10th question. So... Okay, so these kind of questions are bread and butter. Okay, so it's very important. So let me do the 11th question first. 11th and 10th are similar. 10th is a bit more painful. So I'll leave it as an exercise. 11th we'll do in class. Okay, so this is bread and butter question. We should know how to do this. Here's the problem. Here's the problem. So let's see. So this is the bandwidth matrix. 010, 100, 110. 101, 011, 111. Okay, so I think I spoke about part of these few of these problems. Part of this problem in class that I've never discussed in the entire problem. So I think this is also part of the theory. So here's the排ity check matrix. And the goal is, you have to... So suppose you're encoding with this code. Okay, so the code is designed by this排ity check matrix. And you're doing encoding with this code. How do you do maximum likelihood decoding over a binary symmetric channel? So that is the question. Yes, we are using this code again. Use about... Use this code on BSc, the transition probability P. So how do you design a maximum likelihood decoder? Okay, so what is the maximum likelihood decoder? Okay, how do you do it? It's a syndrome decoder. Okay, so the maximum likelihood decoder for a BSc is basically the syndrome decoder. Okay, so... Remember, you can do it in so many different ways. This nearest neighbor decoding is also maximum likelihood, but for linear codes we came down to this notion of a syndrome decoder. So the syndrome decoder is the easiest thing that you can write down. So now we have to come up with this syndrome table. So how does the syndrome table work? Okay, so you have to make this table between S and E cap. So how do you define that? S is the... How many bits are there in S? Three bits, right? So how many three-bit combinations are there? Zero, zero, zero. Zero, zero, one, zero, zero, one, one. Zero, zero. One, zero, one, one, one, one, one. Okay, so there are eight three-bit possibilities. What is the definition of E cap? The lowest rate... Such that... The lowest rate vector, such that... Substance E cap equals... equals what? S, right? So what's the definition of this error vector? Okay, so how do you write it down? How do you get zero, zero, zero? All zero, right? Okay, what about zero, zero, one? I'm sorry? Zero, zero, one. Zero, zero, one. Okay, so let me say zero, zero, one. Be careful here, right? So this is a low rate vector. So let's say it was transpose. Okay, so it's zero, zero, one. One in the last position. Okay? So how do you write it? So it's also transpose here. Zero, zero, one, one. Okay, so here's the... Here's the error vector. So let's fill out the other guys before we come to zero, zero, one. The other guys are quite easy. This guy is just one, zero, zero, zero, zero. Zero, one, one is. And one, zero, zero is just this guy. One, zero, one is. One, zero, zero, zero, zero, one, zero, zero, zero. And this guy is zero from the last one. So here we can do multiple things. So this is one choice. Okay, if you don't like it, you can take something else also. But you should have a way to error vector. Okay, so that's the simple thing. So how is the maximum likelihood decoder work? If you're transmitting a code word C, and some error vector is getting added to it by the BSc. Okay, so this is from the BScP. You remember, right? That's our equivalent model, loader vector model. You get R, what is your first step? You compute, X times R transpose to get S transpose. And then you look it up and get E cap. And then you do what? Add E cap to R and get your C cap. Okay, so that is your maximum likelihood decoder picture. And that is ML decoder. Okay, so now the question is, how do you compute probability of block errors? How do you compute probability that C not equal to C cap? Okay, so let's say how do you compute probability of C equals C cap? So you're saying you can use this table to do it. And you have to be a little bit careful here so you can write down a lot of things. But finally, one of the properties of this decoder is, what are the error vectors E for which this will perform successful decoding? Okay, so let me see if you can answer this question. So what error vectors E will this decoder perform successful decoding? I'm sorry? Okay, so I mean you can give a more precise answer than that. You can give a very precise answer to this question. When will it give you exact decoding? When will C be equal to C cap? Yeah, when E equals E belongs to one of these E caps in this table. Only when the actual E occurred and occurred is exactly equal to one of the E caps in this table will you possibly get successful decoding. Yes or no? Because we're only XORing with E cap. Right, RXOR E cap. We're always declaring the error is from this set. So the only way we have successful decoding is if E belongs to this set. So that can easily compute. So those two events are the set. So if you think the probability that C equals E cap will also have probability that it belongs to the E caps in the indicator. So what's the probability that an error that occurs is equal to these things? Okay, what is the probability of all zero error vector? 1 minus T raise to the power 6. What's the probability of the next rate? 1 minus T power 4 times P squared. So all you have to do is count the number of weight zero E caps, count the number of weight one E caps, count the number of weight two E caps and so on. And then you can quickly write down the probability expression. Okay, so how many weight zero E caps do you have? Only one of them. How many weight one E caps do you have? Six of them. How many weight two do you have? One of them. So all you have to do is to write that expression for this. This is basically 1 minus P power 6 plus 60 to 1 minus P power 5 plus P squared times 1 minus P. So what's the probability that C is not equal to C cap? 1 minus this one. So that's the idea. So what happens to, so let's say what's the probability that C is not equal to C cap? There's 2, 1 minus this one, right? So 1 minus P power 6 minus 60 into 1 minus P power 5 minus P squared times 4 times 5. Suppose P is standing to zero. So as P tends to zero, what happens to this expression? P is becoming really, really small. Zero. Zero. Of course you can say zero, but I want an expression as a function of P. How far out of the decay with P? And P is very, very, very small. Yeah, so you can give me an exact expression. What will it be? See the P star expression is what's going to dominate, right? So you can see 1 will cancel. Okay? And then 6P will also cancel with the 6P from the next term. So the P squared will remain and that is how this will decay to zero, P squared. So what will be that exact thing you can say? What is the P squared expression here? What is the P squared expression here? 6P times, what is the P squared expression in this term? 6P times 5P, right? So it's plus, no? Here it is plus, here it is minus, minus what? 6 twos twos what? 50 P squared. So what about here? Minus P squared. Okay? So the final expression will be 14P squared. A plus order of P squared. Okay? So smaller than P squared. So when you say, okay, so forget about this people. Smaller. You didn't know this. Okay? So other terms will be P star 3 or higher terms. So that's what I meant by saying little over P squared. Okay? So P star 3 or higher terms. So the dominant term will be 14P squared. Is that okay? So that's one way of thinking about it. All right, so this is what I call a bread and butter problem in linear codes. Okay, if you learn about linear block codes, what if there's a problem that you should be able to retain leaving? This is one of those things. Okay, so the next question. I'm sorry? I think that the error vectors should be obtained very often. Should be obtained again? Yeah, so the interpretation is only if there are vectors. Yeah, so when T becomes very, very small, what is the most likely error vector? Almost always you'll get out 0. Once in a while you can get weight 1. All the weight 1 error vectors are covered here. Right? Very rarely you'll get weight 2, and that will be the probability T squared. Is it P the probability of having a 1 or a 0? 1 or a 0 in what? In E. Right? Each bit of the error vector E is 1 or 0 with 1 with probability P. 0 with probability 1 minus P. Is it okay? So putting T star makes sense. Okay, so as T tends to 0, this will also go to 0. If T is 0, you're not getting any flips. You'll always get all 0 error vectors which you can correct. Okay, so it's okay. All right, so the next question is, the next question I'm going to do is basically question number 13. What are we doing on time? 135. Okay, so let me do question number 13. It's a slight departure from the decoding kind of question, but anyway, it's an interesting question. Suppose you're asking a linear code, or a simple question, and you have a vector U which does not belong to C. You have a linear code and U that does not belong to C. You take C and then the coset generated by U. And you have to take the union of these two. You have to show that this union, this, is actually a linear code. So you take a code and take one of its cosets, take the union of those two, you'll get a linear code. Okay, so this is a very easy thing to prove. How do you show that this is a linear code? You take any two code words, you absorb them, you should be inside this. Okay, so if two of your vectors that you take are inside C itself, then what will happen? It'll anyway be inside. If two of the two of the words that you take are inside the coset, then what happens? Exab will come back to C. If one vector is in C and the other vector is in U plus C, what happens? You end up in U plus. So whatever choice you make for the two vectors, you'll be within the set, and that's enough to show that this is a linear code. It's quite easy to prove. So what will be the dimension of this code? K plus 1, right? So do an NKD code. This will be same N, K plus 1. What about D? Think about what we can say about D. We probably can't say much. It's too complicated. You're taking a vector U and then adding up. So you might say what happens to the minimum weight code word, which is a larger weight code word, which will suddenly XR with this U and D version all over it. So it's difficult to say anything about minimum distance. So minimum distance is just close for a toss. So in general, you'll see in all these constructions, keeping the block length same, if you try to increase the dimension, in general, the minimum distance, you lose control over. But if you do the opposite, start with the block length, same block length, you try to decrease the dimension in your modification. In general, you can see that you get a good handle on minimum distance. You can say greater than or equal to something. So it's always like that. So let's try this. Okay, so the next problem is also a little bit more theoretical kind of thing. It asks you to show the following. So how do you show, what is the strategy to show a proof like this? Suppose you want to show the dual of the code, its dual equals the code itself. So how do you show something like this? Yeah, so you have to show the only way to show these things is you consider an element of the left hand side. You have to show it also belongs to the right hand side. And then you take an element of the right hand side, you have to show it belongs to the left hand side. Okay, so for that, the belonging part, you have to use the definition. Okay, so see here some code. There is no definition code. It's just a linear subspace. It's given to you. What is the definition of C perp? What does it mean? What is the definition of C perp? So therefore, I'll be suspect d dot c equals 0 for all c and c. That's the definition of c perp. So that's the definition of c perp. So that's the definition of c perp perp. How do we define it? So therefore, I'll u, that's what u dot b is 0 for all d and c perp. So these are the definitions. So don't work with anything else that is not given. So this is the definition. From here, you have to show that if an element belongs to c perp perp, then it also belongs to c. So how do you show that? Any ideas? Okay. So think about it. I'm not going to go into the details there. It's a bit technical, as in you have to say or argue that this has to happen and that has to happen. All right. So think about how you might want to prove it. It's not too easy, but just writing down might be painful. But it's not very relevant to error control codes as such. It's a standard result in linear vector spaces. You can prove it in so many different ways. I'm going to skip the details there. We don't have too much time. But think about how to do it. So we'll do the part b. Part b is a little bit more interesting because it has a coding theory connotation. Okay. So suppose I have cd. Okay. Suppose I have cd being coded in a code. Okay. So let's say linear code 0 1 n. Okay. Block length has to be the same. Okay. That has to be the same. So I'm going to define something called c plus b. Okay. C plus b, u plus b, u and c, b and b. Okay. All right. Okay. So this is c plus b. Okay. So the first thing is, is c plus b a linear code? Is this a linear code? Yeah. I mean that's easy to show. You take u1 plus v1, u2 plus v2. What does the sum of those two? You take u1 plus v1 plus v2. u1 plus u2 belongs to c again. u1 plus v2 belongs to b again. So you put that back to the c plus. Okay. So u2 plus v is a linear code. The question is, what is its rule? Okay. So I'll give you another way to think about it. Suppose you take a generator matrix for c. So let's say c is generator matrix is g1, gc. Okay. And then generator matrix for b is db. What will be a generator matrix for c plus b? gc plus gd? No. Don't go to the real directly. Answer this question first. What is the dimension of c plus d? Okay. C and d don't have the same dimension. Dimension of c plus? Dimension of d? Yeah. So it's a bit more complicated to come up with the dimension of c plus d, but you can come up with a generator matrix for c plus d quite easily. So what is the generator matrix for c plus d? You can do this. This is a better thing. This is the best way to do a generator matrix. Don't say gc plus gd. gc plus gd is not correct. Okay. What is wrong with gc plus gd? You're forcing the same message for each of these things. That's not really needed. Each of them can be different. So gc, gd is the generator matrix for c plus d. But remember that the rank, so gc, gd you have no control over. So that's why dimension is a bit more hard. It's basically the rank of this. So it can be some, there may be some linearly dependent rows here. So that's why you have to take dimension of c minus dimension of c intersect d. C intersect d is also a linear code. Okay. So that's something you have to do. But now I think in terms of dual, it's very easy. So what is a dual? What code word belongs to the dual of c plus d? It has to be orthogonal to all the rows in gc. It also has to be orthogonal to all the rows in gd. That means what? It belongs to the dual of c. Dual of d. And from there you can quickly conclude that this has to be equal to c per intersect d. So it's an easy result if you think in terms of generator matrix like this. But you can also prove this more directly. Okay. That's also possible. You can prove this more directly. It's not really that hard to show this very directly. So you take a vector on the left-hand side. It has to be on the right-hand side. Okay. So you take a vector on c plus d per which means what? It's orthogonal to all vectors in c plus d. So you simply take v equals 0 means it's orthogonal to all vectors in c. You take u equals 0. It's orthogonal to all vectors in d. So it belongs to c per intersect d per. Now if you take a vector in c per of intersect d per then you can take u plus v dot that to be u dot that plus v dot that and u dot that is 0. v dot that is also 0, so 0 plus 0 is 0. See you get inclusion in both sides. So these two sets have to be the same. You can also prove it that way if you like. So both ways are okay. The second one is probably a little bit more rigorous than the first one. But both are okay. C plus v? It's not concatenation. I'm not concatenating. Dimension remains the same. See I'm doing u plus v right. The block length remains the same. Block length remains the same. It's a little bit less than concatenating. Yeah, concatenating the basis. But that could be the way to think about it. So maybe if you like I'll write down the final proof of this. So if you want to prove it. So you say let x belong to c plus v dot. What does that mean? That implies x dot u plus v equals 0 for all u and c and v and d. So in particular take v equals 0. You know 0 belongs to d right. I'm putting underscore somewhere. I'm not doing it somewhere else. So sorry for that. The version is okay. So you take v equals 0 and you get x dot u equals 0 for all u and c. Similarly you take x dot. So what does it mean to say x dot u equals 0 for all u and c? That implies x is in c dot. And then you take u equals 0 which will imply x dot v equals 0 for all v and d. And that implies x belongs to d dot also. x belongs to c dot of intersect people. And then on the other side so that that concludes the thing that c plus c dot is contained in c dot of intersect people. So now we have to show the opposite containment. So that you start with x1 c dot of intersect people. Now if you take x dot v where u is in c in c so and v is in d what will you get here? x dot u plus x dot v. What is this guy? This is 0 plus 0 which is 0. x belongs to c plus v. And that concludes everything. So that's Q. So I'm going to skip a few final steps. So c dot of intersect people is contained in c plus v and those two sections. So that's how we formally prove these things. We try a similar formal proof for the first part. c dot of p equals c but be very careful don't use the result already. So that's the only thing you have to do. But you have to use the properties of the dual very carefully. So in a way you're trying to find the dual of c dot. We have to show all right. So we have about 5 minutes. Less than 5 minutes maybe. So for the period today it takes you to so we have some time. So the next question is the following. So there is sustain a and b. So this key here for our two generator matrices given and you have to show the codes generated by these two are equivalent. So what are equivalent codes? We have to assign equivalent codes for you. C codes are said to be equivalent if a permutation of position can go from one to the other. So c and c1 and c2 are equivalent. Let me write it down carefully. This is a bit imprecise. If you have two codes c1 and c2 are equivalent. If there exists a permutation pi such that c2 equals c c2 equals c times one c2 equals c times one pi2 c1 equals c pi n c1 c2 cn equals c1 c2 cn equals So basically what I mean is you list out all the code words of c1 and then do a column permutation. Basically permutation of the positions you should get all the code words of c2. So if there is a permutation. So pi is like a standard notation for permutation. So this is a permutation. What is a permutation? It starts from 1, 2, 3, n to itself. So that is a permutation. So that is one to the other. So these two codes are called equivalent. Why are they equivalent? It doesn't matter what code you use. You just send me the code and you are going to get the same kind of problem. So it is given two generator matrices. How do you conclude whether the two codes are equivalent or not? You want to send permutation, it is a bit more difficult. See first you have to reduce it to some standard form. So the best thing is to you can get Yeah, so you can try various things. One easy way to show is that you take each row of the first generator matrix show that it is a code word of the second generator matrix. And both of them are full ranked and that's enough. That's one way of doing it. Another way of doing it, one thing which will facilitate this is you reduce both the code words, both the generator matrices to systematic form. Then these things are easier. You will see suddenly that some you might be able to quickly start it. But the same method is what? You ensure that each row of G is actually a code word of G prime and vice versa. But that will make sure that both codes are kind of equal. We will look at the pattern of the permutation. So permutation is also there. Each code word under the same permutation becomes the launch of G prime. So permutation is a bit more complicated to check. So I would suggest the best thing to do is reduce the systematic form. So if it is small enough reduce the systematic form. You will be able to quickly do it. Yes, you have to reduce the systematic form and then see if there is some pattern that you are observing. Quickly you can find this. So that's one more problem. We will stop here and I will send you a mail about tomorrow morning. In case you don't meet tomorrow, we will meet again on Monday. Okay.