module Definition.Typed.Variant where
open import Tools.Bool
open import Tools.Function
open import Tools.Level
open import Tools.Product
open import Tools.Relation
open import Tools.Sum
open import Definition.Untyped.NotParametrised
open import Definition.Untyped.Properties.NotParametrised
private variable
Γ : Con _ _
data UnfoldingMode : Set where
explicit : UnfoldingMode
transitive : UnfoldingMode
record Type-variant (a : Level) : Set (lsuc a) where
no-eta-equality
field
unfolding-mode : UnfoldingMode
η-for-Unitʷ : Bool
Quot-allowed : Set a
Equality-reflection : Set a
Equality-reflection? : Dec Equality-reflection
Unitʷ-η : Set
Unitʷ-η = T η-for-Unitʷ
opaque
Unitʷ-η? : Dec Unitʷ-η
Unitʷ-η? = T? _
data No-equality-reflection : Set a where
no-equality-reflection :
¬ Equality-reflection → No-equality-reflection
opaque
No-equality-reflection⇔ :
No-equality-reflection ⇔ (¬ Equality-reflection)
No-equality-reflection⇔ =
(λ { (no-equality-reflection not-ok) → not-ok }) ,
no-equality-reflection
opaque
No-equality-reflection? : Dec No-equality-reflection
No-equality-reflection? =
Dec-map (sym⇔ No-equality-reflection⇔) (¬? Equality-reflection?)
opaque
No-equality-reflection-or-empty⇔ :
No-equality-reflection or-empty Γ ⇔
(¬ Equality-reflection ⊎ Empty-con Γ)
No-equality-reflection-or-empty⇔ {Γ} =
No-equality-reflection or-empty Γ ⇔⟨ or-empty⇔ ⟩
No-equality-reflection ⊎ Empty-con Γ ⇔⟨ No-equality-reflection⇔ ⊎-cong-⇔ id⇔ ⟩
¬ Equality-reflection ⊎ Empty-con Γ □⇔
opaque
No-equality-reflection-or-empty? :
Dec (No-equality-reflection or-empty Γ)
No-equality-reflection-or-empty? =
No-equality-reflection? or-empty?
opaque
Higher-quotient-constructors-neutral : Set a
Higher-quotient-constructors-neutral =
Quot-allowed × ¬ Equality-reflection
opaque
unfolding Higher-quotient-constructors-neutral
Higher-quotient-constructors-neutral⇔ :
Higher-quotient-constructors-neutral ⇔
(Quot-allowed × ¬ Equality-reflection)
Higher-quotient-constructors-neutral⇔ = id⇔