scrambled
Concept

Structural induction modulo fresh renaming

Modified just now
Books JourneyProgramming Language Theory Statusreviewing Tags
  • proof-reason-technique
  • syntax grammar

To show that mathcalP[mathcalX](a)\\mathcal{P}[\\mathcal{X}](a) holds for every ainmathcalB[mathcalX]a \\in \\mathcal{B}[\\mathcal{X}], it is enough to show the following:

  • Formulation

    Consider:

    • A set of sorts S\mathcal{S}.

    • A set of variables X\mathcal{X}.

    • A predicate P\mathcal{P} that is parameterized by X\mathcal{X} and ss.

    • A set of Abstract binding tree (ABT) B\mathcal{B} with Free variables in X\mathcal{X}.

      To show that P[X](a)\mathcal{P}[\mathcal{X}](a) holds for every aB[X]a \in \mathcal{B}[\mathcal{X}], it is enough to show the following:

    1. If xXsx \in \mathcal{X}_s, then P[X]s(x)\mathcal{P}[\mathcal{X}]_s(x).
    2. For every oo of arity (s1.s1;;sn.sn).s(\vec{s}_1.s_1;\dots;\vec{s}_n.s_n).s, if for each 1in1 \le i \le n, P[X,xi]si(ρ^i(ai))\mathcal{P}[\mathcal{X},\vec{x}'_i]_{s_i}(\hat{\rho}_i(a_i)) for every ρi:xixi\rho_i : \vec{x}_i \leftrightarrow \vec{x}_i' with xiX\vec{x}'_i \notin \mathcal{X}, then P[X]s(o(x1.a1;;xn.an))\mathcal{P}[\mathcal{X}]_s (o(\vec{x}_1.a_1 ; \dots ;\vec{x}_n .a_n)).