Documentation

Nominal.LambdaAbs

Tm.lam as name abstraction #

The binder Tm.lam a factors through name abstraction: Tm.lam a t = tmLam (abs a t). The fv-based α-rename Tm.lam_rename_fresh and the some=any principle Tm.lam_some_any follow from abs_rename.

Main results #

theorem CatCrypt.Nominal.Lambda.avoid (c : Atom) (r : Raw) :
cfv r∃ (r' : Raw), AEq r r' catoms r'

Rename a bound name away. If c is not free in r, some α-equivalent r' avoids c entirely (as a bound name too).

theorem CatCrypt.Nominal.Lambda.Tm.lam_rename_fresh (a c : Atom) (t : Tm) (hc : ct.freeVars) (_hca : c a) :
lam a t = lam c (FinPerm.swap a c t)

fv-based α-rename for Tm.lam. Changing the bound name to any atom fresh for the term (not only for a representative) gives an equal term.

theorem CatCrypt.Nominal.Lambda.Tm.lam_absRel {a a' : Atom} {t t' : Tm} (h : AbsRel (a, t) (a', t')) :
lam a t = lam a' t'

The compatibility of Tm.lam with α-equivalence of the abstraction.

Tm.lam factors through name abstraction.

Equations
Instances For
    @[simp]
    theorem CatCrypt.Nominal.Lambda.tmLam_abs (a : Atom) (t : Tm) :
    tmLam (abs a t) = Tm.lam a t

    The syntactic binder is the nominal abstraction: Tm.lam a t = tmLam (abs a t).

    theorem CatCrypt.Nominal.Lambda.Tm.lam_some_any (a b c : Atom) (t : Tm) (hb : bt.freeVars) (hc : ct.freeVars) (hba : b a) (hca : c a) :
    lam b (FinPerm.swap a b t) = lam c (FinPerm.swap a c t)

    Some = any (freshness) for the binder. Two atoms fresh for the term give the same abstraction after the corresponding renaming — the Gabbay–Pitts principle, inherited from abs.