Tealeaves.Simplification.Tests.STLC_DB

From Tealeaves Require Export
  Examples.STLC.Syntax
  Backends.DB.

Import STLC.Syntax.TermNotations.
Import DB.Simplification.
Import DB.AutosubstShim.Notations.

Simplification Tests for the De Bruijn Backend

Rewriting Lemmas for rename

Section rename.

  Context (ρ: nat → nat).

  Theorem term_rename1: ∀ n,
      rename ρ (tvar n: Lam nat) = tvar (ρ n).
  Proof.
    intros.
    simplify_rename.
    conclude.
  Qed.

  Theorem term_rename2: ∀ (t1 t2: Lam nat) (n: nat),
      rename ρ (app t1 t2: Lam nat) = app (rename ρ t1) (rename ρ t2).
  Proof.
    intros.
    simplify_rename.
    conclude.
  Qed.

  Theorem term_rename3: ∀ (τ: typ) (t: Lam nat),
      rename ρ (lam τ t: Lam nat) = lam τ (rename (up__ren ρ) t).
  Proof.
    intros.
    simplify_rename.
    conclude.
  Qed.

End rename.

Section subst.

  Context (σ: nat → Lam nat).

  Theorem term_subst1: ∀ n,
      subst σ (tvar n: Lam nat) = σ n.
  Proof.
    intros.
    simplify_subst.
    conclude.
  Qed.

  Theorem term_subst2: ∀ (t1 t2: Lam nat),
      subst σ (app t1 t2: Lam nat) = app (subst σ t1) (subst σ t2).
  Proof.
    intros.
    simplify_subst.
    conclude.
  Qed.

  Theorem term_subst3: ∀ (τ: typ) (t: Lam nat),
      subst σ (lam τ t: Lam nat) = lam τ (subst (up__sub σ) t).
  Proof.
    intros.
    simplify_subst.
    conclude.
  Qed.

End subst.

Rewriting Lemmas for subst

Section subst.

  Context (σ: nat → Lam nat).

  Goal subst ret = id.
  Proof.
    simplify_db.
    conclude.
  Qed.

  Goal ∀ t, subst ret t = t.
  Proof.
    intros.
    simplify_db.
    conclude.
  Qed.

  Goal ∀ (t1 t2: Lam nat),
      subst σ (app t1 t2) =
        app (subst σ t1) (subst σ t2).
  Proof.
    intros.
    simplify_db.
    conclude.
  Qed.

  Goal ∀ (τ: typ) (t: Lam nat),
      subst σ (lam τ t: Lam nat) = lam τ (subst (up__sub σ) t).
  Proof.
    intros.
    simplify_db_like_autosubst.
    conclude.
  Qed.

End subst.