Package natural-div: Natural number division
Information
name | natural-div |
version | 1.21 |
description | Natural number division |
author | Joe Hurd <joe@gilith.com> |
license | MIT |
requires | bool natural-def natural-thm natural-numeral natural-order natural-add natural-mult natural-exp natural-sub |
show | Data.Bool Number.Natural |
Files
- Package tarball natural-div-1.21.tgz
- Theory file natural-div.thy (included in the package tarball)
Defined Constants
- Number
- Natural
- div
- even
- mod
- odd
- Natural
Theorems
⊦ even 0 ⇔ T
⊦ odd 0 ⇔ F
⊦ ∀n. even n ∨ odd n
⊦ ∀n. ¬(even n ∧ odd n)
⊦ ∀n. even (2 * n)
⊦ ∀n. ¬even n ⇔ odd n
⊦ ∀n. ¬odd n ⇔ even n
⊦ ∀n. n div 1 = n
⊦ ∀n. n mod 1 = 0
⊦ ∀n. odd (suc (2 * n))
⊦ ∀n. even (suc n) ⇔ ¬even n
⊦ ∀n. odd (suc n) ⇔ ¬odd n
⊦ ∀m n. n * (m div n) ≤ m
⊦ ∀n. even n ⇔ n mod 2 = 0
⊦ ∀n. ¬(n = 0) ⇒ 0 div n = 0
⊦ ∀n. ¬(n = 0) ⇒ 0 mod n = 0
⊦ ∀n. ¬(n = 0) ⇒ n mod n = 0
⊦ ∀m n. m < n ⇒ m div n = 0
⊦ ∀m n. m < n ⇒ m mod n = m
⊦ ∀n. odd n ⇔ n mod 2 = 1
⊦ ∀n. ¬(n = 0) ⇒ n div n = 1
⊦ ∀m n. even (m * n) ⇔ even m ∨ even n
⊦ ∀m n. even (m + n) ⇔ even m ⇔ even n
⊦ ∀m n. odd (m * n) ⇔ odd m ∧ odd n
⊦ ∀m n. ¬(n = 0) ⇒ m mod n < n
⊦ ∀m n. ¬(n = 0) ⇒ m div n ≤ m
⊦ ∀m n. ¬(n = 0) ⇒ m mod n ≤ m
⊦ ∀n. even n ⇔ ∃m. n = 2 * m
⊦ ∀m n. odd (m + n) ⇔ ¬(odd m ⇔ odd n)
⊦ ∀m n. odd (exp m n) ⇔ odd m ∨ n = 0
⊦ ∀n. odd n ⇔ ∃m. n = suc (2 * m)
⊦ ∀m n. even (exp m n) ⇔ even m ∧ ¬(n = 0)
⊦ ∀m n. ¬(m = 0) ⇒ m * n div m = n
⊦ ∀m n. ¬(m = 0) ⇒ m * n mod m = 0
⊦ ∀m n p. (m * n + p) mod n = p mod n
⊦ ∀m n. n ≤ m ⇒ (even (m - n) ⇔ even m ⇔ even n)
⊦ ∀m n. ¬(n = 0) ⇒ (m div n = 0 ⇔ m < n)
⊦ ∀m n. ¬(n = 0) ⇒ m mod n mod n = m mod n
⊦ ∀m n. n ≤ m ⇒ (odd (m - n) ⇔ ¬(odd m ⇔ odd n))
⊦ ∀m n. ¬(n = 0) ⇒ m div n * n + m mod n = m
⊦ ∀a b n. ¬(a = 0) ⇒ (n ≤ b div a ⇔ a * n ≤ b)
⊦ ∀m n p. ¬(p = 0) ⇒ m * (n div p) ≤ m * n div p
⊦ ∀m n p. ¬(p = 0) ∧ m ≤ n ⇒ m div p ≤ n div p
⊦ ∀m n p. ¬(p = 0) ∧ p ≤ m ⇒ n div m ≤ n div p
⊦ ∀a b n. ¬(a = 0) ∧ b ≤ a * n ⇒ b div a ≤ n
⊦ ∀m n. ¬(n = 0) ⇒ (m mod n = 0 ⇔ ∃q. m = q * n)
⊦ ∀m n p q. m = n + q * p ⇒ m mod p = n mod p
⊦ ∀n. (∃k m. odd m ∧ n = exp 2 k * m) ⇔ ¬(n = 0)
⊦ ∀m n p. ¬(n = 0) ⇒ m * (p mod n) mod n = m * p mod n
⊦ ∀m n p. ¬(n = 0) ⇒ m mod n * p mod n = m * p mod n
⊦ ∀m n p. ¬(n = 0) ⇒ exp (m mod n) p mod n = exp m p mod n
⊦ ∀a b n. ¬(n = 0) ⇒ (a * n + b) div n = a + b div n
⊦ ∀m n p. ¬(m * p = 0) ⇒ m * n div (m * p) = n div p
⊦ ∀m n p. ¬(n * p = 0) ⇒ m div n div p = m div (n * p)
⊦ ∀m n p. ¬(n * p = 0) ⇒ m mod (n * p) mod n = m mod n
⊦ ∀m n p. ¬(p = 0) ∧ m + p ≤ n ⇒ m div p < n div p
⊦ ∀m n. (∃q. m = n * q) ⇔ if n = 0 then m = 0 else m mod n = 0
⊦ ∀m n q r. m = q * n + r ∧ r < n ⇒ m div n = q
⊦ ∀m n q r. m = q * n + r ∧ r < n ⇒ m mod n = r
⊦ ∀a b n. ¬(a = 0) ⇒ (b div a ≤ n ⇔ b < a * (n + 1))
⊦ ∀m n p. ¬(n = 0) ⇒ m mod n * (p mod n) mod n = m * p mod n
⊦ ∀a b n. ¬(n = 0) ⇒ (a mod n + b mod n) mod n = (a + b) mod n
⊦ ∀m n p. ¬(m * p = 0) ⇒ m * n mod (m * p) = m * (n mod p)
⊦ ∀m n p. ¬(n * p = 0) ⇒ m div n mod p = m mod (n * p) div n
⊦ ∀x p m n. ¬(p = 0) ⇒ x mod exp p m mod exp p n = x mod exp p (min m n)
⊦ ∀a b c d. ¬(b = 0) ∧ b * c < (a + 1) * d ⇒ c div d ≤ a div b
⊦ ∀a b c d. b * c < (a + 1) * d ∧ a * d < (c + 1) * b ⇒ a div b = c div d
⊦ ∀a b n.
¬(n = 0) ⇒
((a + b) mod n = a mod n + b mod n ⇔ (a + b) div n = a div n + b div n)
Input Type Operators
- →
- bool
- Number
- Natural
- natural
- Natural
Input Constants
- =
- select
- Data
- Bool
- ∀
- ∧
- ⇒
- ∃
- ∃!
- ∨
- ¬
- cond
- F
- T
- Bool
- Number
- Natural
- *
- +
- -
- <
- ≤
- bit0
- bit1
- exp
- min
- suc
- zero
- Natural
Assumptions
⊦ T
⊦ ¬F ⇔ T
⊦ ¬T ⇔ F
⊦ bit0 0 = 0
⊦ ∀t. t ⇒ t
⊦ ∀n. 0 ≤ n
⊦ ∀n. n ≤ n
⊦ F ⇔ ∀p. p
⊦ ∀t. t ∨ ¬t
⊦ ∀n. 0 < suc n
⊦ (¬) = λp. p ⇒ F
⊦ (∃) = λp. p ((select) p)
⊦ ∀a. ∃x. x = a
⊦ ∀t. (∀x. t) ⇔ t
⊦ ∀t. (∃x. t) ⇔ t
⊦ ∀t. (λx. t x) = t
⊦ (∀) = λp. p = λx. T
⊦ ∀t. ¬¬t ⇔ t
⊦ ∀t. (T ⇔ t) ⇔ t
⊦ ∀t. (t ⇔ T) ⇔ t
⊦ ∀t. F ∧ t ⇔ F
⊦ ∀t. T ∧ t ⇔ t
⊦ ∀t. t ∧ F ⇔ F
⊦ ∀t. t ∧ T ⇔ t
⊦ ∀t. F ⇒ t ⇔ T
⊦ ∀t. T ⇒ t ⇔ t
⊦ ∀t. t ⇒ T ⇔ T
⊦ ∀t. F ∨ t ⇔ t
⊦ ∀t. T ∨ t ⇔ T
⊦ ∀t. t ∨ F ⇔ t
⊦ ∀t. t ∨ T ⇔ T
⊦ ∀n. ¬(suc n = 0)
⊦ ∀m. m < 0 ⇔ F
⊦ ∀n. 0 * n = 0
⊦ ∀m. m * 0 = 0
⊦ ∀n. 0 + n = n
⊦ ∀m. m + 0 = m
⊦ ∀t. (F ⇔ t) ⇔ ¬t
⊦ ∀t. (t ⇔ F) ⇔ ¬t
⊦ ∀t. t ⇒ F ⇔ ¬t
⊦ ∀n. bit1 n = suc (bit0 n)
⊦ ∀m. exp m 0 = 1
⊦ ∀m. m * 1 = m
⊦ ∀m. 1 * m = m
⊦ ∀m n. m ≤ m + n
⊦ (⇒) = λp q. p ∧ q ⇔ p
⊦ ∀t. (t ⇔ T) ∨ (t ⇔ F)
⊦ ∀m. suc m = m + 1
⊦ ∀m. m ≤ 0 ⇔ m = 0
⊦ ∀t1 t2. (if F then t1 else t2) = t2
⊦ ∀t1 t2. (if T then t1 else t2) = t1
⊦ ∀n. 0 < n ⇔ ¬(n = 0)
⊦ ∀n. bit0 (suc n) = suc (suc (bit0 n))
⊦ ∀x y. x = y ⇔ y = x
⊦ ∀x y. x = y ⇒ y = x
⊦ ∀t1 t2. t1 ∨ t2 ⇔ t2 ∨ t1
⊦ ∀m n. m * n = n * m
⊦ ∀m n. m + n = n + m
⊦ ∀m n. m ≤ n ∨ n ≤ m
⊦ ∀m n. m + n - m = n
⊦ ∀n. 2 * n = n + n
⊦ ∀m n. ¬(m < n) ⇔ n ≤ m
⊦ ∀m n. ¬(m ≤ n) ⇔ n < m
⊦ ∀m n. m < suc n ⇔ m ≤ n
⊦ ∀m n. suc m ≤ n ⇔ m < n
⊦ (∧) = λp q. (λf. f p q) = λf. f T T
⊦ ∀p. ¬(∀x. p x) ⇔ ∃x. ¬p x
⊦ ∀p. ¬(∃x. p x) ⇔ ∀x. ¬p x
⊦ (∃) = λp. ∀q. (∀x. p x ⇒ q) ⇒ q
⊦ ∀t1 t2. ¬(t1 ⇒ t2) ⇔ t1 ∧ ¬t2
⊦ ∀m n. m + suc n = suc (m + n)
⊦ ∀m n. suc m + n = suc (m + n)
⊦ ∀m n. m < m + n ⇔ 0 < n
⊦ ∀m n. n < m + n ⇔ 0 < m
⊦ ∀t1 t2. ¬(t1 ∨ t2) ⇔ ¬t1 ∧ ¬t2
⊦ ∀m n. min m n = if m ≤ n then m else n
⊦ ∀m n. m * suc n = m + m * n
⊦ ∀m n. exp m (suc n) = m * exp m n
⊦ ∀m n. suc m * n = m * n + n
⊦ ∀m n. m ≤ n ⇔ ∃d. n = m + d
⊦ (∨) = λp q. ∀r. (p ⇒ r) ⇒ (q ⇒ r) ⇒ r
⊦ ∀m n. m ≤ n ∧ n ≤ m ⇔ m = n
⊦ ∀p. (∃x y. p x y) ⇔ ∃y x. p x y
⊦ ∀p q. (∃x. p ∧ q x) ⇔ p ∧ ∃x. q x
⊦ ∀p q. p ∧ (∃x. q x) ⇔ ∃x. p ∧ q x
⊦ ∀p q. p ∨ (∃x. q x) ⇔ ∃x. p ∨ q x
⊦ ∀m n. m < suc n ⇔ m = n ∨ m < n
⊦ ∀p q. (∀x. p x ∨ q) ⇔ (∀x. p x) ∨ q
⊦ ∀p q. (∃x. p x ∧ q) ⇔ (∃x. p x) ∧ q
⊦ ∀p q. (∃x. p x) ∧ q ⇔ ∃x. p x ∧ q
⊦ ∀p q. (∃x. p x) ⇒ q ⇔ ∀x. p x ⇒ q
⊦ ∀p q. (∀x. p x) ∨ q ⇔ ∀x. p x ∨ q
⊦ ∀p q. (∃x. p x) ∨ q ⇔ ∃x. p x ∨ q
⊦ ∀x y z. x = y ∧ y = z ⇒ x = z
⊦ ∀t1 t2 t3. (t1 ∨ t2) ∨ t3 ⇔ t1 ∨ t2 ∨ t3
⊦ ∀m n p. m * (n * p) = n * (m * p)
⊦ ∀m n p. m * (n * p) = m * n * p
⊦ ∀m n p. m + (n + p) = m + n + p
⊦ ∀m n p. m + n = m + p ⇔ n = p
⊦ ∀m n p. m + p = n + p ⇔ m = n
⊦ ∀m n p. m + n < m + p ⇔ n < p
⊦ ∀m n p. m + p ≤ n + p ⇔ m ≤ n
⊦ ∀m n p. m < n ∧ n ≤ p ⇒ m < p
⊦ ∀m n p. m ≤ n ∧ n < p ⇒ m < p
⊦ ∀m n p. m ≤ n ∧ n ≤ p ⇒ m ≤ p
⊦ ∀p. (∀x. ∃y. p x y) ⇔ ∃y. ∀x. p x (y x)
⊦ ∀m n. m ≤ suc n ⇔ m = suc n ∨ m ≤ n
⊦ ∀m n. m * n = 0 ⇔ m = 0 ∨ n = 0
⊦ ∀P. P 0 ∧ (∀n. P n ⇒ P (suc n)) ⇒ ∀n. P n
⊦ ∀m n. exp m n = 0 ⇔ m = 0 ∧ ¬(n = 0)
⊦ ∀m n p. m * (n + p) = m * n + m * p
⊦ ∀m n p. exp m (n + p) = exp m n * exp m p
⊦ ∀m n p. (m + n) * p = m * p + n * p
⊦ (∃!) = λp. (∃) p ∧ ∀x y. p x ∧ p y ⇒ x = y
⊦ ∀P. (∀n. (∀m. m < n ⇒ P m) ⇒ P n) ⇒ ∀n. P n
⊦ ∀p q. (∀x. p x ∧ q x) ⇔ (∀x. p x) ∧ ∀x. q x
⊦ ∀p q. (∀x. p x ⇒ q x) ⇒ (∃x. p x) ⇒ ∃x. q x
⊦ ∀p q. (∀x. p x) ∧ (∀x. q x) ⇔ ∀x. p x ∧ q x
⊦ ∀p q. (∃x. p x) ∨ (∃x. q x) ⇔ ∃x. p x ∨ q x
⊦ ∀e f. ∃!fn. fn 0 = e ∧ ∀n. fn (suc n) = f (fn n) n
⊦ ∀P. (∃n. P n) ⇔ ∃n. P n ∧ ∀m. m < n ⇒ ¬P m
⊦ ∀m n p. m * n = m * p ⇔ m = 0 ∨ n = p
⊦ ∀m n p. m * p = n * p ⇔ m = n ∨ p = 0
⊦ ∀m n p. m * n ≤ m * p ⇔ m = 0 ∨ n ≤ p
⊦ ∀m n p. m * p ≤ n * p ⇔ m ≤ n ∨ p = 0
⊦ ∀m n p. m * n < m * p ⇔ ¬(m = 0) ∧ n < p
⊦ ∀m n p. m * p < n * p ⇔ m < n ∧ ¬(p = 0)
⊦ ∀p1 p2 q1 q2. (p2 ⇒ p1) ∧ (q1 ⇒ q2) ⇒ (p1 ⇒ q1) ⇒ p2 ⇒ q2
⊦ ∀m n p q. m ≤ p ∧ n ≤ q ⇒ m + n ≤ p + q
⊦ ∀p c x y. p (if c then x else y) ⇔ (c ⇒ p x) ∧ (¬c ⇒ p y)
⊦ ∀x m n.
exp x m ≤ exp x n ⇔ if x = 0 then m = 0 ⇒ n = 0 else x = 1 ∨ m ≤ n