open import 1Lab.Prelude
open import Data.Bool
module wip.test6 where
module _ {P : Type} (isp : is-prop P) where
-- data ΣP : Type where
-- N S : ΣP
-- merid : P → N ≡ S
-- Σ-elim : ∀ {ℓ} {B : ΣP → Type ℓ} (n : B N) (s : B S)
-- → (∀ x → PathP (λ i → B (merid x i)) n s) → ∀ x → B x
-- Σ-elim n s p N = n
-- Σ-elim n s p S = s
-- Σ-elim n s p (merid x i) = p x i
-- Σ-rec : ∀ {ℓ} {B : Type ℓ} (n s : B) → (P → n ≡ s) → ΣP → B
-- Σ-rec = Σ-elim
-- ⊤* : Prop lzero
-- ⊤* = ⊤ , λ _ _ _ → tt
-- P* : Prop lzero
-- P* = P , isp
-- p→p≡t : P → ⊤* ≡ P*
-- p→p≡t x = n-ua (prop-ext (λ _ _ _ → tt) isp (λ _ → x) λ _ → tt)
-- Code : ΣP → ΣP → Prop lzero
-- Code = Σ-rec (Σ-rec ⊤* P* p→p≡t) (Σ-rec P* ⊤* (sym ∘ p→p≡t))
-- λ p → funext (Σ-elim (p→p≡t p) (sym (p→p≡t p))
-- (λ x → is-set→squarep (λ _ _ → n-Type-is-hlevel 1) _ _ _ _))
-- decode : ∀ y → ∣ Code N y ∣ → N ≡ y
-- decode = Σ-elim (λ _ → refl) merid λ x → funext-dep λ {y z} p → transport (sym Square≡··) (
-- refl ·· refl ·· merid _ ≡⟨ ··≡twice∙ _ _ _ ⟩
-- refl ∙ refl ∙ merid _ ≡⟨ ∙-assoc _ _ _ ⟩
-- (refl ∙ refl) ∙ merid _ ≡⟨ ap₂ _∙_ (∙-id-l refl) refl ·· ∙-id-l (merid _) ·· ap merid (isp x z) ⟩
-- merid _ ∎
-- )
-- encode : ∀ y → N ≡ y → ∣ Code N y ∣
-- encode y = J (λ y _ → ∣ Code N y ∣) tt
-- encode-decode : ∀ {y} p → decode y (encode y p) ≡ p
-- encode-decode = J (λ y p → decode y (encode y p) ≡ p) refl
-- decode-encode : ∀ {y} p → encode y (decode y p) ≡ p
-- decode-encode {y} = Σ-elim {B = λ y → ∀ p → encode y (decode y p) ≡ p} (λ _ → refl) (λ _ → isp _ _)
-- (λ x → funext-dep λ p → is-set→squarep (λ i j → is-prop→is-set (p→p≡t x i .is-tr))
-- _ _ _ _) y
-- result : P ≃ (N ≡ S)
-- result = Iso→Equiv
-- (decode S , iso (encode S) encode-decode (decode-encode {y = S}))
-- data RP2 : Type where
-- base : RP2
-- one : base ≡ base
-- negate : sym one ≡ one
-- add-square : Square (sym one) one refl refl
-- add : one ∙ one ≡ refl
-- add = ap fst
-- (··-unique one one refl (one ∙ one , ∙-filler' one one) (refl , add-square))
-- RP2-elim : ∀ {ℓ} {B : RP2 → Type ℓ}
-- (b : B base) (o : PathP (λ i → B (one i)) b b)
-- → SquareP (λ i j → B (negate i j)) refl (λ i → o (~ i)) o refl
-- → SquareP (λ i j → B (add-square i j)) (λ i → o (~ i)) o refl refl
-- → ∀ x → B x
-- RP2-elim b l m a base = b
-- RP2-elim b l m a (one i) = l i
-- RP2-elim b l m a (negate i j) = m i j
-- RP2-elim b l m a (add-square i j) = a i j
-- rot : Bool ≡ Bool
-- rot = ua (_ , not-is-equiv)
-- negate-rot : sym rot ≡ rot
-- negate-rot =
-- sym (ua (_ , not-is-equiv)) ≡⟨ sym-ua _ ⟩
-- ua (equiv→inverse not-is-equiv , _) ≡⟨ ap ua (Σ-prop-path is-equiv-is-prop refl) ⟩
-- ua (_ , not-is-equiv) ∎
-- Code : RP2 → Type
-- Code = RP2-elim Bool
-- (ua (_ , not-is-equiv))
-- negate-rot
-- (transport (sym Square≡··) (
-- ··≡twice∙ rot rot _
-- ·· ap (rot ∙_) (∙-id-r _)
-- ·· sym ua∙
-- ·· ap ua (Σ-prop-path is-equiv-is-prop (funext not-involutive))
-- ·· ua-id-equiv))
-- encode : ∀ {b} → base ≡ b → Code b
-- encode = J (λ y _ → Code y) true
-- dec : Bool → base ≡ base
-- dec false = one
-- dec true = refl
-- flip : ∀ c → dec c ≡ dec (not c)
-- flip false = {! !}
-- flip true = {! !}
-- decode : ∀ b → Code b → base ≡ b
-- decode base = dec
-- decode (one i) c =
-- hcomp (λ { j (i = i0) → flip c (~ j) ; j (i = i1) → flip c (~ j) })
-- (p1 (unglue (i ∨ ~ i) c) i)
-- where
-- p1 : ∀ x → Square refl (dec x) (dec (not x)) one
-- p1 false = transport (sym Square≡··) (··≡twice∙ refl one one ·· ∙-id-l _ ·· add)
-- p1 true = transport (sym Square≡··) (··≡twice∙ refl refl one ·· ∙-id-l _ ·· ∙-id-l _)
-- decode (negate i i₁) c = {! !}
-- decode (add-square i i₁) c = {! !}
-- -- decode = RP2-elim dec
-- -- (funext-dep (λ p → transport (sym Square≡··) (··≡twice∙ refl _ one ∙ ∙-id-l _ ∙ p1 _ _ (ua-pathp→path _ p))))
-- -- {! !} {! !}
-- -- where
BAut : Type → Type₁
BAut T = Σ[ B ∈ Type ] ∥ T ≃ B ∥
base : ∀ {T} → BAut T
base {T} = T , inc (id , id-equiv)
connected : ∀ {T} b → ∥ b ≡ base {T} ∥
connected (b , x) =
∥-∥-elim {P = λ x → ∥ (b , x) ≡ base ∥} (λ _ → squash) (λ e → inc (p _ _)) x
where
p : ∀ b e → (b , inc e) ≡ base
p _ = EquivJ (λ B e → (B , inc e) ≡ base) refl
Code : ∀ {T} (b : BAut T) → Type
Code {T} b = (b .fst ≃ T)
encode : ∀ {T} (b : BAut T) → b ≡ base → Code b
encode {T} x = J (λ b p → b .fst ≃ T) (id , id-equiv) ∘ sym
decode : ∀ {T} (b : BAut T) → Code b → b ≡ base
decode (b , eqv) rot = Σ-pathp (ua rot) (is-prop→pathp (λ _ → squash) _ _)
isom : ∀ {T} (b : BAut T) → is-iso (encode b)
isom {T} b = iso (decode b) (linv {b = b}) (rinv ∘ sym) where
rinv : ∀ {b : BAut T} (p : base ≡ b) → decode b (encode b (sym p)) ≡ sym p
rinv = J (λ b p → decode b (encode b (sym p)) ≡ sym p)
(Σ-prop-square (λ _ → squash)
(transport (sym Square≡··)
( ··≡twice∙ refl _ _
·· ∙-id-l _ ·· ∙-id-r _
·· ap (ap fst ∘ decode base) (transport-refl _) ·· ua-id-equiv)))
linv : ∀ {b : BAut T} (p : b .fst ≃ T) → encode b (decode b p) ≡ p
linv p = Σ-prop-path is-equiv-is-prop q where
q : subst (λ e → e → T) (sym (ua p)) id ≡ p .fst
q =
subst (λ e → e → T) (sym (ua p)) id ≡⟨ refl ⟩
(λ x → transport (λ i → T) (transport (sym (sym (ua p))) x)) ≡⟨ funext (λ x → transport-refl _) ⟩
(λ x → transport (ua p) x) ≡⟨ funext (uaβ p) ⟩
p .fst ∎
result : ∀ {T} → (base {T} ≡ base) ≃ (T ≃ T)
result = _ , is-iso→is-equiv (isom _)
RP² : Type₁
RP² = BAut Bool