{-# OPTIONS --without-K #-} module sets.nat.ordering.leq.level where open import sum open import equality open import function.isomorphism open import function.extensionality open import hott.level open import sets.nat.core open import sets.nat.ordering.leq.core open import container.core open import container.w open import sets.empty open import sets.unit open import hott.level.sets public using (nat-set) module ≤-container where I : Set I = ℕ × ℕ A A₁ A₂ : I → Set A₁ (m , n) = m ≡ 0 A₂ (m , n) = ( Σ I λ { (m' , n') → m ≡ suc m' × n ≡ suc n' } ) A i = A₁ i ⊎ A₂ i A₂-struct-iso : ∀ m n → A₂ (m , n) ≅ (¬ (m ≡ 0) × ¬ (n ≡ 0)) A₂-struct-iso m n = iso f g α β where f : ∀ {m n} → A₂ (m , n) → ¬ (m ≡ 0) × ¬ (n ≡ 0) f .{suc m}.{suc n}((m , n) , refl , refl) = (λ ()) , (λ ()) g : ∀ {m n} → ¬ (m ≡ 0) × ¬ (n ≡ 0) → A₂ (m , n) g {m = zero} (u , v) = ⊥-elim (u refl) g {n = zero} (u , v) = ⊥-elim (v refl) g {suc m} {suc n} _ = ((m , n) , refl , refl) α : ∀ {m n}(a : A₂ (m , n)) → g (f a) ≡ a α .{suc m}.{suc n}((m , n) , refl , refl) = refl β : ∀ {m n}(u : ¬ (m ≡ 0) × ¬ (n ≡ 0)) → f (g u) ≡ u β {m = zero} (u , v) = ⊥-elim (u refl) β {n = zero} (u , v) = ⊥-elim (v refl) β {suc m} {suc n} _ = pair≡ (funext λ ()) (funext λ ()) A₂-h1 : ∀ i → h 1 (A₂ i) A₂-h1 (m , n) = iso-level (sym≅ (A₂-struct-iso m n)) (×-level (Π-level λ _ → ⊥-prop) (Π-level λ _ → ⊥-prop)) A-disj : ∀ i → ¬ (A₁ i × A₂ i) A-disj (.zero , n) (refl , (m' , n') , () , pn) A-h1 : ∀ i → h 1 (A i) A-h1 i = ⊎-h1 (nat-set _ zero) (A₂-h1 i) (A-disj i) B : ∀ {i} → A i → Set B (inj₁ _) = ⊥ B (inj₂ _) = ⊤ r : ∀ {i}{a : A i} → B a → I r {a = inj₁ _} () r {a = inj₂ (mn' , _)} _ = mn' c : Container _ _ _ c = container I A B r open ≤-container using (c; A-h1) ≤-struct-iso : ∀ {n m} → n ≤ m ≅ W c (n , m) ≤-struct-iso = iso f g α β where f : ∀ {n m} → n ≤ m → W c (n , m) f z≤n = sup (inj₁ refl) (λ ()) f (s≤s p) = sup (inj₂ (_ , (refl , refl))) (λ _ → f p) g : ∀ {m n} → W c (m , n) → m ≤ n g (sup (inj₁ refl) _) = z≤n g (sup (inj₂ ((m' , n') , (refl , refl))) u) = s≤s (g (u tt)) α : ∀ {n m}(p : n ≤ m) → g (f p) ≡ p α z≤n = refl α (s≤s p) = ap s≤s (α p) β : ∀ {n m}(p : W c (m , n)) → f (g p) ≡ p β (sup (inj₁ refl) u) = ap (sup (inj₁ refl)) (funext λ ()) β (sup (inj₂ ((m' , n') , (refl , refl))) u) = ap (sup _) (funext λ { tt → β (u tt) }) ≤-level : ∀ {m n} → h 1 (m ≤ n) ≤-level {m}{n} = iso-level (sym≅ ≤-struct-iso) (w-level A-h1 (m , n))