Основы объектно-ориентированного программирования на языке C# book | Page 179

8.3 Комплексна вправа до роздiлiв 1-6 if (proof[B].Operation == "IMPLICATION" && proof[B ].Arg2 == A) { proof[pc].IsAssertion = true; proof[pc].Operation = "IMPLICATION"; proof[pc].Arg1 = A; proof[pc].Arg2 = B; pc++; } break; case 16: A = s[top++]; B = s[top++]; if (proof[A].Operation == "IMPLICATION" && proof[B ].Operation == "IMPLICATION" && proof[proof[A].Arg2].Operation == "IMPLICATION " && proof[proof[B].Arg1].Operation == "IMPLICATION " && proof[proof[B].Arg1].Arg1 == proof[A].Arg1 && proof[proof[B].Arg1].Arg2 == proof[proof[A]. Arg2].Arg1 && proof[proof[B].Arg2].Operation == "IMPLICATION " && proof[proof[B].Arg2].Arg1 == proof[A].Arg1 && proof[proof[B].Arg2].Arg2 == proof[proof[A]. Arg2].Arg2) { proof[pc].IsAssertion = true; proof[pc].Operation = "IMPLICATION"; proof[pc].Arg1 = A; proof[pc].Arg2 = B; pc++; } break; case 17: A = s[top++]; B = s[top++]; if (proof[A].Operation == "IMPLICATION" && proof[B ].Operation == "IMPLICATION" && proof[proof[A].Arg1].Operation == "NOT" && proof[proof[A].Arg2].Operation == "NOT" && proof[proof[A].Arg1].Arg1 == proof[B].Arg2 && proof[proof[A].Arg2].Arg1 == proof[B].Arg1) { proof[pc].IsAssertion = true; proof[pc].Operation = "IMPLICATION"; proof[pc].Arg1 = A; proof[pc].Arg2 = B; pc++; } break; case 18: A = s[top++]; if (proof[A].Operation == "IMPLICATION" && proof[A].IsAssertion && proof[proof[A].Arg1].IsAssertion) proof[proof[A].Arg2].IsAssertion = true; break; case 19: if (cheat_mode) 179