fact: Fixpoint embed_form xO xS xA xEq (phi : @form Σf Σp _) : @form Σf' Σp' _ := match phi with | fal => fal | atom (pred Eq) v => atom (@var_pred _ xEq 2) (Vector.map (embed_term xO xS xA) v) | atom (@var_pred _ x 2) v => if Compare_dec.le_lt_dec xEq x then atom (@var_pred _ (S x) 2) (Vector.map (embed_term xO xS xA) v) else atom (@var_pred _ x 2) (Vector.map (embed_term xO xS xA) v) | atom (@var_pred _ x ar) v => atom (@var_pred _ x ar) (Vector.map (embed_term xO xS xA) v) | bin op phi psi => bin op (embed_form xO xS xA xEq phi) (embed_form xO xS xA xEq psi) | quant_indi op phi => quant_indi op (embed_form xO xS xA xEq phi) | quant_func op 0 phi => quant_func op 0 (embed_form (S xO) xS xA xEq phi) | quant_func op 1 phi => quant_func op 1 (embed_form xO (S xS) xA xEq phi) | quant_func op 2 phi => quant_func op 2 (embed_form xO xS (S xA) xEq phi) | quant_func op ar phi => quant_func op ar (embed_form xO xS xA xEq phi) | quant_pred op 2 phi => quant_pred op 2 (embed_form xO xS xA (S xEq) phi) | quant_pred op ar phi => quant_pred op ar (embed_form xO xS xA xEq phi) end.
imports: PeanoNat Lia Vector Undecidability.SOL(SOL PA2) Undecidability.Shared.Libs.PSL(Vectors) Undecidability.SOL.Util(Syntax Subst Tarski) Undecidability.Synthetic(Definitions DecidabilityFacts EnumerabilityFacts ListEnumerabilityFacts ReducibilityFacts) Undecidability.Shared.Dec