Skip to content

Commit 629503a

Browse files
authored
Merge pull request #1250 from ecavallo/nat-minor
Some Nat/Bijections simplification suggested by @anshwad10
2 parents ad6f8ee + 118cd46 commit 629503a

File tree

3 files changed

+31
-48
lines changed

3 files changed

+31
-48
lines changed

Cubical/Data/Nat/Bijections/Sum.agda

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,59 +16,46 @@ open <-Reasoning
1616
open import Cubical.Tactics.NatSolver
1717
open import Cubical.Data.Nat.Bijections.IncreasingFunction
1818

19-
double :
20-
double n = n + n
21-
2219
private
23-
2Sn=2n+2 : {n : ℕ} double (suc n) ≡ double n + 2
24-
2Sn=2n+2 = solveℕ!
20+
2Sn=2n+2 : {n : ℕ} doubleℕ (suc n) ≡ doubleℕ n + 2
21+
2Sn=2n+2 = +-comm 2 (doubleℕ _)
2522

26-
doubleGrows : (n : ℕ) double n < double (suc n)
27-
doubleGrows n = double n
28-
≡<⟨ refl ⟩
29-
n + n
30-
<≡⟨ <SumLeft ⟩
31-
n + n + 2
32-
≡⟨ sym 2Sn=2n+2 ⟩
33-
double (suc n) ∎
23+
doubleGrows : (n : ℕ) doubleℕ n < doubleℕ (suc n)
24+
doubleGrows n = <-trans <-suc <-suc
3425

35-
¬2n+2+k<2n : (n : ℕ) (k : ℕ) ¬ ( suc (suc k) + double n < double (suc n))
26+
¬2n+2+k<2n : (n : ℕ) (k : ℕ) ¬ ( suc (suc k) + doubleℕ n < doubleℕ (suc n))
3627
¬2n+2+k<2n n k p = ex-falso (¬-<-zero k<0) where
37-
2n+k+2<2n+2 : double n + suc (suc k) < double n + 2
38-
2n+k+2<2n+2 = double n + suc (suc k)
39-
≡<⟨ +-comm (n + n) (suc (suc k)) ⟩
40-
suc (suc k) + double n
28+
2n+k+2<2n+2 : doubleℕ n + suc (suc k) < doubleℕ n + 2
29+
2n+k+2<2n+2 = doubleℕ n + suc (suc k)
30+
≡<⟨ +-comm (doubleℕ n) (suc (suc k)) ⟩
31+
suc (suc k) + doubleℕ n
4132
<≡⟨ p ⟩
42-
double (suc n)
33+
doubleℕ (suc n)
4334
≡⟨ 2Sn=2n+2 ⟩
44-
double n + 2
35+
doubleℕ n + 2
4536
k+2<2 : suc (suc k) < suc (suc 0)
4637
k+2<2 = <-k+-cancel 2n+k+2<2n+2
4738
k<0 : k < 0
4839
k<0 = pred-≤-pred (pred-≤-pred k+2<2)
4940

50-
doubleInc : isStrictlyIncreasing double
51-
doubleInc = sucIncreasing→StrictlyIncreasing double doubleGrows
41+
doubleInc : isStrictlyIncreasing doubleℕ
42+
doubleInc = sucIncreasing→StrictlyIncreasing doubleℕ doubleGrows
5243

