Documentation

Mathlib.Data.Num.Basic

Binary representation of integers using inductive types #

Note: Unlike in Coq, where this representation is preferred because of the reliance on kernel reduction, in Lean this representation is discouraged in favor of the "Peano" natural numbers Nat, and the purpose of this collection of theorems is to show the equivalence of the different approaches.

inductive PosNum :

The type of positive binary numbers.

13 = 1101(base 2) = bit1 (bit0 (bit1 one))

inductive Num :

The type of nonnegative binary numbers, using PosNum.

13 = 1101(base 2) = pos (bit1 (bit0 (bit1 one)))

instance instZeroNum :
Equations
instance instOneNum :
Equations
Equations
inductive ZNum :

Representation of integers using trichotomy around zero.

13 = 1101(base 2) = pos (bit1 (bit0 (bit1 one))) -13 = -1101(base 2) = neg (bit1 (bit0 (bit1 one)))

instance instOneZNum :
Equations
def PosNum.bit (b : Bool) :

bit b n appends the bit b to the end of n, where bit tt x = x1 and bit ff x = x0.

Equations

Returns a boolean for whether the PosNum is one.

Equations

Addition of two PosNums.

Equations

The predecessor of a PosNum as a PosNum. This means that pred 1 = 1.

Equations

The number of bits of a PosNum, as a PosNum.

Equations

The number of bits of a PosNum, as a Nat.

Equations

Multiplication of two PosNums.

Equations

ofNat n is the PosNum corresponding to n, except for ofNat 0 = 1.

Equations
@[instance 100]
Equations
Equations
Equations
def castPosNum {α : Type u_1} [One α] [Add α] :
PosNumα

castPosNum casts a PosNum into any type which has 1 and +.

Equations
def castNum {α : Type u_1} [One α] [Add α] [Zero α] :
Numα

castNum casts a Num into any type which has 0, 1 and +.

Equations
@[instance 900]
instance posNumCoe {α : Type u_1} [One α] [Add α] :
Equations
@[instance 900]
instance numNatCoe {α : Type u_1} [One α] [Add α] [Zero α] :
Equations
Equations
instance instReprNum :
Equations

The successor of a Num as a PosNum.

Equations
def Num.succ (n : Num) :

The successor of a Num as a Num.

Equations
def Num.add :
NumNumNum

Addition of two Nums.

Equations
instance Num.instAdd :
Equations
def Num.bit0 :
NumNum

bit0 n appends a 0 to the end of n, where bit0 n = n0.

Equations
def Num.bit1 :
NumNum

bit1 n appends a 1 to the end of n, where bit1 n = n1.

Equations
def Num.bit (b : Bool) :
NumNum

bit b n appends the bit b to the end of n, where bit tt x = x1 and bit ff x = x0.

Equations
def Num.size :
NumNum

The number of bits required to represent a Num, as a Num. size 0 is defined to be 0.

Equations

The number of bits required to represent a Num, as a Nat. size 0 is defined to be 0.

Equations
def Num.mul :
NumNumNum

Multiplication of two Nums.

Equations
instance Num.instMul :
Equations
instance Num.instLT :
Equations
instance Num.instLE :
Equations

Converts a Num to a ZNum.

Equations

Converts x : Num to -x : ZNum.

Equations
def Num.ofNat' :
Num

Converts a Nat to a Num.

Equations

The negation of a ZNum.

Equations
def ZNum.abs :
ZNumNum

The absolute value of a ZNum as a Num.

Equations

The successor of a ZNum.

Equations

The predecessor of a ZNum.

Equations

bit0 n appends a 0 to the end of n, where bit0 n = n0.

Equations

bit1 x appends a 1 to the end of x, mapping x to 2 * x + 1.

Equations

bitm1 x appends a 1 to the end of x, mapping x to 2 * x - 1.

Equations

Subtraction of two PosNums, producing a ZNum.

Equations

Converts a ZNum to Option PosNum, where it is some if the ZNum was positive and none otherwise.

Equations

Converts a ZNum to a PosNum, mapping all out of range values to 1.

Equations
def PosNum.sub (a b : PosNum) :

Subtraction of PosNums, where if a < b, then a - b = 1.

Equations

The predecessor of a Num as an Option Num, where ppred 0 = none

Equations
def Num.pred :
NumNum

The predecessor of a Num as a Num, where pred 0 = 0.

Equations

Converts a ZNum to an Option Num, where ofZNum' p = none if p < 0.

Equations

Converts a ZNum to an Option Num, where ofZNum p = 0 if p < 0.

Equations
def Num.sub' :
NumNumZNum

Subtraction of two Nums, producing a ZNum.

Equations
def Num.psub (a b : Num) :

Subtraction of two Nums, producing an Option Num.

Equations
def Num.sub (a b : Num) :

Subtraction of two Nums, where if a < b, a - b = 0.

Equations
instance Num.instSub :
Equations
def ZNum.add :
ZNumZNumZNum

Addition of ZNums.

Equations
Equations
def ZNum.mul :
ZNumZNumZNum

Multiplication of ZNums.

Equations
Equations
instance ZNum.instLT :
Equations
instance ZNum.instLE :
Equations
def PosNum.divModAux (d : PosNum) (q r : Num) :

Auxiliary definition for PosNum.divMod.

Equations

divMod x y = (y / x, y % x).

Equations
def PosNum.div' (n d : PosNum) :

Division of PosNum

Equations
def PosNum.mod' (n d : PosNum) :

Modulus of PosNums.

Equations
def Num.div :
NumNumNum

Division of Nums, where x / 0 = 0.

Equations
def Num.mod :
NumNumNum

Modulus of Nums.

Equations
instance Num.instDiv :
Equations
instance Num.instMod :
Equations
def Num.gcdAux :
NumNumNum

Auxiliary definition for Num.gcd.

Equations
def Num.gcd (a b : Num) :

Greatest Common Divisor (GCD) of two Nums.

Equations
def ZNum.div :
ZNumZNumZNum

Division of ZNum, where x / 0 = 0.

Equations
def ZNum.mod :
ZNumZNumZNum

Modulus of ZNums.

Equations
Equations
Equations
def ZNum.gcd (a b : ZNum) :

Greatest Common Divisor (GCD) of two ZNums.

Equations
def castZNum {α : Type u_1} [Zero α] [One α] [Add α] [Neg α] :
ZNumα

castZNum casts a ZNum into any type which has 0, 1, + and neg

Equations
@[instance 900]
instance znumCoe {α : Type u_1} [Zero α] [One α] [Add α] [Neg α] :
Equations
Equations