Equivalences involving ℕ
#
This file defines some additional constructive equivalences using Encodable
and the pairing
function on ℕ
.
An equivalence between Bool × ℕ
and ℕ
, by mapping (true, x)
to 2 * x + 1
and
(false, x)
to 2 * x
.
Equations
- Equiv.boolProdNatEquivNat = { toFun := Function.uncurry Nat.bit, invFun := Nat.boddDiv2, left_inv := Equiv.boolProdNatEquivNat.proof_1, right_inv := Equiv.boolProdNatEquivNat.proof_2 }
Instances For
@[simp]
theorem
Equiv.boolProdNatEquivNat_symm_apply
(a✝ : ℕ)
:
Equiv.boolProdNatEquivNat.symm a✝ = a✝.boddDiv2
@[simp]
An equivalence between ℕ ⊕ ℕ
and ℕ
, by mapping (Sum.inl x)
to 2 * x
and (Sum.inr x)
to
2 * x + 1
.
Equations
Instances For
@[simp]
theorem
Equiv.natSumNatEquivNat_symm_apply
(a✝ : ℕ)
:
Equiv.natSumNatEquivNat.symm a✝ = Bool.rec (Sum.inl a✝.div2) (Sum.inr a✝.div2) a✝.bodd
@[simp]
An equivalence between ℤ
and ℕ
, through ℤ ≃ ℕ ⊕ ℕ
and ℕ ⊕ ℕ ≃ ℕ
.
Equations
Instances For
An equivalence between α × α
and α
, given that there is an equivalence between α
and ℕ
.
Equations
- e.prodEquivOfEquivNat = Trans.trans (Trans.trans (e.prodCongr e) Nat.pairEquiv) e.symm