65 lines
1.9 KiB
Agda
65 lines
1.9 KiB
Agda
-- ignore
|
||
module 1FundamentalGroup.Quest2Solutions where
|
||
open import 1FundamentalGroup.Preambles.P2
|
||
|
||
|
||
data _⊔_ (A B : Type) : Type where
|
||
|
||
inl : A → A ⊔ B
|
||
inr : B → A ⊔ B
|
||
|
||
ℤ≡ℕ⊔ℕ : ℤ ≡ ℕ ⊔ ℕ
|
||
ℤ≡ℕ⊔ℕ = isoToPath (iso fun inv rightInv leftInv) where
|
||
|
||
fun : ℤ → ℕ ⊔ ℕ
|
||
fun (pos n) = inl n
|
||
fun (negsuc n) = inr n
|
||
|
||
inv : ℕ ⊔ ℕ → ℤ
|
||
inv (inl n) = pos n
|
||
inv (inr n) = negsuc n
|
||
|
||
rightInv : section fun inv
|
||
rightInv (inl n) = refl
|
||
rightInv (inr n) = refl
|
||
|
||
leftInv : retract fun inv
|
||
leftInv (pos n) = refl
|
||
leftInv (negsuc n) = refl
|
||
|
||
∙refl : {A : Type} {x y : A} (p : x ≡ y) → p ∙ refl ≡ p
|
||
∙refl = J (λ y p → p ∙ refl ≡ p) refl∙refl
|
||
|
||
refl∙ : {A : Type} {x y : A} (p : x ≡ y) → refl ∙ p ≡ p
|
||
refl∙ = J (λ y p → refl ∙ p ≡ p) refl∙refl
|
||
|
||
∙sym : {A : Type} {x y : A} (p : x ≡ y) → p ∙ sym p ≡ refl
|
||
∙sym = J (λ y p → p ∙ sym p ≡ refl)
|
||
(
|
||
refl ∙ sym refl
|
||
≡⟨ cong (λ p → refl ∙ p) symRefl ⟩
|
||
refl ∙ refl
|
||
≡⟨ refl∙refl ⟩
|
||
refl ∎)
|
||
|
||
sym∙ : {A : Type} {x y : A} (p : x ≡ y) → (sym p) ∙ p ≡ refl
|
||
sym∙ = J (λ y p → (sym p) ∙ p ≡ refl)
|
||
(
|
||
(sym refl) ∙ refl
|
||
≡⟨ cong (λ p → p ∙ refl) symRefl ⟩
|
||
refl ∙ refl
|
||
≡⟨ refl∙refl ⟩
|
||
refl ∎)
|
||
|
||
assoc : {A : Type} {w x : A} (p : w ≡ x) {y : A} (q : x ≡ y) {z : A} (r : y ≡ z)
|
||
→ (p ∙ q) ∙ r ≡ p ∙ (q ∙ r)
|
||
assoc {A} {w} = J
|
||
-- casing on p
|
||
(λ x p → {y : A} (q : x ≡ y) {z : A} (r : y ≡ z) → (p ∙ q) ∙ r ≡ p ∙ (q ∙ r))
|
||
-- reduce to showing when p = refl
|
||
λ q r → (refl ∙ q) ∙ r
|
||
≡⟨ cong (λ p' → p' ∙ r) (refl∙ q) ⟩
|
||
q ∙ r
|
||
≡⟨ sym (refl∙ (q ∙ r)) ⟩
|
||
refl ∙ q ∙ r ∎
|