I don't know exactly what you mean by "expression-wise" but if you break them down based on whether a is true or false it becomes easy to see.
If a is true (first two terms are false in both Eq1 and Eq2):
Eq1 => ~b & ~c
Eq2 => ~b & ~c
If a is false:
Eq1 => ~b | ~c
Eq2 => ~b | ~c | (~b & ~c)
== Eq1
edit:
You can make this same argument more formally using boolean identities:
(~a & ~b | ~a & ~c | ~b & ~c) == ((~a & ~b) | (~a & ~c) | (~b & ~c)) & (a | ~a)
since (a | ~a) == 1
and x & 1 = x
Then using distribution of &
over |
:
== (((~a & ~b) | (~a & ~c) | (~b & ~c)) & a) | (((~a & ~b) | (~a & ~c) | (~b & ~c)) & ~a)
Now you have each of the "cases" as an additional fact on either side of the main |
. Applying distribution again will push this fact into the internal cases and eventually make the same cancelations I made above. Looking at just the first distribution into the left side:
((~a & ~b) | x) & a) == (a & ~a & b) | (a & x) == 0 | (a & x) == a & x
where x is the other two or expressions. Following this strategy will give you the same answer as above. If you get stuck I can take you further, but you should be able to take it from here.