Implemented optimization #29

Discard subalgebras that don't have at least one designated value
This commit is contained in:
Brandon Rozek 2025-02-09 11:01:14 -05:00 committed by GitHub
commit 2d50cd9479
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

15
vsp.py
View file

@ -3,12 +3,11 @@ Check to see if the model has the variable
sharing property.
"""
from itertools import chain, combinations, product
from typing import Dict, List, Optional, Set, Tuple
from typing import List, Optional, Set, Tuple
from common import set_to_str
from model import (
Model, model_closure, ModelFunction, ModelValue
)
from logic import Conjunction, Disjunction, Implication, Operation
def preseed(
initial_set: Set[ModelValue],
@ -145,10 +144,20 @@ def has_vsp(model: Model, impfunction: ModelFunction, mconjunction: Optional[Mod
# NOTE: Optimziation before model_closure
# If the two subalgebras intersect, move
# onto the next pair
# onto the next pair.
if len(xs & ys) > 0:
continue
# NOTE: Optimization
# If a subalgebra doesn't have at least one
# designated value, move onto the next pair.
# Depends on no intersection between xs and ys
if len(xs & model.designated_values) == 0:
continue
if len(ys & model.designated_values) == 0:
continue
# NOTE: Optimization
# If the left subalgebra contains bottom
# or the right subalgebra contains top