Substitution of free ports in primitive-positive gadgets #
The conjunction is changed only by relabeling its scopes. Free labels can be identified, and selected old free ports can become fresh existential auxiliaries. Repeated scope variables are permitted. These operations assert finite semantics only, with no planarity conclusion.
theorem Cslib.Logic.PL.CSP.WellFormed.relabel {Rel : Type} {arity : Rel → ℕ} {V W : Type} {F : CSP Rel V} (h : WellFormed arity F) (f : V → W) :
WellFormed arity (CSP.relabel f F)
Relabeling variables preserves each constraint's declared scope width.
def Cslib.Logic.PL.CSP.PPGadget.relabelFree {Rel : Type} {arity : Rel → ℕ} {sem : Rel → List Bool → Bool} {n m : ℕ} {R : Set (Fin n → Bool)} (g : PPGadget arity sem R) (f : Fin n → Fin m) :
Relabel the free ports, keeping the same auxiliary labels and the same constraints. Noninjective maps perform variable identification, rather than adding an equality symbol.
Instances For
def Cslib.Logic.PL.CSP.PPGadget.substitute {Rel : Type} {arity : Rel → ℕ} {sem : Rel → List Bool → Bool} {n m k : ℕ} {R : Set (Fin n → Bool)} (g : PPGadget arity sem R) (f : Fin n → Fin m ⊕ Fin k) :
Identify and hide free ports by the specified label map. No constraints are added or
removed. The first k auxiliaries are exactly the newly hidden ports.