Agda-2.3.2.2: test/fail/TypeConstructorsWhichPreserveGuardedness1.agda
-- Note that the flag --guardedness-preserving-type-constructors is
-- not (should not be) enabled in this module.
module TypeConstructorsWhichPreserveGuardedness1 where
open import Imports.Coinduction
record ⊤ : Set where
data _⊎_ (A B : Set) : Set where
inj₁ : A → A ⊎ B
inj₂ : B → A ⊎ B
record ∃ {A : Set} (B : A → Set) : Set where
constructor _,_
field
proj₁ : A
proj₂ : B proj₁
data Rec (A : ∞ Set) : Set where
fold : ♭ A → Rec A
module ℕ₁ where
ℕ : Set
ℕ = ⊤ ⊎ Rec (♯ ℕ)
zero : ℕ
zero = inj₁ _
suc : ℕ → ℕ
suc n = inj₂ (fold n)
ℕ-rec : (P : ℕ → Set) →
P zero →
(∀ n → P n → P (suc n)) →
∀ n → P n
ℕ-rec P z s (inj₁ _) = z
ℕ-rec P z s (inj₂ (fold n)) = s n (ℕ-rec P z s n)
module ℕ₂ where
data ℕC : Set where
′zero : ℕC
′suc : ℕC
mutual
ℕ : Set
ℕ = ∃ λ (c : ℕC) → ℕ′ c
ℕ′ : ℕC → Set
ℕ′ ′zero = ⊤
ℕ′ ′suc = Rec (♯ ℕ)
zero : ℕ
zero = (′zero , _)
suc : ℕ → ℕ
suc n = (′suc , fold n)
ℕ-rec : (P : ℕ → Set) →
P zero →
(∀ n → P n → P (suc n)) →
∀ n → P n
ℕ-rec P z s (′zero , _) = z
ℕ-rec P z s (′suc , fold n) = s n (ℕ-rec P z s n)