430
430
where open Related.EquationalReasoning
432
------------------------------------------------------------------------
433
-- A lemma relating True dec and P, where dec : Dec P
435
True↔ : ∀ {p} {P : Set p}
436
(dec : Dec P) → ((p₁ p₂ : P) → p₁ ≡ p₂) → True dec ↔ P
437
True↔ (yes p) irr = record
438
{ to = P.→-to-⟶ (λ _ → p)
439
; from = P.→-to-⟶ (λ _ → _)
440
; inverse-of = record
441
{ left-inverse-of = λ _ → P.refl
442
; right-inverse-of = irr p
445
True↔ (no ¬p) _ = record
446
{ to = P.→-to-⟶ (λ ())
447
; from = P.→-to-⟶ (λ p → ¬p p)
448
; inverse-of = record
449
{ left-inverse-of = λ ()
450
; right-inverse-of = λ p → ⊥-elim (¬p p)
454
------------------------------------------------------------------------
455
-- Equality between pairs can be expressed as a pair of equalities
457
Σ-≡,≡↔≡ : ∀ {a b} {A : Set a} {B : A → Set b} {p₁ p₂ : Σ A B} →
458
(∃ λ (p : proj₁ p₁ ≡ proj₁ p₂) →
459
P.subst B p (proj₂ p₁) ≡ proj₂ p₂) ↔
461
Σ-≡,≡↔≡ {A = A} {B} = record
463
; from = P.→-to-⟶ from
464
; inverse-of = record
465
{ left-inverse-of = left-inverse-of
466
; right-inverse-of = right-inverse-of
470
to : {p₁ p₂ : Σ A B} →
471
Σ (proj₁ p₁ ≡ proj₁ p₂)
472
(λ p → P.subst B p (proj₂ p₁) ≡ proj₂ p₂) →
474
to (P.refl , P.refl) = P.refl
476
from : {p₁ p₂ : Σ A B} →
478
Σ (proj₁ p₁ ≡ proj₁ p₂)
479
(λ p → P.subst B p (proj₂ p₁) ≡ proj₂ p₂)
480
from P.refl = P.refl , P.refl
482
left-inverse-of : {p₁ p₂ : Σ A B}
483
(p : Σ (proj₁ p₁ ≡ proj₁ p₂)
484
(λ x → P.subst B x (proj₂ p₁) ≡ proj₂ p₂)) →
486
left-inverse-of (P.refl , P.refl) = P.refl
488
right-inverse-of : {p₁ p₂ : Σ A B} (p : p₁ ≡ p₂) → to (from p) ≡ p
489
right-inverse-of P.refl = P.refl
491
×-≡,≡↔≡ : ∀ {a b} {A : Set a} {B : Set b} {p₁ p₂ : A × B} →
492
(proj₁ p₁ ≡ proj₁ p₂ × proj₂ p₁ ≡ proj₂ p₂) ↔
494
×-≡,≡↔≡ {A = A} {B} = record
496
; from = P.→-to-⟶ from
497
; inverse-of = record
498
{ left-inverse-of = left-inverse-of
499
; right-inverse-of = right-inverse-of
503
to : {p₁ p₂ : A × B} →
504
(proj₁ p₁ ≡ proj₁ p₂) × (proj₂ p₁ ≡ proj₂ p₂) → p₁ ≡ p₂
505
to (P.refl , P.refl) = P.refl
507
from : {p₁ p₂ : A × B} → p₁ ≡ p₂ →
508
(proj₁ p₁ ≡ proj₁ p₂) × (proj₂ p₁ ≡ proj₂ p₂)
509
from P.refl = P.refl , P.refl
511
left-inverse-of : {p₁ p₂ : A × B} →
512
(p : (proj₁ p₁ ≡ proj₁ p₂) × (proj₂ p₁ ≡ proj₂ p₂)) →
514
left-inverse-of (P.refl , P.refl) = P.refl
516
right-inverse-of : {p₁ p₂ : A × B} (p : p₁ ≡ p₂) → to (from p) ≡ p
517
right-inverse-of P.refl = P.refl