/// `¬¬¬(A ∧ B) ===> ¬¬(¬A ∨ ¬B)` (De-Morgan's Law in IL)
func deMorgan4_IL(_ notNotNotAB: Not>>)
-> Not, Not>>>
{
Not, Not>>> { (notEither: Not, Not>>) in
let notNotAB = Not> { notAB in
let notB = Not { b in
let notA = Not { a in
notAB.f((a, b))
}
let either: Either, Not> = .left(notA)
return notEither.f(either)
}
let either: Either, Not> = .right(notB)
return notEither.f(either)
}
return notNotNotAB.f(notNotAB)
}
}