------------------------------------------------------------------------
-- Assumptions used to state some theorems in
-- Graded.Erasure.LogicalRelation.Fundamental elsewhere for consequences
-- of the fundamental lemma.
------------------------------------------------------------------------

open import Graded.Modality
open import Graded.Usage.Restrictions
open import Definition.Typed.EqualityRelation
open import Definition.Typed.Restrictions

module Graded.Erasure.LogicalRelation.Fundamental.Assumptions
  {a} {M : Set a}
  {š•„ : Modality M}
  (TR : Type-restrictions š•„)
  (UR : Usage-restrictions š•„)
  ⦃ eqrel : EqRelSet TR ⦄
  where

open EqRelSet eqrel
open Modality š•„
open Usage-restrictions UR

open import Definition.Untyped M
open import Definition.Typed TR
open import Definition.Typed.Consequences.Consistency TR
open import Definition.Typed.Substitution TR

open import Graded.Mode š•„
open import Graded.Restrictions š•„

open import Tools.Nat
open import Tools.Sum

private variable
  k : Nat

-- A cut-down variant of Fundamental-assumptions (which is defined
-- below).

record Fundamental-assumptions⁻ (Ī” : Con Term k) : Set a where
  no-eta-equality
  field
    -- If erased matches are allowed for emptyrec when the mode isĀ šŸ™įµ,
    -- then the context is consistent.
    consistent : Emptyrec-allowed šŸ™įµ šŸ˜ → Consistent Ī”
    -- Erased matches are not allowed unless the context is empty.
    closed-or-no-erased-matches : No-erased-matches TR UR āŠŽ Empty-con Ī”
    instance
      -- Neutrals-included holds or the context is empty.
      ⦃ inc ⦄ : Neutrals-included or-empty Ī”

-- The fundamental lemma is proved under the assumption that a given
-- context Ī” satisfies the following assumptions.

record Fundamental-assumptions (Ī” : Con Term k) : Set a where
  no-eta-equality
  field
    -- The context is well-formed.
    well-formed : ⊢ Ī”
    -- Other assumptions.
    other-assumptions : Fundamental-assumptions⁻ Ī”

  open Fundamental-assumptions⁻ other-assumptions public

-- Fundamental-assumptions⁻ holds unconditionally for empty contexts.

fundamental-assumptions⁻₀ : Fundamental-assumptions⁻ ε
fundamental-assumptions⁻₀ = record
  { consistent                  = Ī» _ →
                                    inhabited-consistent
                                      (⊢ˢʷ∷-idSubst ε)
  ; closed-or-no-erased-matches = injā‚‚ ε
  ; inc                         = ε
  }

-- Fundamental-assumptions holds unconditionally for empty contexts.

fundamental-assumptionsā‚€ : Fundamental-assumptions ε
fundamental-assumptionsā‚€ = record
  { well-formed       = ε
  ; other-assumptions = fundamental-assumptions⁻₀
  }