Основы объектно-ориентированного программирования на языке 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