@@ -25,17 +25,18 @@ open import Data.Product.Base using (proj₁; proj₂; _,_; _×_)
25
25
open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]′)
26
26
open import Data.Sign.Base as Sign using (Sign)
27
27
import Data.Sign.Properties as Sign
28
- open import Function.Base using (_∘_; _$_; id)
28
+ open import Function.Base using (_∘_; _$_; _$′_; id)
29
29
open import Level using (0ℓ)
30
30
open import Relation.Binary.Core using (_⇒_; _Preserves_⟶_; _Preserves₂_⟶_⟶_)
31
31
open import Relation.Binary.Bundles using
32
32
(Setoid; DecSetoid; Preorder; TotalPreorder; Poset; TotalOrder; DecTotalOrder; StrictPartialOrder; StrictTotalOrder)
33
+ open import Relation.Binary.Consequences using (wlog)
33
34
open import Relation.Binary.Structures
34
35
using (IsPreorder; IsTotalPreorder; IsPartialOrder; IsTotalOrder; IsDecTotalOrder; IsStrictPartialOrder; IsStrictTotalOrder)
35
36
open import Relation.Binary.Definitions
36
37
using (DecidableEquality; Reflexive; Transitive; Antisymmetric; Total; Decidable; Irrelevant; Irreflexive; Asymmetric; LeftTrans; RightTrans; Trichotomous; tri≈; tri<; tri>)
37
38
open import Relation.Binary.PropositionalEquality.Core
38
- using (_≡_; refl; cong; cong₂; sym; _≢_; subst; resp₂; trans)
39
+ using (_≡_; refl; cong; cong₂; sym; _≢_; subst; subst₂; resp₂; trans)
39
40
open import Relation.Binary.PropositionalEquality.Properties
40
41
using (module ≡-Reasoning ; setoid; decSetoid; isEquivalence)
41
42
open import Relation.Nullary.Decidable.Core using (yes; no)
@@ -45,6 +46,7 @@ import Relation.Nullary.Decidable as Dec
45
46
46
47
open import Algebra.Definitions {A = ℤ} _≡_
47
48
open import Algebra.Consequences.Propositional
49
+ using (comm∧idˡ⇒idʳ; comm∧invˡ⇒invʳ; comm∧zeˡ⇒zeʳ; comm∧distrʳ⇒distrˡ)
48
50
open import Algebra.Structures {A = ℤ} _≡_
49
51
module ℤtoℕ = Morphism.Definitions ℤ ℕ _≡_
50
52
module ℕtoℤ = Morphism.Definitions ℕ ℤ _≡_
@@ -446,7 +448,7 @@ neg-cancel-< { -[1+ m ]} { +0} (+<+ ())
446
448
neg-cancel-< { -[1+ m ]} { -[1+ n ]} (+<+ m<n) = -<- (s<s⁻¹ m<n)
447
449
448
450
------------------------------------------------------------------------
449
- -- Properties of ∣_∣
451
+ -- Basic properties of ∣_∣
450
452
------------------------------------------------------------------------
451
453
452
454
∣i∣≡0⇒i≡0 : ∣ i ∣ ≡ 0 → i ≡ + 0
@@ -457,142 +459,6 @@ neg-cancel-< { -[1+ m ]} { -[1+ n ]} (+<+ m<n) = -<- (s<s⁻¹ m<n)
457
459
∣-i∣≡∣i∣ +0 = refl
458
460
∣-i∣≡∣i∣ +[1+ n ] = refl
459
461
460
- 0≤i⇒+∣i∣≡i : 0ℤ ≤ i → + ∣ i ∣ ≡ i
461
- 0≤i⇒+∣i∣≡i (+≤+ _) = refl
462
-
463
- +∣i∣≡i⇒0≤i : + ∣ i ∣ ≡ i → 0ℤ ≤ i
464
- +∣i∣≡i⇒0≤i {+ n} _ = +≤+ z≤n
465
-
466
- +∣i∣≡i⊎+∣i∣≡-i : ∀ i → + ∣ i ∣ ≡ i ⊎ + ∣ i ∣ ≡ - i
467
- +∣i∣≡i⊎+∣i∣≡-i (+ n) = inj₁ refl
468
- +∣i∣≡i⊎+∣i∣≡-i (-[1+ n ]) = inj₂ refl
469
-
470
- ∣m⊝n∣≤m⊔n : ∀ m n → ∣ m ⊖ n ∣ ℕ.≤ m ℕ.⊔ n
471
- ∣m⊝n∣≤m⊔n m n with m ℕ.<ᵇ n
472
- ... | true = begin
473
- ∣ - + (n ℕ.∸ m) ∣ ≡⟨ ∣-i∣≡∣i∣ (+ (n ℕ.∸ m)) ⟩
474
- ∣ + (n ℕ.∸ m) ∣ ≡⟨⟩
475
- n ℕ.∸ m ≤⟨ ℕ.m∸n≤m n m ⟩
476
- n ≤⟨ ℕ.m≤n⊔m m n ⟩
477
- m ℕ.⊔ n ∎
478
- where open ℕ.≤-Reasoning
479
- ... | false = begin
480
- ∣ + (m ℕ.∸ n) ∣ ≡⟨⟩
481
- m ℕ.∸ n ≤⟨ ℕ.m∸n≤m m n ⟩
482
- m ≤⟨ ℕ.m≤m⊔n m n ⟩
483
- m ℕ.⊔ n ∎
484
- where open ℕ.≤-Reasoning
485
-
486
- ∣i+j∣≤∣i∣+∣j∣ : ∀ i j → ∣ i + j ∣ ℕ.≤ ∣ i ∣ ℕ.+ ∣ j ∣
487
- ∣i+j∣≤∣i∣+∣j∣ +[1+ m ] (+ n) = ℕ.≤-refl
488
- ∣i+j∣≤∣i∣+∣j∣ +0 (+ n) = ℕ.≤-refl
489
- ∣i+j∣≤∣i∣+∣j∣ +0 -[1+ n ] = ℕ.≤-refl
490
- ∣i+j∣≤∣i∣+∣j∣ -[1+ m ] -[1+ n ] rewrite ℕ.+-suc (suc m) n = ℕ.≤-refl
491
- ∣i+j∣≤∣i∣+∣j∣ +[1+ m ] -[1+ n ] = begin
492
- ∣ suc m ⊖ suc n ∣ ≤⟨ ∣m⊝n∣≤m⊔n (suc m) (suc n) ⟩
493
- suc m ℕ.⊔ suc n ≤⟨ ℕ.m⊔n≤m+n (suc m) (suc n) ⟩
494
- suc m ℕ.+ suc n ∎
495
- where open ℕ.≤-Reasoning
496
- ∣i+j∣≤∣i∣+∣j∣ -[1+ m ] (+ n) = begin
497
- ∣ n ⊖ suc m ∣ ≤⟨ ∣m⊝n∣≤m⊔n n (suc m) ⟩
498
- n ℕ.⊔ suc m ≤⟨ ℕ.m⊔n≤m+n n (suc m) ⟩
499
- n ℕ.+ suc m ≡⟨ ℕ.+-comm n (suc m) ⟩
500
- suc m ℕ.+ n ∎
501
- where open ℕ.≤-Reasoning
502
-
503
- ∣i-j∣≤∣i∣+∣j∣ : ∀ i j → ∣ i - j ∣ ℕ.≤ ∣ i ∣ ℕ.+ ∣ j ∣
504
- ∣i-j∣≤∣i∣+∣j∣ i j = begin
505
- ∣ i - j ∣ ≤⟨ ∣i+j∣≤∣i∣+∣j∣ i (- j) ⟩
506
- ∣ i ∣ ℕ.+ ∣ - j ∣ ≡⟨ cong (∣ i ∣ ℕ.+_) (∣-i∣≡∣i∣ j) ⟩
507
- ∣ i ∣ ℕ.+ ∣ j ∣ ∎
508
- where open ℕ.≤-Reasoning
509
-
510
- ------------------------------------------------------------------------
511
- -- Properties of sign and _◃_
512
-
513
- ◃-nonZero : ∀ s n .{{_ : ℕ.NonZero n}} → NonZero (s ◃ n)
514
- ◃-nonZero Sign.- (ℕ.suc _) = _
515
- ◃-nonZero Sign.+ (ℕ.suc _) = _
516
-
517
- ◃-inverse : ∀ i → sign i ◃ ∣ i ∣ ≡ i
518
- ◃-inverse -[1+ n ] = refl
519
- ◃-inverse +0 = refl
520
- ◃-inverse +[1+ n ] = refl
521
-
522
- ◃-cong : sign i ≡ sign j → ∣ i ∣ ≡ ∣ j ∣ → i ≡ j
523
- ◃-cong {+ m} {+ n } ≡-sign refl = refl
524
- ◃-cong { -[1+ m ]} { -[1+ n ]} ≡-sign refl = refl
525
-
526
- +◃n≡+n : ∀ n → Sign.+ ◃ n ≡ + n
527
- +◃n≡+n zero = refl
528
- +◃n≡+n (suc _) = refl
529
-
530
- -◃n≡-n : ∀ n → Sign.- ◃ n ≡ - + n
531
- -◃n≡-n zero = refl
532
- -◃n≡-n (suc _) = refl
533
-
534
- sign-◃ : ∀ s n .{{_ : ℕ.NonZero n}} → sign (s ◃ n) ≡ s
535
- sign-◃ Sign.- (suc _) = refl
536
- sign-◃ Sign.+ (suc _) = refl
537
-
538
- abs-◃ : ∀ s n → ∣ s ◃ n ∣ ≡ n
539
- abs-◃ _ zero = refl
540
- abs-◃ Sign.- (suc n) = refl
541
- abs-◃ Sign.+ (suc n) = refl
542
-
543
- signᵢ◃∣i∣≡i : ∀ i → sign i ◃ ∣ i ∣ ≡ i
544
- signᵢ◃∣i∣≡i (+ n) = +◃n≡+n n
545
- signᵢ◃∣i∣≡i -[1+ n ] = refl
546
-
547
- sign-cong : .{{_ : ℕ.NonZero m}} .{{_ : ℕ.NonZero n}} →
548
- s ◃ m ≡ t ◃ n → s ≡ t
549
- sign-cong {n@(suc _)} {m@(suc _)} {s} {t} eq = begin
550
- s ≡⟨ sign-◃ s n ⟨
551
- sign (s ◃ n) ≡⟨ cong sign eq ⟩
552
- sign (t ◃ m) ≡⟨ sign-◃ t m ⟩
553
- t ∎ where open ≡-Reasoning
554
-
555
- sign-cong′ : s ◃ m ≡ t ◃ n → s ≡ t ⊎ (m ≡ 0 × n ≡ 0 )
556
- sign-cong′ {s} {zero} {t} {zero} eq = inj₂ (refl , refl)
557
- sign-cong′ {s} {zero} {Sign.- } {suc n} ()
558
- sign-cong′ {s} {zero} {Sign.+ } {suc n} ()
559
- sign-cong′ {Sign.- } {suc m} {t} {zero} ()
560
- sign-cong′ {Sign.+ } {suc m} {t} {zero} ()
561
- sign-cong′ {s} {suc m} {t} {suc n} eq = inj₁ (sign-cong eq)
562
-
563
- abs-cong : s ◃ m ≡ t ◃ n → m ≡ n
564
- abs-cong {s} {m} {t} {n} eq = begin
565
- m ≡⟨ abs-◃ s m ⟨
566
- ∣ s ◃ m ∣ ≡⟨ cong ∣_∣ eq ⟩
567
- ∣ t ◃ n ∣ ≡⟨ abs-◃ t n ⟩
568
- n ∎ where open ≡-Reasoning
569
-
570
- ∣s◃m∣*∣t◃n∣≡m*n : ∀ s t m n → ∣ s ◃ m ∣ ℕ.* ∣ t ◃ n ∣ ≡ m ℕ.* n
571
- ∣s◃m∣*∣t◃n∣≡m*n s t m n = cong₂ ℕ._*_ (abs-◃ s m) (abs-◃ t n)
572
-
573
- +◃-mono-< : m ℕ.< n → Sign.+ ◃ m < Sign.+ ◃ n
574
- +◃-mono-< {zero} {suc n} m<n = +<+ m<n
575
- +◃-mono-< {suc m} {suc n} m<n = +<+ m<n
576
-
577
- +◃-cancel-< : Sign.+ ◃ m < Sign.+ ◃ n → m ℕ.< n
578
- +◃-cancel-< {zero} {zero} (+<+ ())
579
- +◃-cancel-< {suc m} {zero} (+<+ ())
580
- +◃-cancel-< {zero} {suc n} (+<+ m<n) = m<n
581
- +◃-cancel-< {suc m} {suc n} (+<+ m<n) = m<n
582
-
583
- neg◃-cancel-< : Sign.- ◃ m < Sign.- ◃ n → n ℕ.< m
584
- neg◃-cancel-< {zero} {zero} (+<+ ())
585
- neg◃-cancel-< {suc m} {zero} -<+ = z<s
586
- neg◃-cancel-< {suc m} {suc n} (-<- n<m) = s<s n<m
587
-
588
- -◃<+◃ : ∀ m n .{{_ : ℕ.NonZero m}} → Sign.- ◃ m < Sign.+ ◃ n
589
- -◃<+◃ (suc _) zero = -<+
590
- -◃<+◃ (suc _) (suc _) = -<+
591
-
592
- +◃≮-◃ : Sign.+ ◃ m ≮ Sign.- ◃ n
593
- +◃≮-◃ {zero} {zero} (+<+ ())
594
- +◃≮-◃ {suc m} {zero} (+<+ ())
595
-
596
462
------------------------------------------------------------------------
597
463
-- Properties of _⊖_
598
464
------------------------------------------------------------------------
@@ -798,6 +664,142 @@ sign-⊖-≰ = sign-⊖-< ∘ ℕ.≰⇒>
798
664
suc o ⊖ n ≡⟨ [1+m]⊖[1+n]≡m⊖n (suc o) n ⟨
799
665
suc (suc o) ⊖ suc n ∎ where open ≤-Reasoning
800
666
667
+ ------------------------------------------------------------------------
668
+ -- Properties of ∣_∣
669
+ ------------------------------------------------------------------------
670
+
671
+ 0≤i⇒+∣i∣≡i : 0ℤ ≤ i → + ∣ i ∣ ≡ i
672
+ 0≤i⇒+∣i∣≡i (+≤+ _) = refl
673
+
674
+ +∣i∣≡i⇒0≤i : + ∣ i ∣ ≡ i → 0ℤ ≤ i
675
+ +∣i∣≡i⇒0≤i {+ n} _ = +≤+ z≤n
676
+
677
+ +∣i∣≡i⊎+∣i∣≡-i : ∀ i → + ∣ i ∣ ≡ i ⊎ + ∣ i ∣ ≡ - i
678
+ +∣i∣≡i⊎+∣i∣≡-i (+ n) = inj₁ refl
679
+ +∣i∣≡i⊎+∣i∣≡-i (-[1+ n ]) = inj₂ refl
680
+
681
+ ∣m⊝n∣≤m⊔n : ∀ m n → ∣ m ⊖ n ∣ ℕ.≤ m ℕ.⊔ n
682
+ ∣m⊝n∣≤m⊔n = wlog ℕ.≤-total
683
+ (λ {m n} → subst₂ ℕ._≤_ (∣m⊖n∣≡∣n⊖m∣ m n) (ℕ.⊔-comm m n))
684
+ $′ λ m n m≤n → begin
685
+ ∣ m ⊖ n ∣ ≡⟨ cong ∣_∣ (⊖-≤ m≤n) ⟩
686
+ ∣ - + (n ℕ.∸ m) ∣ ≡⟨ ∣-i∣≡∣i∣ (+ (n ℕ.∸ m)) ⟩
687
+ ∣ + (n ℕ.∸ m) ∣ ≡⟨⟩
688
+ n ℕ.∸ m ≤⟨ ℕ.m∸n≤m n m ⟩
689
+ n ≤⟨ ℕ.m≤n⊔m m n ⟩
690
+ m ℕ.⊔ n ∎
691
+ where open ℕ.≤-Reasoning
692
+
693
+ ∣i+j∣≤∣i∣+∣j∣ : ∀ i j → ∣ i + j ∣ ℕ.≤ ∣ i ∣ ℕ.+ ∣ j ∣
694
+ ∣i+j∣≤∣i∣+∣j∣ +[1+ m ] (+ n) = ℕ.≤-refl
695
+ ∣i+j∣≤∣i∣+∣j∣ +0 (+ n) = ℕ.≤-refl
696
+ ∣i+j∣≤∣i∣+∣j∣ +0 -[1+ n ] = ℕ.≤-refl
697
+ ∣i+j∣≤∣i∣+∣j∣ -[1+ m ] -[1+ n ] rewrite ℕ.+-suc (suc m) n = ℕ.≤-refl
698
+ ∣i+j∣≤∣i∣+∣j∣ +[1+ m ] -[1+ n ] = begin
699
+ ∣ suc m ⊖ suc n ∣ ≤⟨ ∣m⊝n∣≤m⊔n (suc m) (suc n) ⟩
700
+ suc m ℕ.⊔ suc n ≤⟨ ℕ.m⊔n≤m+n (suc m) (suc n) ⟩
701
+ suc m ℕ.+ suc n ∎
702
+ where open ℕ.≤-Reasoning
703
+ ∣i+j∣≤∣i∣+∣j∣ -[1+ m ] (+ n) = begin
704
+ ∣ n ⊖ suc m ∣ ≤⟨ ∣m⊝n∣≤m⊔n n (suc m) ⟩
705
+ n ℕ.⊔ suc m ≤⟨ ℕ.m⊔n≤m+n n (suc m) ⟩
706
+ n ℕ.+ suc m ≡⟨ ℕ.+-comm n (suc m) ⟩
707
+ suc m ℕ.+ n ∎
708
+ where open ℕ.≤-Reasoning
709
+
710
+ ∣i-j∣≤∣i∣+∣j∣ : ∀ i j → ∣ i - j ∣ ℕ.≤ ∣ i ∣ ℕ.+ ∣ j ∣
711
+ ∣i-j∣≤∣i∣+∣j∣ i j = begin
712
+ ∣ i - j ∣ ≤⟨ ∣i+j∣≤∣i∣+∣j∣ i (- j) ⟩
713
+ ∣ i ∣ ℕ.+ ∣ - j ∣ ≡⟨ cong (∣ i ∣ ℕ.+_) (∣-i∣≡∣i∣ j) ⟩
714
+ ∣ i ∣ ℕ.+ ∣ j ∣ ∎
715
+ where open ℕ.≤-Reasoning
716
+
717
+ ------------------------------------------------------------------------
718
+ -- Properties of sign and _◃_
719
+
720
+ ◃-nonZero : ∀ s n .{{_ : ℕ.NonZero n}} → NonZero (s ◃ n)
721
+ ◃-nonZero Sign.- (ℕ.suc _) = _
722
+ ◃-nonZero Sign.+ (ℕ.suc _) = _
723
+
724
+ ◃-inverse : ∀ i → sign i ◃ ∣ i ∣ ≡ i
725
+ ◃-inverse -[1+ n ] = refl
726
+ ◃-inverse +0 = refl
727
+ ◃-inverse +[1+ n ] = refl
728
+
729
+ ◃-cong : sign i ≡ sign j → ∣ i ∣ ≡ ∣ j ∣ → i ≡ j
730
+ ◃-cong {+ m} {+ n } ≡-sign refl = refl
731
+ ◃-cong { -[1+ m ]} { -[1+ n ]} ≡-sign refl = refl
732
+
733
+ +◃n≡+n : ∀ n → Sign.+ ◃ n ≡ + n
734
+ +◃n≡+n zero = refl
735
+ +◃n≡+n (suc _) = refl
736
+
737
+ -◃n≡-n : ∀ n → Sign.- ◃ n ≡ - + n
738
+ -◃n≡-n zero = refl
739
+ -◃n≡-n (suc _) = refl
740
+
741
+ sign-◃ : ∀ s n .{{_ : ℕ.NonZero n}} → sign (s ◃ n) ≡ s
742
+ sign-◃ Sign.- (suc _) = refl
743
+ sign-◃ Sign.+ (suc _) = refl
744
+
745
+ abs-◃ : ∀ s n → ∣ s ◃ n ∣ ≡ n
746
+ abs-◃ _ zero = refl
747
+ abs-◃ Sign.- (suc n) = refl
748
+ abs-◃ Sign.+ (suc n) = refl
749
+
750
+ signᵢ◃∣i∣≡i : ∀ i → sign i ◃ ∣ i ∣ ≡ i
751
+ signᵢ◃∣i∣≡i (+ n) = +◃n≡+n n
752
+ signᵢ◃∣i∣≡i -[1+ n ] = refl
753
+
754
+ sign-cong : .{{_ : ℕ.NonZero m}} .{{_ : ℕ.NonZero n}} →
755
+ s ◃ m ≡ t ◃ n → s ≡ t
756
+ sign-cong {n@(suc _)} {m@(suc _)} {s} {t} eq = begin
757
+ s ≡⟨ sign-◃ s n ⟨
758
+ sign (s ◃ n) ≡⟨ cong sign eq ⟩
759
+ sign (t ◃ m) ≡⟨ sign-◃ t m ⟩
760
+ t ∎ where open ≡-Reasoning
761
+
762
+ sign-cong′ : s ◃ m ≡ t ◃ n → s ≡ t ⊎ (m ≡ 0 × n ≡ 0 )
763
+ sign-cong′ {s} {zero} {t} {zero} eq = inj₂ (refl , refl)
764
+ sign-cong′ {s} {zero} {Sign.- } {suc n} ()
765
+ sign-cong′ {s} {zero} {Sign.+ } {suc n} ()
766
+ sign-cong′ {Sign.- } {suc m} {t} {zero} ()
767
+ sign-cong′ {Sign.+ } {suc m} {t} {zero} ()
768
+ sign-cong′ {s} {suc m} {t} {suc n} eq = inj₁ (sign-cong eq)
769
+
770
+ abs-cong : s ◃ m ≡ t ◃ n → m ≡ n
771
+ abs-cong {s} {m} {t} {n} eq = begin
772
+ m ≡⟨ abs-◃ s m ⟨
773
+ ∣ s ◃ m ∣ ≡⟨ cong ∣_∣ eq ⟩
774
+ ∣ t ◃ n ∣ ≡⟨ abs-◃ t n ⟩
775
+ n ∎ where open ≡-Reasoning
776
+
777
+ ∣s◃m∣*∣t◃n∣≡m*n : ∀ s t m n → ∣ s ◃ m ∣ ℕ.* ∣ t ◃ n ∣ ≡ m ℕ.* n
778
+ ∣s◃m∣*∣t◃n∣≡m*n s t m n = cong₂ ℕ._*_ (abs-◃ s m) (abs-◃ t n)
779
+
780
+ +◃-mono-< : m ℕ.< n → Sign.+ ◃ m < Sign.+ ◃ n
781
+ +◃-mono-< {zero} {suc n} m<n = +<+ m<n
782
+ +◃-mono-< {suc m} {suc n} m<n = +<+ m<n
783
+
784
+ +◃-cancel-< : Sign.+ ◃ m < Sign.+ ◃ n → m ℕ.< n
785
+ +◃-cancel-< {zero} {zero} (+<+ ())
786
+ +◃-cancel-< {suc m} {zero} (+<+ ())
787
+ +◃-cancel-< {zero} {suc n} (+<+ m<n) = m<n
788
+ +◃-cancel-< {suc m} {suc n} (+<+ m<n) = m<n
789
+
790
+ neg◃-cancel-< : Sign.- ◃ m < Sign.- ◃ n → n ℕ.< m
791
+ neg◃-cancel-< {zero} {zero} (+<+ ())
792
+ neg◃-cancel-< {suc m} {zero} -<+ = z<s
793
+ neg◃-cancel-< {suc m} {suc n} (-<- n<m) = s<s n<m
794
+
795
+ -◃<+◃ : ∀ m n .{{_ : ℕ.NonZero m}} → Sign.- ◃ m < Sign.+ ◃ n
796
+ -◃<+◃ (suc _) zero = -<+
797
+ -◃<+◃ (suc _) (suc _) = -<+
798
+
799
+ +◃≮-◃ : Sign.+ ◃ m ≮ Sign.- ◃ n
800
+ +◃≮-◃ {zero} {zero} (+<+ ())
801
+ +◃≮-◃ {suc m} {zero} (+<+ ())
802
+
801
803
------------------------------------------------------------------------
802
804
-- Properties of _+_
803
805
------------------------------------------------------------------------
0 commit comments