from proveit.basiclogic import Implies, Not, in_bool
from proveit.common import A, B

# Not(Not(B)) assuming B and in_bool(B)
not_not_b = Not(Not(B)).conclude_via_double_negation()
# [A=>B] => [A => Not(Not(B))] assuming in_bool(B)
inner_expr = Implies(Implies(A, B), Implies(A, not_not_b)).proven({in_bool(B)})
# forall_{A, B | in_bool(B)}  [A=>B] => [A => Not(Not(B))]
inner_expr.generalize((A, B), conditions=in_bool(B)).qed(__file__)
from proveit.basiclogic import Implies, Not, FALSE, in_bool
from proveit.common import A, B

# hypothesis = [Not(B) => Not(A)]
hypothesis = Implies(Not(B), Not(A))
# A=FALSE assuming Not(B)=>Not(A) and Not(B)
AeqF = Not(A).equate_negated_to_false().proven({hypothesis, Not(B)})
# FALSE assuming Not(B)=>Not(A), Not(B), and A
AeqF.derive_right_via_equality().proven({hypothesis, Not(B), A})
# B assuming in_bool(B), (Not(B)=>Not(A)), A
Implies(Not(B),
        FALSE).derive_via_contradiction().proven({in_bool(B), hypothesis, A})
# [Not(B) => Not(A)] => [A => B] by nested hypothetical reasoning assuming in_bool(B)
transposition_expr = Implies(hypothesis, Implies(A, B)).proven({in_bool(B)})
# forall_{A, B | in_bool(B)} [A => B] => [Not(B) => Not(A)]
transposition_expr.generalize((A, B), conditions=in_bool(B)).qed(__file__)
Exemple #3
0
from proveit.basiclogic import Implies, Not, inBool
from proveit.common import A, B

# Not(Not(B)) assuming B and inBool(B)
notNotB = Not(Not(B)).concludeViaDoubleNegation()
# [A=>B] => [A => Not(Not(B))] assuming inBool(B)
innerExpr = Implies(Implies(A, B), Implies(A, notNotB)).proven({inBool(B)})
# forall_{A, B | inBool(B)}  [A=>B] => [A => Not(Not(B))]
innerExpr.generalize((A, B), conditions=inBool(B)).qed(__file__)