System F embedding agreement with the single term/relation model

TheoremTranslated System F terms have the same closing instances#✓fully proved

Translated System F terms have exactly the same model closing instances.

theorem Tm.close_fromSystemF {n m : Nat} {Δ : List Kind}
    (φ : Fin n → Ty Δ .star) (σ : Fin m → SystemF.Model) (t : SystemF.Tm n m) :
    close σ (fromSystemF φ t) = SystemF.Tm.close σ t
Uses 14 · Used by 1

TheoremCanonical embedding preserves closing instances#✓fully proved

Canonical embedding preserves arbitrary model closing instances exactly.

theorem Tm.close_embed {n m : Nat} (σ : Fin m → SystemF.Model)
    (t : SystemF.Tm n m) : close σ (Tm.embed t) = SystemF.Tm.close σ t
Uses 10 · Used by 1

TheoremCanonical embedding preserves model erasure#✓fully proved

A System F term and its Fω embedding have identical model erasures.

theorem Tm.eraseModel_embed {n : Nat} (t : SystemF.Tm n 0) :
    eraseModel (Tm.embed t) = SystemF.Tm.eraseModel t
Uses 7

TheoremType translation preserves the relational interpretation#✓fully proved

The star/forall translation preserves the same binary type interpretation.

theorem Ty.interpret_fromSystemF {n : Nat} {Δ : List Kind}
    (φ : Fin n → Ty Δ .star) (ρ : KEnv SystemF.Rel Δ) (A : SystemF.Ty n) :
    (fromSystemF φ A).interpret ρ =
      A.interpret (fun i => (φ i).interpret ρ)
Uses 14 · Used by 1

TheoremRelational interpretation of canonically embedded types#✓fully proved

Canonical embedding interprets each source variable by its matching kinded lookup.

theorem Ty.interpret_embed {n : Nat} (A : SystemF.Ty n)
    (ρ : KEnv SystemF.Rel (List.replicate n .star)) :
    (Ty.embed A).interpret ρ = A.interpret (fun i => ρ (KVar.ofFin i))
Uses 12
5 fully proved

The dependency explorer needs JavaScript and its graph data.

Download the complete graph data.