コード例 #1
0
def get_inverses(sequent):
    '''
    Given a sequent A |- B, return set of sequents ~A |- ~B,
    dealing with multiple antecedents and succedents. For example

        A, B |- C, D

    yields the set

        A, ~B |- ~C, ~D
        ~A, B |- ~C, ~D
    '''
    result = set()
    neg_succedents = union(try_get_negated(s) for s in sequent.succedents)
    pos_antecedents = set(sequent.antecedents)
    for pos_antecedent in pos_antecedents:
        try:
            negated = try_get_negated(pos_antecedent)
        except NotNegatable:
            negated = set()
        for neg_antecedent in negated:
            neg_antecedents = set_without(pos_antecedents, pos_antecedent)
            neg_antecedents = set_with(neg_antecedents, neg_antecedent)
            result.add(Sequent(neg_antecedents, neg_succedents))
    return result
コード例 #2
0
def all_consistent(completed):
    negated = set()
    for p in completed:
        try:
            negated.update(try_get_negated(p))
        except NotNegatable:
            pass
    return negated.isdisjoint(completed)
コード例 #3
0
def get_contrapositives(seq):
    """Given multiple antecedents and succedents, return a set of sequents with
    various antecedents or succedents negated such that each result sequent
    corresponds has a succedent set corresponding to exactly one of the
    original antecedents or succedents. For example.

        A, B |- C, D

    yields the set

        B, ~C, ~D |- ~A
        A, ~C, ~D |- ~B
        A, B, ~D |- C
        A, B, ~C |- D

    """
    ante_succ_pairs = []
    for succedent in map(weaken_sequent, seq.succedents):
        try:
            antecedents = try_get_negated(succedent)
        except NotNegatable:
            antecedents = set()
        ante_succ_pairs.append((antecedents, set([succedent])))
    for antecedent in map(weaken_sequent, seq.antecedents):
        try:
            succedents = try_get_negated(antecedent)
        except NotNegatable:
            succedents = set()
        ante_succ_pairs.append((set([antecedent]), succedents))
    result = set()
    for _, succedents in ante_succ_pairs:
        if succedents:
            succedent = iter(succedents).next()
            antecedents_product = []
            for other_antecedents, other_succedents in ante_succ_pairs:
                if other_succedents != succedents:
                    antecedents_product.append(other_antecedents)
            for antecedents in itertools.product(*antecedents_product):
                if succedent in antecedents:
                    continue
                try:
                    antecedents = try_simplify_antecedents(set(antecedents))
                except Inconsistent:
                    continue
                result.add(Sequent(antecedents, succedents))
    return result