I have tried to explain this way. @Arjun Sir, please check if is right way to do it.

A->B ..if A is true, then B is true to make "A implies B is valid"

Else A is true and B is false, then "A implies B is not valid"

So either of the cases, LHS has to be true. Now we need to check whether RHS is true or false. Here I am not bothered when A is false.

Here true means getting some attribute values or non empty set.

Option B:

____________

LHS: first obtain columns A1, then apply the condition C1. Since LHS is true means some values are there. So we can confirm that C1 is related to A1 and no other attributes, so we got the LHS is true.

Option B RHS: Since it is confirmed from LHS that C1 is related to A1, so RHS will give same number of values.

So option B is valid.

Option D.

__________

If C1 is based on only attribute A1, then both LHS and RHS will give same result.

But in LHS , C1 is not bound to only A1. It may have any attributes from A1, A2,A3,...An.

So let's say C1 is based on attribute A2, then it will select only those tuples where A2 condition satisfy and from those tuples it will select only attribute A1. By doing so we got some attribute values on left side since LHS is true.

Now check the RHS: Select all the attribute A1. On top of that when I apply C1 which is based on A2, then there will be no values. So RHS is empty.

So LHS has some values(true) and RHS is empty set(false). So for option D, LHS->RHS is not valid.

So only option B is true.