-- inspired by https://github.com/agda/agda/issues/2556 postulate0 A : ★ def0 ZZ : ★ = 0 ≡ 0 : ℕ def reflZ : ZZ = δ _ ⇒ 0 namespace erased { def0 ZZA : ★ = 0.ZZ → A def propeq : (x : ZZA) → x ≡ (λ _ ⇒ x reflZ) : ZZA = λ x ⇒ δ _ ⇒ x def defeq : 0.(P : ZZA → ★) → 0.(x : ZZA) → P (λ _ ⇒ x reflZ) → P x = λ P x p ⇒ p } namespace unrestricted { def0 ZZA : ★ = ω.ZZ → A def defeq : 0.(P : ZZA → ★) → 0.(x : ZZA) → P (λ _ ⇒ x reflZ) → P x = λ P x p ⇒ p } namespace linear { def0 ZZA : ★ = 1.ZZ → A #[fail "λ _ ⇒ x reflZ is not equal to x"] def defeq : 0.(P : ZZA → ★) → 0.(x : ZZA) → P (λ _ ⇒ x reflZ) → P x = λ P x p ⇒ p }