5344
private
54-
partitionDouble≅ℕ⊎ℕ : Iso (partition double refl doubleInc) (ℕ ⊎ ℕ)
55-
Iso.fun partitionDouble≅ℕ⊎ℕ (n , zero , p) = inl n
56-
Iso.fun partitionDouble≅ℕ⊎ℕ (n , suc zero , p) = inr n
57-
Iso.fun partitionDouble≅ℕ⊎ℕ (n , suc (suc k) , p) = ex-falso (¬2n+2+k<2n n k p)
58-
Iso.inv partitionDouble≅ℕ⊎ℕ (inl n) = n , zero , doubleGrows n
59-
Iso.inv partitionDouble≅ℕ⊎ℕ (inr n) = n , 1 , (
60-
1 + n + n <≡⟨ <SumRight {k = 0} ⟩
61-
2 + n + n ≡⟨ +-comm 2 (n + n) ⟩
62-
n + n + 2 ≡⟨ sym 2Sn=2n+2 ⟩
63-
double (suc n) ∎ )
64-
Iso.rightInv partitionDouble≅ℕ⊎ℕ (inl n) = refl
65-
Iso.rightInv partitionDouble≅ℕ⊎ℕ (inr n) = refl
66-
Iso.leftInv partitionDouble≅ℕ⊎ℕ (k , zero , p) = ΣPathP (refl , ΣPathPProp (λ a isProp≤) refl)
67-
Iso.leftInv partitionDouble≅ℕ⊎ℕ (k , suc zero , p) = ΣPathP (refl , ΣPathPProp (λ a isProp≤) refl)
68-
Iso.leftInv partitionDouble≅ℕ⊎ℕ (k , suc (suc i) , p) = ex-falso $ ¬2n+2+k<2n k i p
69-
70-
partitionDouble≅ℕ : Iso (partition double refl doubleInc) ℕ
71-
partitionDouble≅ℕ = partition≅ℕ double refl doubleInc
45+
partitionDoubleℕ≅ℕ⊎ℕ : Iso (partition doubleℕ refl doubleInc) (ℕ ⊎ ℕ)
46+
Iso.fun partitionDoubleℕ≅ℕ⊎ℕ (n , zero , p) = inl n
47+
Iso.fun partitionDoubleℕ≅ℕ⊎ℕ (n , suc zero , p) = inr n
48+
Iso.fun partitionDoubleℕ≅ℕ⊎ℕ (n , suc (suc k) , p) = ex-falso (¬2n+2+k<2n n k p)
49+
Iso.inv partitionDoubleℕ≅ℕ⊎ℕ (inl n) = n , zero , doubleGrows n
50+
Iso.inv partitionDoubleℕ≅ℕ⊎ℕ (inr n) = n , 1 , <-suc
51+
Iso.rightInv partitionDoubleℕ≅ℕ⊎ℕ (inl n) = refl
52+
Iso.rightInv partitionDoubleℕ≅ℕ⊎ℕ (inr n) = refl
53+
Iso.leftInv partitionDoubleℕ≅ℕ⊎ℕ (k , zero , p) = ΣPathP (refl , ΣPathPProp (λ a isProp≤) refl)
54+
Iso.leftInv partitionDoubleℕ≅ℕ⊎ℕ (k , suc zero , p) = ΣPathP (refl , ΣPathPProp (λ a isProp≤) refl)
55+
Iso.leftInv partitionDoubleℕ≅ℕ⊎ℕ (k , suc (suc i) , p) = ex-falso $ ¬2n+2+k<2n k i p
56+
57+
partitionDoubleℕ≅ℕ : Iso (partition doubleℕ refl doubleInc) ℕ
58+
partitionDoubleℕ≅ℕ = partition≅ℕ doubleℕ refl doubleInc
7259

7360
ℕ⊎ℕ≅ℕ : Iso (ℕ ⊎ ℕ) ℕ
74-
ℕ⊎ℕ≅ℕ = compIso (invIso partitionDouble≅ℕ⊎ℕ) partitionDouble≅ℕ
61+
ℕ⊎ℕ≅ℕ = compIso (invIso partitionDoubleℕ≅ℕ⊎ℕ) partitionDoubleℕ≅ℕ

Cubical/Data/Nat/Bijections/Triangle.agda

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ strictIncTriangle = sucIncreasing→StrictlyIncreasing triangle triangleN<triang
2222
triangleN<triangleSN n = n , refl
2323

2424
private
25-
1+k+t=k+t+1 : (n : ℕ) (t : ℕ ) suc (n + t) ≡ n + suc t
26-
1+k+t=k+t+1 n t = solveℕ!
2725
1+k+tk=tsk : (n : ℕ) suc (n + triangle n) ≡ triangle (suc n)
28-
1+k+tk=tsk n = 1+k+t=k+t+1 n (triangle n)
26+
1+k+tk=tsk n = sym (+-suc _ _)
2927

3028
partitionTriangle = partition triangle refl strictIncTriangle
3129

Cubical/Data/Nat/Order.agda

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,14 +575,12 @@ module _ (f : ℕ → ℕ) (fInc : ((n : ℕ) → f n < f (suc n))) where
575575
open <-Reasoning
576576
sucIncreasing→StrictlyIncreasing : isStrictlyIncreasing f
577577
sucIncreasing→StrictlyIncreasing {m = m} {n = n} (k , m+k+1=n) =
578-
sucIncreasing→strictlyIncreasing' m n k m+k+1=n where
579-
578+
sucIncreasing→strictlyIncreasing' m n k m+k+1=n
579+
where
580580
sucIncreasing→strictlyIncreasing' :
581581
(m : ℕ) (n : ℕ) (k : ℕ) (k + suc m ≡ n) f m < f n
582-
583582
sucIncreasing→strictlyIncreasing' m _ zero m+1=n =
584583
subst (λ n' f m < f n') m+1=n (fInc m)
585-
586584
sucIncreasing→strictlyIncreasing' m _ (suc k) sk+sm=n =
587585
subst (λ n' f m < f n') sk+sm=n $
588586
f m

0 commit comments

Comments
 (0)