def i_attributeSet(ss: Substrate, attset: attributeSet) -> Sctids_or_Error: lhs = i_subAttributeSet(ss, attset.first) rhs = attset.second if rhs.is_empty or lhs.inran('error'): return lhs elif rhs.head.inran('attset_conjattset'): return intersect(lhs, i_conjunctionAttributeSet(ss, rhs.head.attset_conjattset)) else: return union(lhs, i_disjunctionAttributeSet(ss, rhs.head.attset_disjattset))
def i_refinement(ss: Substrate, rfnment: refinement) -> Sctids_or_Error: lhs = i_subRefinement(ss, rfnment.first) rhs = rfnment.second # TODO - the "or" below is a change to page 17 of the spec if rhs.is_empty or lhs.inran('error'): return lhs if rhs.head.inran('refine_conjset'): return intersect(lhs, i_conjunctionRefinementSet(ss, rhs.head.refine_conjset)) else: return union(lhs, i_disjunctionRefinementSet(ss, rhs.head.refine_disjset))
def i_refinedExpressionConstraint(ss: Substrate, rec: refinedExpressionConstraint) -> Sctids_or_Error: unref_interp = i_unrefinedExpressionConstraint(ss, rec.first) rhs = i_refinement(ss, rec.second) return intersect(unref_interp, rhs)
def i_conjunctionAttributeSet(ss: Substrate, conjset: conjunctionAttributeSet) -> Sctids_or_Error: return i_subAttributeSet(ss, conjset.head) if conjset.tail.is_empty else \ intersect(i_subAttributeSet(ss, conjset.head), i_conjunctionAttributeSet(ss, conjset.tail))