~/bend-docscommunity

int.bend open laws/TODOs

raw source on the hub · import 0xd5e9362591c1667c9894b781190e1ac9/int.bend as Int

int.bend -- the integers, as a bounty: a canonical representation is FIXED here (so that == is real equality), the operations are open (laws with no def), and the laws and test cases are open claims about them. Fill the operations first, in a new file that imports this one with an alias; every test case is then {==}.

Int.Pos{n} is n, Int.NegS{n} is -(1+n). Nothing else represents an integer, so there is exactly one term per integer.

2 imports
import Base
import ./nat.bend as N

Laws

law Int.neg provedin fermat4.bendsource · line 28 · raw

@a:Int -> Int

law Int.add provedin fermat4.bendsource · line 32 · raw

@a:Int -> @b:Int -> Int

law Int.mul provedin fermat4.bendsource · line 37 · raw

@a:Int -> @b:Int -> Int

law Int.sub provedin fermat4.bendsource · line 42 · raw

@a:Int -> @b:Int -> Int

law Int.abs provedin fermat4.bendsource · line 48 · raw

@a:Int -> Nat

the absolute value, as a Nat

law Int.Le provedin fermat4.bendsource · line 53 · raw

@a:Int -> @b:Int -> Type

a <= b as a computed proposition (Unit or Empty), like N.Nat.Le

law t_add_1 provedin fermat4.bendsource · line 60 · raw

{Int.add(Pos{3n}, NegS{4n}) == NegS{1n} : Int}

law t_add_2 provedin fermat4.bendsource · line 63 · raw

{Int.add(NegS{0n}, Pos{1n}) == Pos{0n} : Int}

law t_mul_1 provedin fermat4.bendsource · line 66 · raw

{Int.mul(NegS{1n}, NegS{2n}) == Pos{6n} : Int}

law t_mul_2 provedin fermat4.bendsource · line 69 · raw

{Int.mul(Pos{3n}, NegS{0n}) == NegS{2n} : Int}

law t_sub_1 provedin fermat4.bendsource · line 72 · raw

{Int.sub(Pos{0n}, Pos{5n}) == NegS{4n} : Int}

law t_abs_1 provedin fermat4.bendsource · line 75 · raw

{Int.abs(NegS{6n}) == 7n : Nat}

law of_add provedin fermat4.bendsource · line 81 · raw

@+a:Nat -> @+b:Nat -> {Int.add(Pos{a}, Pos{b}) == Pos{Nat.add(a, b)} : Int}

1. Int.of embeds Nat: addition and multiplication agree with Nat's

law of_mul provedin fermat4.bendsource · line 86 · raw

@+a:Nat -> @+b:Nat -> {Int.mul(Pos{a}, Pos{b}) == Pos{Nat.mul(a, b)} : Int}

law sub_def provedin fermat4.bendsource · line 92 · raw

@+a:Int -> @+b:Int -> {Int.sub(a, b) == Int.add(a, Int.neg(b)) : Int}

2. sub is add of the negation

law add_neg provedin fermat4.bendsource · line 98 · raw

@+a:Int -> {Int.add(a, Int.neg(a)) == Pos{0n} : Int}

3. a + (-a) = 0, and -(-a) = a

law neg_neg provedin fermat4.bendsource · line 102 · raw

@a:Int -> {Int.neg(Int.neg(a)) == a : Int}

law add_zero provedin fermat4.bendsource · line 108 · raw

@a:Int -> {Int.add(a, Pos{0n}) == a : Int}

4. (Int, add, 0) is a commutative group; (Int, mul, 1) a commutative monoid; mul distributes over add

law add_comm provedin fermat4.bendsource · line 112 · raw

@+a:Int -> @+b:Int -> {Int.add(a, b) == Int.add(b, a) : Int}

law add_assoc provedin fermat4.bendsource · line 117 · raw

@+a:Int -> @+b:Int -> @+c:Int -> {Int.add(a, Int.add(b, c)) == Int.add(Int.add(a, b), c) : Int}

law mul_one provedin fermat4.bendsource · line 123 · raw

@a:Int -> {Int.mul(a, Pos{1n}) == a : Int}

law mul_zero provedin fermat4.bendsource · line 127 · raw

@a:Int -> {Int.mul(a, Pos{0n}) == Pos{0n} : Int}

law mul_comm provedin fermat4.bendsource · line 131 · raw

@+a:Int -> @+b:Int -> {Int.mul(a, b) == Int.mul(b, a) : Int}

law mul_assoc provedin fermat4.bendsource · line 136 · raw

@+a:Int -> @+b:Int -> @+c:Int -> {Int.mul(a, Int.mul(b, c)) == Int.mul(Int.mul(a, b), c) : Int}

law mul_add provedin fermat4.bendsource · line 142 · raw

@+a:Int -> @+b:Int -> @+c:Int -> {Int.mul(a, Int.add(b, c)) == Int.add(Int.mul(a, b), Int.mul(a, c)) : Int}

law mul_eq_zero provedin fermat4.bendsource · line 149 · raw

@+a:Int -> @+b:Int -> @e:{Int.mul(a, b) == Pos{0n} : Int} -> @na:(@_:{a == Pos{0n} : Int} -> Empty) -> {b == Pos{0n} : Int}

5. no zero divisors (what the rationals will need)

law le_refl provedin fermat4.bendsource · line 158 · raw

@a:Int -> Int.Le(a, a)

6. the order: total, antisymmetric, compatible with add and with mul by a non-negative

law le_antisym provedin fermat4.bendsource · line 162 · raw

@+a:Int -> @+b:Int -> @h1:Int.Le(a, b) -> @h2:Int.Le(b, a) -> {a == b : Int}

law le_trans provedin fermat4.bendsource · line 169 · raw

@+a:Int -> @+b:Int -> @+c:Int -> @h1:Int.Le(a, b) -> @h2:Int.Le(b, c) -> Int.Le(a, c)

law le_add provedin fermat4.bendsource · line 177 · raw

@+a:Int -> @+b:Int -> @+c:Int -> @h:Int.Le(a, b) -> Int.Le(Int.add(a, c), Int.add(b, c))

law le_mul_nonneg provedin fermat4.bendsource · line 184 · raw

@+a:Int -> @+b:Int -> @+n:Nat -> @h:Int.Le(a, b) -> Int.Le(Int.mul(a, Pos{n}), Int.mul(b, Pos{n}))

law le_neg provedin fermat4.bendsource · line 192 · raw

@+a:Int -> @+b:Int -> @h:Int.Le(a, b) -> Int.Le(Int.neg(b), Int.neg(a))

7. neg reverses the order, and Pos{n} is never negative

law pos_nonneg provedin fermat4.bendsource · line 198 · raw

@n:Nat -> Int.Le(Pos{0n}, Pos{n})

Types

type Int source · line 13 · raw

Data

Definitions

def Int.of source · line 17 · raw

@n:Nat -> Int

def Int.zero source · line 20 · raw

Int

def Int.one source · line 23 · raw

Int