The shared-symbol decoder (issue #10, Unit 5a) #
Craig separation returns a sentence over the shared vocabulary of the two PC
presentations, namely symbSublang of the intersections of their occurrence sets. Unit 2b's
pcSentence_relationsIn_inter already proves that this intersection contains only graph
images of base relation symbols, so the separator can be decoded straight back into L —
no detour through KLang L or backTranslateFormula is needed.
Contents:
sharedLang— the Craig shared language, exactly ascraig_pcSeparation_relationalreturns it for the two side sentences;exists_base_of_mem_relSym— underL.IsRelational, every symbol ofrelSym (KLang L) (baseFuns L) (baseRels L)isGraphRelation.base (Sum.inl R)for a base relationRof the same arity (thebaseFunsbranch is vacuous);sharedToBase : sharedLang L T₀ T₁ →ᴸ L— the decoder, withsharedToBase_onRelation_specrecovering the shared symbol from its base preimage;realize_sharedToBase— the semantic square: for every graph coded, a shared sentence holds in the sublanguage reduct ofdiff its decoding holds incodeReduct d.
The shared language #
Decoding a shared relation symbol #
theorem
FirstOrder.Language.exists_base_of_mem_relSym
{L : Language}
[L.IsRelational]
{n : ℕ}
{r : L.KLang.graphLanguage.Relations n}
(h : ⟨n, r⟩ ∈ L.KLang.relSym L.baseFuns L.baseRels)
:
∃ (R : L.Relations n), r = GraphRelation.base (Sum.inl R)
Under L.IsRelational the base-generated graph symbols are exactly the base images: the
graphRelSym '' baseFuns branch of relSym is empty, so every member is
GraphRelation.base (Sum.inl R) at the same arity.