Combining existential second-order prefixes #
Pull the leading existential relation quantifiers of both operands outward, weakening the other operand at each binder. Once both prefixes are exhausted, join the matrices by conjunction or disjunction. This is the usual closure construction for existential second-order logic, implemented on de Bruijn syntax.
@[irreducible]
def
Complexity.DescriptiveComplexity.SOFormula.mergeExist
{V : Vocabulary}
(isConjunction : Bool)
{rctx : List Nat}
{n : Nat}
:
Merge leading existential SO prefixes, then combine their matrices.
isConjunction = true selects conjunction and false selects disjunction.
Equations
Instances For
def
Complexity.DescriptiveComplexity.SOFormula.existConj
{V : Vocabulary}
{rctx : List Nat}
{n : Nat}
(φ ψ : SOFormula V rctx n)
:
SOFormula V rctx n
Conjoin existential SO formulas with their relation quantifiers in one prefix.
Equations
Instances For
def
Complexity.DescriptiveComplexity.SOFormula.existDisj
{V : Vocabulary}
{rctx : List Nat}
{n : Nat}
(φ ψ : SOFormula V rctx n)
:
SOFormula V rctx n
Disjoin existential SO formulas with their relation quantifiers in one prefix.