Documentation

Auto.Embedding.LamBVarOp

def Auto.Embedding.Lam.LamWF.fromMapBVarAtAux {f : NatNat} {restore : (NatLamSort)NatLamSort} {lctx' : NatLamSort} {rterm' : LamTerm} {rty : LamSort} (covP : coPair f restore) (idx : Nat) {lamVarTy : LamTyVal} {lctx : NatLamSort} (rterm : LamTerm) (hLCtx : lctx' = restoreAt idx restore lctx) (hRTerm : rterm' = LamTerm.mapBVarAt idx f rterm) (HWF : LamWF lamVarTy { lctx := lctx', rterm := rterm', rty := rty }) :
LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rty }
Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def Auto.Embedding.Lam.LamWF.fromMapBVarAt {f : NatNat} {restore : (NatLamSort)NatLamSort} {rty : LamSort} (covP : coPair f restore) (idx : Nat) {lamVarTy : LamTyVal} {lctx : NatLamSort} (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := restoreAt idx restore lctx, rterm := LamTerm.mapBVarAt idx f rterm, rty := rty }) :
    LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rty }
    Equations
    Instances For
      theorem Auto.Embedding.Lam.LamWF.mapBVarAt.correct {f : NatNat} {restore : (NatLamSort)NatLamSort} {rTy : LamSort} (lval : LamValuation) {restoreDep : {rty : NatLamSort} → ((n : Nat) → LamSort.interp lval.tyVal (rty n))(n : Nat) → LamSort.interp lval.tyVal (restore rty n)} (covPD : coPairDep (LamSort.interp lval.tyVal) f restore restoreDep) (idx : Nat) {lctxTy : NatLamSort} (lctxTerm : (n : Nat) → LamSort.interp lval.tyVal (lctxTy n)) (rterm : LamTerm) (HWF : LamWF lval.toLamTyVal { lctx := lctxTy, rterm := rterm, rty := rTy }) :
      interp lval lctxTy lctxTerm HWF = interp lval (restoreAt idx restore lctxTy) (restoreAtDep idx (fun {rty : NatLamSort} => restoreDep) lctxTerm) (mapBVarAt idx rterm HWF)

      Changing all .bvar ?n in t (where ?n >= idx) to .bvar (?n + lvl)

      Equations
      Instances For
        theorem Auto.Embedding.Lam.LamTerm.bvarLiftsIdx_eq_bvar {idx lvl : Nat} {t : LamTerm} {n : Nat} :
        bvarLiftsIdx idx lvl t = bvar n n < idx t = bvar n n idx + lvl t = bvar (n - lvl)

        Changing all .bvar ?n in t (where ?n >= idx) to .bvar (Nat.succ ?n)

        Equations
        Instances For
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftsIdx_bvar {idx lvl n : Nat} :
          bvarLiftsIdx idx lvl (bvar n) = bvar (mapAt idx (fun (x : Nat) => x + lvl) n)
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftIdx_bvar {idx n : Nat} :
          bvarLiftIdx idx (bvar n) = bvar (mapAt idx (fun (x : Nat) => x.succ) n)
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftsIdx_app {idx lvl : Nat} {s : LamSort} {fn arg : LamTerm} :
          bvarLiftsIdx idx lvl (app s fn arg) = app s (bvarLiftsIdx idx lvl fn) (bvarLiftsIdx idx lvl arg)
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftIdx_app {idx : Nat} {s : LamSort} {fn arg : LamTerm} :
          bvarLiftIdx idx (app s fn arg) = app s (bvarLiftIdx idx fn) (bvarLiftIdx idx arg)
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftsIdx_lam {idx lvl : Nat} {s : LamSort} {body : LamTerm} :
          bvarLiftsIdx idx lvl (lam s body) = lam s (bvarLiftsIdx idx.succ lvl body)
          theorem Auto.Embedding.Lam.LamTerm.bvarLiftIdx_lam {idx : Nat} {s : LamSort} {body : LamTerm} :
          bvarLiftIdx idx (lam s body) = lam s (bvarLiftIdx idx.succ body)
          theorem Auto.Embedding.Lam.LamTerm.bvarLifts_add {idx lvl₁ lvl₂ : Nat} {t : LamTerm} :
          bvarLiftsIdx idx (lvl₁ + lvl₂) t = bvarLiftsIdx idx lvl₁ (bvarLiftsIdx idx lvl₂ t)
          def Auto.Embedding.Lam.LamWF.bvarLiftsIdx {rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} {idx lvl : Nat} {xs : List LamSort} (heq : xs.length = lvl) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }) :
          LamWF lamVarTy { lctx := pushLCtxsAt xs idx lctx, rterm := LamTerm.bvarLiftsIdx idx lvl rterm, rty := rTy }
          Equations
          Instances For
            def Auto.Embedding.Lam.LamWF.fromBVarLiftsIdx {rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} {idx lvl : Nat} {xs : List LamSort} (heq : xs.length = lvl) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := pushLCtxsAt xs idx lctx, rterm := LamTerm.bvarLiftsIdx idx lvl rterm, rty := rTy }) :
            LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }
            Equations
            Instances For
              theorem Auto.Embedding.Lam.LamWF.interp_bvarLiftsIdx {rTy : LamSort} (lval : LamValuation) {idx lvl : Nat} {tys : List LamSort} (xs : HList (LamSort.interp lval.tyVal) tys) (heq : tys.length = lvl) (lctxTy : NatLamSort) (lctxTerm : (n : Nat) → LamSort.interp lval.tyVal (lctxTy n)) (rterm : LamTerm) (HWF : LamWF lval.toLamTyVal { lctx := lctxTy, rterm := rterm, rty := rTy }) :
              interp lval lctxTy lctxTerm HWF = interp lval (pushLCtxsAt tys idx lctxTy) (pushLCtxsAtDep xs idx lctxTerm) (bvarLiftsIdx heq rterm HWF)
              def Auto.Embedding.Lam.LamWF.bvarLifts {rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} {lvl : Nat} {xs : List LamSort} (heq : xs.length = lvl) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }) :
              LamWF lamVarTy { lctx := pushLCtxs xs lctx, rterm := LamTerm.bvarLifts lvl rterm, rty := rTy }
              Equations
              Instances For
                def Auto.Embedding.Lam.LamWF.fromBVarLifts {rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} {lvl : Nat} {xs : List LamSort} (heq : xs.length = lvl) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := pushLCtxs xs lctx, rterm := LamTerm.bvarLifts lvl rterm, rty := rTy }) :
                LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }
                Equations
                Instances For
                  theorem Auto.Embedding.Lam.LamWF.interp_bvarLifts {rTy : LamSort} (lval : LamValuation) {lvl : Nat} {tys : List LamSort} (xs : HList (LamSort.interp lval.tyVal) tys) (heq : tys.length = lvl) (lctxTy : NatLamSort) (lctxTerm : (n : Nat) → LamSort.interp lval.tyVal (lctxTy n)) (rterm : LamTerm) (HWF : LamWF lval.toLamTyVal { lctx := lctxTy, rterm := rterm, rty := rTy }) :
                  interp lval lctxTy lctxTerm HWF = interp lval (pushLCtxs tys lctxTy) (pushLCtxsDep xs lctxTerm) (bvarLifts heq rterm HWF)
                  def Auto.Embedding.Lam.LamWF.bvarLiftIdx {rTy s : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} (idx : Nat) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }) :
                  LamWF lamVarTy { lctx := pushLCtxAt s idx lctx, rterm := LamTerm.bvarLiftIdx idx rterm, rty := rTy }
                  Equations
                  Instances For
                    def Auto.Embedding.Lam.LamWF.fromBVarLiftIdx {s rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} (idx : Nat) (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := pushLCtxAt s idx lctx, rterm := LamTerm.bvarLiftIdx idx rterm, rty := rTy }) :
                    LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }
                    Equations
                    Instances For
                      theorem Auto.Embedding.Lam.LamWF.interp_bvarLiftIdx {rTy : LamSort} (lval : LamValuation) {idx : Nat} (lctxTy : NatLamSort) (lctxTerm : (n : Nat) → LamSort.interp lval.tyVal (lctxTy n)) {xty : LamSort} (x : LamSort.interp lval.tyVal xty) (rterm : LamTerm) (HWF : LamWF lval.toLamTyVal { lctx := lctxTy, rterm := rterm, rty := rTy }) :
                      interp lval lctxTy lctxTerm HWF = interp lval (pushLCtxAt xty idx lctxTy) (pushLCtxAtDep x idx lctxTerm) (bvarLiftIdx idx rterm HWF)
                      def Auto.Embedding.Lam.LamWF.bvarLift {rTy s : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }) :
                      LamWF lamVarTy { lctx := pushLCtx s lctx, rterm := rterm.bvarLift, rty := rTy }
                      Equations
                      Instances For
                        def Auto.Embedding.Lam.LamWF.fromBVarLift {s rTy : LamSort} {lamVarTy : LamTyVal} {lctx : NatLamSort} (rterm : LamTerm) (HWF : LamWF lamVarTy { lctx := pushLCtx s lctx, rterm := rterm.bvarLift, rty := rTy }) :
                        LamWF lamVarTy { lctx := lctx, rterm := rterm, rty := rTy }
                        Equations
                        Instances For
                          theorem Auto.Embedding.Lam.LamWF.interp_bvarLift {rTy : LamSort} (lval : LamValuation) (lctxTy : NatLamSort) (lctxTerm : (n : Nat) → LamSort.interp lval.tyVal (lctxTy n)) {xty : LamSort} (x : LamSort.interp lval.tyVal xty) (rterm : LamTerm) (HWF : LamWF lval.toLamTyVal { lctx := lctxTy, rterm := rterm, rty := rTy }) :
                          interp lval lctxTy lctxTerm HWF = interp lval (pushLCtx xty lctxTy) (pushLCtxDep x lctxTerm) (bvarLift rterm HWF)
                          def Auto.Embedding.Lam.LamWF.pushLCtxAt_ofBVar {lamVarTy : LamTyVal} {s : LamSort} {idx : Nat} {lctx : NatLamSort} :
                          LamWF lamVarTy { lctx := pushLCtxAt s idx lctx, rterm := LamTerm.bvar idx, rty := s }
                          Equations
                          Instances For
                            def Auto.Embedding.Lam.LamWF.pushLCtx_ofBVar {lamVarTy : LamTyVal} {s : LamSort} {lctx : NatLamSort} :
                            LamWF lamVarTy { lctx := pushLCtx s lctx, rterm := LamTerm.bvar 0, rty := s }
                            Equations
                            Instances For
                              theorem Auto.Embedding.Lam.LamTerm.bvarLowersIdx?_bvar_eq_some {idx lvl n : Nat} {t : LamTerm} :
                              bvarLowersIdx? idx lvl (bvar n) = some t n < idx t = bvar n n idx + lvl t = bvar (n - lvl)