[Agda] Explicit definition.
Serge Leblanc
33dbqnxpy7if at gmail.com
Tue Mar 4 19:41:21 CET 2025
Hi,
I can't seem to make an explicit definition of ⊕unitr in my example.
Can someone help me and explain my mistake?
Thanks.
--
Serge Leblanc
-------------------------
gpg --search-keys 0xD2B8A2825F8DABB7
GnuPG Fingerprint = 123E 9312 453A 8F8E 7FDB ABD7 D2B8 A282 5F8D ABB7
-------------- next part --------------
{-# OPTIONS --cubical --safe #-}
module HITOrdinal where
open import Cubical.Core.Primitives using (_≡_; Level; Type)
open import Cubical.Foundations.Prelude --using (_∙_; refl; isSet; isProp; cong; PathP; toPathP; isProp→isSet)
open import Cubical.Foundations.HLevels using (isSet→SquareP)
open import Cubical.Foundations.Everything public
open import Cubical.Data.Nat using (ℕ; zero; suc)
open import Cubical.Data.Sigma
variable ℓ ℓ' ℓ'' : Level
private
variable
A : Type ℓ
x y z : A
-- infix 1 begin_
-- infixr 2 _≡⟨_⟩_
-- infix 3 _∎
-- begin_ : x ≡ y → x ≡ y
-- begin x≡y = x≡y
-- _≡⟨_⟩_ : (x : A) → x ≡ y → y ≡ z → x ≡ z
-- x ≡⟨ x≡y ⟩ y≡z = x≡y ∙ y≡z
-- _∎ : (x : A) → x ≡ x
-- _ ∎ = refl
infixr 40 ω^_⊕_
-- infix 30 _≤_ _≥_
data HITOrd : Type₀ where
𝟎 : HITOrd
ω^_⊕_ : HITOrd → HITOrd → HITOrd
swap : ∀ a b c → ω^ a ⊕ ω^ b ⊕ c ≡ ω^ b ⊕ ω^ a ⊕ c
trunc : isSet HITOrd
_⊕_ : HITOrd → HITOrd → HITOrd
𝟎 ⊕ y = y
(ω^ a ⊕ b) ⊕ y = ω^ a ⊕ (b ⊕ y)
(swap a b c i) ⊕ y = swap a b (c ⊕ y) i
(trunc a b p q i j) ⊕ y = trunc (a ⊕ y) (b ⊕ y)
(congS (λ x → x ⊕ y) p)
(congS (λ x → x ⊕ y) q)
i j
{-
_+ₒ_ : HITOrd → HITOrd → HITOrd
_≤_ _≥_ : HITOrd → HITOrd → Type₀
m ≤ n = Σ[ k ∈ HITOrd ] k +ₒ m ≡ n
m ≥ n = n ≤ m
m < n = (ω^ 𝟎 ⊕ m) ≤ n
m > n = n < m
-- _+ₒ_ : HITOrd → HITOrd → HITOrd
𝟎 +ₒ b = b
a@(ω^ _ ⊕ _) +ₒ 𝟎 = a
(ω^ a ⊕ a₁) +ₒ (ω^ b ⊕ b₁) with a
swap a a₁ a₂ i +ₒ b = {! !}
trunc a a₁ x y i i₁ +ₒ b = {! !}
a +ₒ swap b b₁ b₂ i = {! !}
a +ₒ trunc b b₁ x y i i₁ = {! !}
Trichotomy-suc : Trichotomy m n → Trichotomy (suc m) (suc n)
Trichotomy-suc (lt m<n) = lt (suc-≤-suc m<n)
Trichotomy-suc (eq m=n) = eq (cong suc m=n)
Trichotomy-suc (gt n<m) = gt (suc-≤-suc n<m)
_≟_ : ∀ m n → Trichotomy m n
zero ≟ zero = eq refl
zero ≟ suc n = lt (n , +-comm n 1)
suc m ≟ zero = gt (m , +-comm m 1)
suc m ≟ suc n = Trichotomy-suc (m ≟ n)
-}
ind : (A : HITOrd → Type ℓ)
→ (a₀ : A 𝟎)
→ (_⋆_ : ∀ {x y} → A x → A y → A (ω^ x ⊕ y))
→ (⋆swap : ∀ {x y z} (a : A x) (b : A y) (c : A z)
→ PathP _ (a ⋆ (b ⋆ c)) (b ⋆ (a ⋆ c)))
→ (sv : ∀ {x} → isSet (A x))
→ ∀ x → A x
ind A a₀ _⋆_ ⋆swap sv 𝟎 = a₀
ind A a₀ _⋆_ ⋆swap sv (ω^ x ⊕ y) = ind A a₀ _⋆_ ⋆swap sv x ⋆ ind A a₀ _⋆_ ⋆swap sv y
ind A a₀ _⋆_ ⋆swap sv (swap x y z i) = ⋆swap
(ind A a₀ _⋆_ ⋆swap sv x)
(ind A a₀ _⋆_ ⋆swap sv y)
(ind A a₀ _⋆_ ⋆swap sv z) i
ind A a₀ _⋆_ ⋆swap sv (trunc a b p q i j) = isSet→SquareP
{A = λ i j → A (trunc a b p q i j)}
(λ _ _ → sv)
(λ j → ind A a₀ _⋆_ ⋆swap sv (p j))
(λ j → ind A a₀ _⋆_ ⋆swap sv (q j))
refl refl i j
indProp : {P : HITOrd → Type ℓ}
→ (∀ {x} → isProp (P x))
→ P 𝟎
→ (∀ {x y} → P x → P y → P (ω^ x ⊕ y))
→ ∀ x → P x
indProp {P = A} pv p₀ _⋆_ = ind A p₀ _⋆_ (λ a b c → toPathP (pv _ _)) (isProp→isSet pv)
⊕unitl : (a : HITOrd) → 𝟎 ⊕ a ≡ a
⊕unitl a = refl
{-
⊕unitr : (a : HITOrd) → a ⊕ 𝟎 ≡ a
⊕unitr 𝟎 = refl
⊕unitr (ω^ a ⊕ b) = congS (λ x → ω^ a ⊕ x) (⊕unitr b)
⊕unitr (swap a a₁ a₂ i) = congS (λ x → swap a a₁ x i) (⊕unitr a₂)
⊕unitr (trunc a b x y i j) = {! trunc (⊕unitr a) (⊕unitr b) (cong ⊕unitr x) (cong ⊕unitr y) i j !}
-}
-- isProp→isSet : ∀ {ℓ} {A : Type ℓ} → isProp A → isSet A
-- isProp→isSet pA x y p q i j = pA (p i0) (q j0)
⊕unitr : (a : HITOrd) → a ⊕ 𝟎 ≡ a
⊕unitr 𝟎 = refl
⊕unitr (ω^ a ⊕ b) = congS (ω^ a ⊕_) (⊕unitr b)
⊕unitr (swap a b c i) = congS (λ x → swap a b x i) (⊕unitr c)
⊕unitr (trunc a b x y i j) = isSet→SquareP
{A = λ i j → trunc (a ⊕ 𝟎) (b ⊕ 𝟎) (λ k → x k ⊕ 𝟎) (λ k → y k ⊕ 𝟎) i j ≡ trunc a b x y i j}
{! (λ i j → trunc _ _) !}
(λ j → ⊕unitr (x j))
(λ j → ⊕unitr (y j))
refl refl i j
{-
⊕unitr : (a : HITOrd) → a ⊕ 𝟎 ≡ a
⊕unitr = indProp trunc base step
where
base : 𝟎 ⊕ 𝟎 ≡ 𝟎
base = refl
step : ∀ {x y} → _ → y ⊕ 𝟎 ≡ y
→ (ω^ x ⊕ y) ⊕ 𝟎 ≡ ω^ x ⊕ y
step {x} _ = cong (ω^ x ⊕_)
-}
example : (a b c : HITOrd) → ω^ a ⊕ ω^ b ⊕ ω^ c ⊕ 𝟎 ≡ ω^ c ⊕ ω^ b ⊕ ω^ a ⊕ 𝟎
example a b c =
ω^ a ⊕ ω^ b ⊕ ω^ c ⊕ 𝟎 ≡⟨ swap a b _ ⟩
ω^ b ⊕ ω^ a ⊕ ω^ c ⊕ 𝟎 ≡⟨ cong (ω^ b ⊕_) (swap a c _) ⟩
ω^ b ⊕ ω^ c ⊕ ω^ a ⊕ 𝟎 ≡⟨ swap b c _ ⟩
ω^ c ⊕ ω^ b ⊕ ω^ a ⊕ 𝟎 ∎
fromNat : ℕ → HITOrd
fromNat zero = 𝟎
fromNat (suc n) = ω^ 𝟎 ⊕ (fromNat n)
ω^⟨_⟩ : HITOrd → HITOrd
ω^⟨ a ⟩ = ω^ a ⊕ 𝟎
𝟏 ω ωꙻ : HITOrd
𝟏 = ω^⟨ 𝟎 ⟩
ω = ω^⟨ 𝟏 ⟩
ωꙻ = ω^⟨ ω ⟩
private
1≡𝟏 : fromNat 1 ≡ 𝟏
1≡𝟏 = refl
{-
_ₙx_ : ℕ → HITOrd → HITOrd
zero ₙx o = 𝟎
suc n ₙx o = o +ₒ (n ₙx o)
_⋗_ : ℕ × ℕ → HITOrd → HITOrd
(zero , b) ⋗ o = {! fromNat b !}
(suc a , b) ⋗ o = {! !}
-}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xD2B8A2825F8DABB7.asc
Type: application/pgp-keys
Size: 1400 bytes
Desc: OpenPGP public key
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20250304/5e05e5ba/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 236 bytes
Desc: OpenPGP digital signature
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20250304/5e05e5ba/attachment-0001.sig>
More information about the Agda
mailing list