Documentation

ISAR.InvariantLayer

The subtype of ISAR terms that belong to the pure SKI fragment.

Equations
Instances For

    Two terms are operationally equivalent if they can reduce to a common term.

    Equations
    Instances For
      theorem ISAR.OperEq.symm {t u : ISKSubtype} (h : OperEq t u) :
      OperEq u t
      theorem ISAR.OperEq.trans {t u w : ISKSubtype} (h1 : OperEq t u) (h2 : OperEq u w) :
      OperEq t w

      The Invariant Layer is defined as the operational equivalence quotient of the SKI fragment.

      Equations
      Instances For

        Application of raw fragment subtypes.

        Equations
        Instances For
          theorem ISAR.app_congruence (t1 t2 u1 u2 : ISKSubtype) (ht : OperEq t1 t2) (hu : OperEq u1 u2) :
          OperEq (app_raw t1 u1) (app_raw t2 u2)

          Operational equivalence is a congruence under application.

          Application descends to a well-defined function on Invariant Layer quotient classes.

          Equations
          Instances For

            Canonical projection to the Invariant Layer.

            Equations
            Instances For
              theorem ISAR.HasNF_of_OperEq {t u : ISKSubtype} (h : OperEq t u) (ht : HasNF t) :
              theorem ISAR.OperEq_HasNF_eq {t u : ISKSubtype} (h : OperEq t u) :
              theorem ISAR.ISKTerm_cd {t : ITerm} (ht : ISKTerm t) :
              inductive ISAR.IKTerm :
              Instances For
                theorem ISAR.cd_app_of_not_redex (f x : ITerm) (h1 : f ITerm.norm) (h2 : ∀ (y : ITerm), f ITerm.konst · y) (h3 : ∀ (y z : ITerm), f ITerm.comp · y · z) (h4 : ∀ (y z : ITerm), f ITerm.sₛ · y · z) :
                cd (f · x) = cd f · cd x
                theorem ISAR.cd_size_lt_IK (t : ITerm) (ht : IKTerm t) (h : t cd t) :
                @[implemented_by ISAR.cd_loop]
                noncomputable def ISAR.nf_of_term (t : ISKSubtype) :

                Representative of an OperEq-class on concrete terms. AC section used by canonical_rep. Not claimed computable.

                • If HasNF, pick some NF (Classical.choose on the nonempty NF fiber). The computational HasNF section is nf_of_HasNF_fuel / nf_of_HasNF in CanonicalRepresentative.lean (choose fuel, then cd_loop_fuel). That file imports this one, so this HasNF branch cannot call cd_loop_fuel via that path without a cycle.
                • If ¬HasNF, pick any class representative via Quotient.exists_rep. SKI is not SN; no finite cd yields NormalI. This is expected, not a gap.

                Computational path: @[implemented_by cd_loop] (iterated complete development).

                Equations
                Instances For

                  nf_of_term is always an OperEq-representative (fixes the old false norm fallback).

                  Instances For
                    theorem ISAR.cd_app_of_LinearIKTerm {f : ITerm} (x : ITerm) (hf : LinearIKTerm f) (h_norm : f ITerm.norm) (h_konst : ∀ (y : ITerm), f ITerm.konst · y) :
                    cd (f · x) = cd f · cd x
                    theorem ISAR.normal_of_cd_eq (t : ITerm) (ht : LinearIKTerm t) (h : t = cd t) :