Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+โ†‘Ctrl+โ†“to navigate, Ctrl+๐Ÿ–ฑ๏ธto focus. On Mac, use Cmdinstead of Ctrl.
import Std.Data.Int.Lemmas
import Std.Data.Rat.Basic

/-! # Additional lemmas about the Rational Numbers -/

namespace Rat

@[simp] theorem 
maybeNormalize_eq: โˆ€ {num : Int} {den g : Nat} (den_nz : den / g โ‰  0) (reduced : Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)), maybeNormalize num den g den_nz reduced = mk' (Int.div num โ†‘g) (den / g)
maybeNormalize_eq
{
num: ?m.2
num
den: ?m.5
den
g: ?m.8
g
} (
den_nz: ?m.11
den_nz
reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)
reduced
) :
maybeNormalize: (num : Int) โ†’ (den g : Nat) โ†’ den / g โ‰  0 โ†’ Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g) โ†’ Rat
maybeNormalize
num: ?m.2
num
den: ?m.5
den
g: ?m.8
g
den_nz: ?m.11
den_nz
reduced: ?m.14
reduced
= { num :=
num: ?m.2
num
.
div: Int โ†’ Int โ†’ Int
div
g: ?m.8
g
, den :=
den: ?m.5
den
/
g: ?m.8
g
,
den_nz: ?m.11
den_nz
, reduced } :=

Goals accomplished! ๐Ÿ™
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


maybeNormalize num den g den_nz reduced = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


(if hg : g = 1 then mk' num den else mk' (Int.div num โ†‘g) (den / g)) = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


(if hg : g = 1 then mk' num den else mk' (Int.div num โ†‘g) (den / g)) = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


maybeNormalize num den g den_nz reduced = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: g = 1


inl
mk' num den = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: ยฌg = 1


inr
mk' (Int.div num โ†‘g) (den / g) = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


maybeNormalize num den g den_nz reduced = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: g = 1


inl
mk' num den = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: g = 1


inl
mk' num den = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: ยฌg = 1


inr
mk' (Int.div num โ†‘g) (den / g) = mk' (Int.div num โ†‘g) (den / g)
num: Int

den: Nat

den_nz: den / 1 โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘1)) (den / 1)


inl
mk' num den = mk' (Int.div num โ†‘1) (den / 1)
num: Int

den: Nat

den_nz: den / 1 โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘1)) (den / 1)


inl
mk' num den = mk' (Int.div num โ†‘1) (den / 1)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: g = 1


inl
mk' num den = mk' (Int.div num โ†‘g) (den / g)

Goals accomplished! ๐Ÿ™
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)


maybeNormalize num den g den_nz reduced = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: ยฌg = 1


inr
mk' (Int.div num โ†‘g) (den / g) = mk' (Int.div num โ†‘g) (den / g)
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hโœ: ยฌg = 1


inr
mk' (Int.div num โ†‘g) (den / g) = mk' (Int.div num โ†‘g) (den / g)

Goals accomplished! ๐Ÿ™
theorem
normalize.reduced': โˆ€ {num : Int} {den g : Nat}, den โ‰  0 โ†’ g = Nat.gcd (Int.natAbs num) den โ†’ Nat.coprime (Int.natAbs (num / โ†‘g)) (den / g)
normalize.reduced'
{
num: Int
num
:
Int: Type
Int
} {
den: Nat
den
g: Nat
g
:
Nat: Type
Nat
} (
den_nz: den โ‰  0
den_nz
:
den: Nat
den
โ‰ 
0: ?m.684
0
) (
e: g = Nat.gcd (Int.natAbs num) den
e
:
g: Nat
g
=
num: Int
num
.
natAbs: Int โ†’ Nat
natAbs
.
gcd: Nat โ†’ Nat โ†’ Nat
gcd
den: Nat
den
) : (
num: Int
num
/
g: Nat
g
).
natAbs: Int โ†’ Nat
natAbs
.
coprime: Nat โ†’ Nat โ†’ Prop
coprime
(
den: Nat
den
/
g: Nat
g
) :=

Goals accomplished! ๐Ÿ™
num: Int

den, g: Nat

den_nz: den โ‰  0

e: g = Nat.gcd (Int.natAbs num) den


Nat.coprime (Int.natAbs (num / โ†‘g)) (den / g)
num: Int

den, g: Nat

den_nz: den โ‰  0

e: g = Nat.gcd (Int.natAbs num) den


Nat.coprime (Int.natAbs (num / โ†‘g)) (den / g)
num: Int

den, g: Nat

den_nz: den โ‰  0

e: g = Nat.gcd (Int.natAbs num) den


Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)
num: Int

den, g: Nat

den_nz: den โ‰  0

e: g = Nat.gcd (Int.natAbs num) den


Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)
num: Int

den, g: Nat

den_nz: den โ‰  0

e: g = Nat.gcd (Int.natAbs num) den


Nat.coprime (Int.natAbs (num / โ†‘g)) (den / g)

Goals accomplished! ๐Ÿ™
theorem
normalize_eq: โˆ€ {num : Int} {den : Nat} (den_nz : den โ‰  0), normalize num den = mk' (num / โ†‘(Nat.gcd (Int.natAbs num) den)) (den / Nat.gcd (Int.natAbs num) den)
normalize_eq
{
num: ?m.905
num
den: Nat
den
} (
den_nz: ?m.911
den_nz
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: ?m.905
num
den: ?m.908
den
den_nz: ?m.911
den_nz
= { num :=
num: ?m.905
num
/
num: ?m.905
num
.
natAbs: Int โ†’ Nat
natAbs
.
gcd: Nat โ†’ Nat โ†’ Nat
gcd
den: ?m.908
den
den :=
den: ?m.908
den
/
num: ?m.905
num
.
natAbs: Int โ†’ Nat
natAbs
.
gcd: Nat โ†’ Nat โ†’ Nat
gcd
den: ?m.908
den
den_nz :=
normalize.den_nz: โˆ€ {num : Int} {den g : Nat}, den โ‰  0 โ†’ g = Nat.gcd (Int.natAbs num) den โ†’ den / g โ‰  0
normalize.den_nz
den_nz: ?m.911
den_nz
rfl: โˆ€ {ฮฑ : Sort ?u.1057} {a : ฮฑ}, a = a
rfl
reduced :=
normalize.reduced': โˆ€ {num : Int} {den g : Nat}, den โ‰  0 โ†’ g = Nat.gcd (Int.natAbs num) den โ†’ Nat.coprime (Int.natAbs (num / โ†‘g)) (den / g)
normalize.reduced'
den_nz: ?m.911
den_nz
rfl: โˆ€ {ฮฑ : Sort ?u.1076} {a : ฮฑ}, a = a
rfl
} :=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

den_nz: den โ‰  0


normalize num den = mk' (num / โ†‘(Nat.gcd (Int.natAbs num) den)) (den / Nat.gcd (Int.natAbs num) den)

Goals accomplished! ๐Ÿ™
@[simp] theorem
normalize_zero: โˆ€ {d : Nat} (nz : d โ‰  0), normalize 0 d = 0
normalize_zero
(
nz: d โ‰  0
nz
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
0: ?m.1378
0
d: ?m.1370
d
nz: ?m.1373
nz
=
0: ?m.1381
0
:=

Goals accomplished! ๐Ÿ™
d: Nat

nz: d โ‰  0


normalize 0 d = 0
d: Nat

nz: d โ‰  0


mk' 0 1 = 0
d: Nat

nz: d โ‰  0


mk' 0 1 = 0
d: Nat

nz: d โ‰  0


normalize 0 d = 0

Goals accomplished! ๐Ÿ™
theorem
mk_eq_normalize: โˆ€ (num : Int) (den : Nat) (nz : den โ‰  0) (c : Nat.coprime (Int.natAbs num) den), mk' num den = normalize num den
mk_eq_normalize
(
num: ?m.1668
num
den: Nat
den
nz: den โ‰  0
nz
c: Nat.coprime (Int.natAbs num) den
c
) : โŸจ
num: ?m.1668
num
,
den: ?m.1671
den
,
nz: ?m.1674
nz
,
c: ?m.1677
c
โŸฉ =
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: ?m.1668
num
den: ?m.1671
den
nz: ?m.1674
nz
:=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

nz: den โ‰  0

c: Nat.coprime (Int.natAbs num) den


mk' num den = normalize num den

Goals accomplished! ๐Ÿ™
theorem
normalize_self: โˆ€ (r : Rat), normalize r.num r.den = r
normalize_self
(
r: Rat
r
:
Rat: Type
Rat
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
r: Rat
r
.
num: Rat โ†’ Int
num
r: Rat
r
.
den: Rat โ†’ Nat
den
r: Rat
r
.
den_nz: โˆ€ (self : Rat), self.den โ‰  0
den_nz
=
r: Rat
r
:= (
mk_eq_normalize: โˆ€ (num : Int) (den : Nat) (nz : den โ‰  0) (c : Nat.coprime (Int.natAbs num) den), mk' num den = normalize num den
mk_eq_normalize
..).
symm: โˆ€ {ฮฑ : Sort ?u.2002} {a b : ฮฑ}, a = b โ†’ b = a
symm
theorem
normalize_mul_left: โˆ€ {d : Nat} {n : Int} {a : Nat} (d0 : d โ‰  0) (a0 : a โ‰  0), normalize (โ†‘a * n) (a * d) = normalize n d
normalize_mul_left
{
a: Nat
a
:
Nat: Type
Nat
} (
d0: d โ‰  0
d0
:
d: ?m.2026
d
โ‰ 
0: ?m.2074
0
) (
a0: a โ‰  0
a0
:
a: Nat
a
โ‰ 
0: ?m.2088
0
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
(โ†‘
a: Nat
a
*
n: ?m.2066
n
) (
a: Nat
a
*
d: ?m.2026
d
) (
Nat.mul_ne_zero: โˆ€ {n m : Nat}, n โ‰  0 โ†’ m โ‰  0 โ†’ n * m โ‰  0
Nat.mul_ne_zero
a0: a โ‰  0
a0
d0: d โ‰  0
d0
) =
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
n: ?m.2066
n
d: ?m.2026
d
d0: d โ‰  0
d0
:=

Goals accomplished! ๐Ÿ™
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (โ†‘a * n) (a * d) = normalize n d

Goals accomplished! ๐Ÿ™
theorem
normalize_mul_right: โˆ€ {d : Nat} {n : Int} {a : Nat} (d0 : d โ‰  0) (a0 : a โ‰  0), normalize (n * โ†‘a) (d * a) = normalize n d
normalize_mul_right
{
a: Nat
a
:
Nat: Type
Nat
} (
d0: d โ‰  0
d0
:
d: ?m.2780
d
โ‰ 
0: ?m.2825
0
) (
a0: a โ‰  0
a0
:
a: Nat
a
โ‰ 
0: ?m.2839
0
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
(
n: ?m.2817
n
*
a: Nat
a
) (
d: ?m.2780
d
*
a: Nat
a
) (
Nat.mul_ne_zero: โˆ€ {n m : Nat}, n โ‰  0 โ†’ m โ‰  0 โ†’ n * m โ‰  0
Nat.mul_ne_zero
d0: d โ‰  0
d0
a0: a โ‰  0
a0
) =
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
n: ?m.2817
n
d: ?m.2780
d
d0: d โ‰  0
d0
:=

Goals accomplished! ๐Ÿ™
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize n d
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize n d
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize (โ†‘a * n) (a * d)
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize (โ†‘a * n) (a * d)
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize (โ†‘a * n) (a * d)
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize n d
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


e_num
n * โ†‘a = โ†‘a * n
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


e_den
d * a = a * d
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize (โ†‘a * n) (a * d)

Goals accomplished! ๐Ÿ™
d: Nat

n: Int

a: Nat

d0: d โ‰  0

a0: a โ‰  0


normalize (n * โ†‘a) (d * a) = normalize (โ†‘a * n) (a * d)

Goals accomplished! ๐Ÿ™

Goals accomplished! ๐Ÿ™
theorem
normalize_eq_iff: โˆ€ {dโ‚ dโ‚‚ : Nat} {nโ‚ nโ‚‚ : Int} (zโ‚ : dโ‚ โ‰  0) (zโ‚‚ : dโ‚‚ โ‰  0), normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
normalize_eq_iff
(
zโ‚: dโ‚ โ‰  0
zโ‚
:
dโ‚: ?m.3267
dโ‚
โ‰ 
0: unknown metavariable '?_uniq.3326'
0
) (
zโ‚‚: dโ‚‚ โ‰  0
zโ‚‚
:
dโ‚‚: ?m.3287
dโ‚‚
โ‰ 
0: ?m.3382
0
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
nโ‚: ?m.3320
nโ‚
dโ‚: ?m.3267
dโ‚
zโ‚: dโ‚ โ‰  0
zโ‚
=
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
nโ‚‚: ?m.3362
nโ‚‚
dโ‚‚: ?m.3287
dโ‚‚
zโ‚‚: dโ‚‚ โ‰  0
zโ‚‚
โ†”
nโ‚: ?m.3320
nโ‚
*
dโ‚‚: ?m.3287
dโ‚‚
=
nโ‚‚: ?m.3362
nโ‚‚
*
dโ‚: ?m.3267
dโ‚
:=

Goals accomplished! ๐Ÿ™
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mp
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†’ nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mpr
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚ โ†’ normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mp
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†’ nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mpr
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚ โ†’ normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * (โ†‘dโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚)) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘(dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘(dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * (โ†‘dโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚)) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) * โ†‘dโ‚ * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) * โ†‘dโ‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) * โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) * โ†‘dโ‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) = nโ‚‚ / โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆง dโ‚ / Nat.gcd (Int.natAbs nโ‚) dโ‚ = dโ‚‚ / Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚

hnโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ nโ‚

hnโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ nโ‚‚

hdโ‚: โ†‘(Nat.gcd (Int.natAbs nโ‚) dโ‚) โˆฃ โ†‘dโ‚

hdโ‚‚: โ†‘(Nat.gcd (Int.natAbs nโ‚‚) dโ‚‚) โˆฃ โ†‘dโ‚‚


mp
nโ‚‚ * โ†‘dโ‚ = nโ‚‚ * โ†‘dโ‚

Goals accomplished! ๐Ÿ™
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize (nโ‚ * โ†‘dโ‚‚) (dโ‚ * dโ‚‚) = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize (nโ‚ * โ†‘dโ‚‚) (dโ‚ * dโ‚‚) = normalize (โ†‘dโ‚ * nโ‚‚) (dโ‚ * dโ‚‚)
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize (nโ‚ * โ†‘dโ‚‚) (dโ‚ * dโ‚‚) = normalize (nโ‚‚ * โ†‘dโ‚) (dโ‚ * dโ‚‚)
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0

h: nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚


mpr
normalize (nโ‚‚ * โ†‘dโ‚) (dโ‚ * dโ‚‚) = normalize (nโ‚‚ * โ†‘dโ‚) (dโ‚ * dโ‚‚)

Goals accomplished! ๐Ÿ™
theorem
maybeNormalize_eq_normalize: โˆ€ {num : Int} {den g : Nat} (den_nz : den / g โ‰  0) (reduced : Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)), โ†‘g โˆฃ num โ†’ g โˆฃ den โ†’ maybeNormalize num den g den_nz reduced = normalize num den
maybeNormalize_eq_normalize
{
num: Int
num
:
Int: Type
Int
} {
den: Nat
den
g: Nat
g
:
Nat: Type
Nat
} (
den_nz: den / g โ‰  0
den_nz
reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)
reduced
) (
hn: ?m.4055 โˆฃ num
hn
: โ†‘
g: Nat
g
โˆฃ
num: Int
num
) (
hd: g โˆฃ den
hd
:
g: Nat
g
โˆฃ
den: Nat
den
) :
maybeNormalize: (num : Int) โ†’ (den g : Nat) โ†’ den / g โ‰  0 โ†’ Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g) โ†’ Rat
maybeNormalize
num: Int
num
den: Nat
den
g: Nat
g
den_nz: ?m.4044
den_nz
reduced: ?m.4047
reduced
=
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: Int
num
den: Nat
den
(
mt: โˆ€ {a b : Prop}, (a โ†’ b) โ†’ ยฌb โ†’ ยฌa
mt
(: den = 0 โ†’ den / g = 0
(

Goals accomplished! ๐Ÿ™
simp [ยท]): den = 0 โ†’ den / g = 0
simp [ยท]): den = 0 โ†’ den / g = 0
simp
simp [ยท]): den = 0 โ†’ den / g = 0
[ยท])
den_nz: ?m.4044
den_nz
) :=

Goals accomplished! ๐Ÿ™
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


maybeNormalize num den g den_nz reduced = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


normalize (num / โ†‘g) (den / g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


maybeNormalize num den g den_nz reduced = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


normalize (num / โ†‘g) (den / g) = normalize num den

Goals accomplished! ๐Ÿ™
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize (num / โ†‘g) (den / g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


maybeNormalize num den g den_nz reduced = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize (num / โ†‘g) (den / g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize (num / โ†‘g * โ†‘g) (den / g * g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize (num / โ†‘g) (den / g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize num (den / g * g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


normalize num (den / g * g) = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


maybeNormalize num den g den_nz reduced = normalize num den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


e_den
den / g * g = den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den

this: g โ‰  0


e_den
den / g * g = den
num: Int

den, g: Nat

den_nz: den / g โ‰  0

reduced: Nat.coprime (Int.natAbs (Int.div num โ†‘g)) (den / g)

hn: โ†‘g โˆฃ num

hd: g โˆฃ den


maybeNormalize num den g den_nz reduced = normalize num den

Goals accomplished! ๐Ÿ™
@[simp] theorem
normalize_eq_zero: โˆ€ {d : Nat} {n : Int} (d0 : d โ‰  0), normalize n d = 0 โ†” n = 0
normalize_eq_zero
(
d0: d โ‰  0
d0
:
d: ?m.4799
d
โ‰ 
0: unknown metavariable '?_uniq.4805'
0
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
n: ?m.4818
n
d: ?m.4799
d
d0: d โ‰  0
d0
=
0: ?m.4846
0
โ†”
n: ?m.4818
n
=
0: ?m.4864
0
:=

Goals accomplished! ๐Ÿ™
d: Nat

n: Int

d0: d โ‰  0


normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = normalize ?refine'_2 1 โ†” ?refine'_1 * โ†‘1 = ?refine'_2 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_2
d: Nat

n: Int

d0: d โ‰  0


normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = normalize ?refine'_2 1 โ†” ?refine'_1 * โ†‘1 = ?refine'_2 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_2
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = 0 โ†” ?refine'_1 * โ†‘1 = 0 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = 0 โ†” ?refine'_1 * โ†‘1 = 0 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = 0 โ†” ?refine'_1 * โ†‘1 = 0 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = 0 โ†” ?refine'_1 * โ†‘1 = 0 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0

this: normalize ?refine'_1 d = 0 โ†” ?refine'_1 * โ†‘1 = 0 * โ†‘d


refine'_3
normalize n d = 0 โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0


refine'_1
d: Nat

n: Int

d0: d โ‰  0

this: normalize n d = 0 โ†” n * โ†‘1 = 0 * โ†‘d


refine'_3
n * โ†‘1 = 0 * โ†‘d โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0

this: normalize n d = 0 โ†” n * โ†‘1 = 0 * โ†‘d


refine'_3
n * โ†‘1 = 0 * โ†‘d โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0

this: normalize n d = 0 โ†” n * โ†‘1 = 0 * โ†‘d


refine'_3
n * โ†‘1 = 0 * โ†‘d โ†” n = 0
d: Nat

n: Int

d0: d โ‰  0


normalize n d = 0 โ†” n = 0

Goals accomplished! ๐Ÿ™
theorem
normalize_num_den': โˆ€ (num : Int) (den : Nat) (nz : den โ‰  0), โˆƒ d, d โ‰  0 โˆง num = (normalize num den).num * โ†‘d โˆง den = (normalize num den).den * d
normalize_num_den'
(
num: Int
num
den: ?m.5050
den
nz: ?m.5053
nz
) : โˆƒ
d: Nat
d
:
Nat: Type
Nat
,
d: Nat
d
โ‰ 
0: ?m.5063
0
โˆง
num: ?m.5047
num
= (
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: ?m.5047
num
den: ?m.5050
den
nz: ?m.5053
nz
).
num: Rat โ†’ Int
num
*
d: Nat
d
โˆง
den: ?m.5050
den
= (
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: ?m.5047
num
den: ?m.5050
den
nz: ?m.5053
nz
).
den: Rat โ†’ Nat
den
*
d: Nat
d
:=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

nz: den โ‰  0


โˆƒ d, d โ‰  0 โˆง num = (normalize num den).num * โ†‘d โˆง den = (normalize num den).den * d
num: Int

den: Nat

nz: den โ‰  0


num = (normalize num den).num * โ†‘(Nat.gcd (Int.natAbs num) den) โˆง den = (normalize num den).den * Nat.gcd (Int.natAbs num) den
num: Int

den: Nat

nz: den โ‰  0


โˆƒ d, d โ‰  0 โˆง num = (normalize num den).num * โ†‘d โˆง den = (normalize num den).den * d

Goals accomplished! ๐Ÿ™
theorem
normalize_num_den: โˆ€ {n : Int} {d : Nat} {z : d โ‰  0} {n' : Int} {d' : Nat} {z' : d' โ‰  0} {c : Nat.coprime (Int.natAbs n') d'}, normalize n d = mk' n' d' โ†’ โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
normalize_num_den
(
h: normalize n d = mk' n' d'
h
:
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
n: ?m.5692
n
d: ?m.5697
d
z: ?m.5702
z
= โŸจ
n': ?m.5715
n'
,
d': ?m.5728
d'
,
z': ?m.5741
z'
,
c: ?m.5754
c
โŸฉ) : โˆƒ
m: Nat
m
:
Nat: Type
Nat
,
m: Nat
m
โ‰ 
0: ?m.5775
0
โˆง
n: ?m.5692
n
=
n': ?m.5715
n'
*
m: Nat
m
โˆง
d: ?m.5697
d
=
d': ?m.5728
d'
*
m: Nat
m
:=

Goals accomplished! ๐Ÿ™
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'

this: โˆƒ d_1, d_1 โ‰  0 โˆง n = (normalize n d).num * โ†‘d_1 โˆง d = (normalize n d).den * d_1


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'

this: โˆƒ d_1, d_1 โ‰  0 โˆง n = (normalize n d).num * โ†‘d_1 โˆง d = (normalize n d).den * d_1


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'

this: โˆƒ d_1, d_1 โ‰  0 โˆง n = (normalize n d).num * โ†‘d_1 โˆง d = (normalize n d).den * d_1


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'

this: โˆƒ d_1, d_1 โ‰  0 โˆง n = (mk' n' d').num * โ†‘d_1 โˆง d = (mk' n' d').den * d_1


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
n: Int

d: Nat

z: d โ‰  0

n': Int

d': Nat

z': d' โ‰  0

c: Nat.coprime (Int.natAbs n') d'

h: normalize n d = mk' n' d'

this: โˆƒ d_1, d_1 โ‰  0 โˆง n = (mk' n' d').num * โ†‘d_1 โˆง d = (mk' n' d').den * d_1


โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m

Goals accomplished! ๐Ÿ™
theorem
normalize_eq_mkRat: โˆ€ {num : Int} {den : Nat} (den_nz : den โ‰  0), normalize num den = mkRat num den
normalize_eq_mkRat
{
num: ?m.5975
num
den: Nat
den
} (
den_nz: den โ‰  0
den_nz
) :
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
num: ?m.5975
num
den: ?m.5978
den
den_nz: ?m.5981
den_nz
=
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
num: ?m.5975
num
den: ?m.5978
den
:=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

den_nz: den โ‰  0


normalize num den = mkRat num den

Goals accomplished! ๐Ÿ™
theorem
mkRat_num_den: โˆ€ {d : Nat} {n n' : Int} {d' : Nat} {z' : d' โ‰  0} {c : Nat.coprime (Int.natAbs n') d'}, d โ‰  0 โ†’ mkRat n d = mk' n' d' โ†’ โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
mkRat_num_den
(
z: d โ‰  0
z
:
d: ?m.6164
d
โ‰ 
0: ?m.6297
0
) (
h: mkRat n d = mk' n' d'
h
:
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.6183
n
d: ?m.6164
d
= โŸจ
n': ?m.6210
n'
,
d': ?m.6237
d'
,
z': ?m.6264
z'
,
c: ?m.6291
c
โŸฉ) : โˆƒ
m: Nat
m
:
Nat: Type
Nat
,
m: Nat
m
โ‰ 
0: ?m.6326
0
โˆง
n: ?m.6183
n
=
n': ?m.6210
n'
*
m: Nat
m
โˆง
d: ?m.6164
d
=
d': ?m.6237
d'
*
m: Nat
m
:=
normalize_num_den: โˆ€ {n : Int} {d : Nat} {z : d โ‰  0} {n' : Int} {d' : Nat} {z' : d' โ‰  0} {c : Nat.coprime (Int.natAbs n') d'}, normalize n d = mk' n' d' โ†’ โˆƒ m, m โ‰  0 โˆง n = n' * โ†‘m โˆง d = d' * m
normalize_num_den
((
normalize_eq_mkRat: โˆ€ {num : Int} {den : Nat} (den_nz : den โ‰  0), normalize num den = mkRat num den
normalize_eq_mkRat
z: d โ‰  0
z
).
symm: โˆ€ {ฮฑ : Sort ?u.6502} {a b : ฮฑ}, a = b โ†’ b = a
symm
โ–ธ
h: mkRat n d = mk' n' d'
h
) theorem
mkRat_def: โˆ€ (n : Int) (d : Nat), mkRat n d = if d0 : d = 0 then 0 else normalize n d
mkRat_def
(
n: ?m.6570
n
d: ?m.6573
d
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.6570
n
d: ?m.6573
d
= if
d0: ?m.6618
d0
:
d: ?m.6573
d
=
0: ?m.6579
0
then
0: ?m.6605
0
else
normalize: Int โ†’ (den : optParam Nat 1) โ†’ autoParam (den โ‰  0) _autoโœ โ†’ Rat
normalize
n: ?m.6570
n
d: ?m.6573
d
d0: ?m.6618
d0
:=
rfl: โˆ€ {ฮฑ : Sort ?u.6643} {a : ฮฑ}, a = a
rfl
theorem
mkRat_self: โˆ€ (a : Rat), mkRat a.num a.den = a
mkRat_self
(
a: Rat
a
:
Rat: Type
Rat
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
a: Rat
a
.
num: Rat โ†’ Int
num
a: Rat
a
.
den: Rat โ†’ Nat
den
=
a: Rat
a
:=

Goals accomplished! ๐Ÿ™
a: Rat


mkRat a.num a.den = a
a: Rat


mkRat a.num a.den = a
a: Rat


normalize a.num a.den = a
a: Rat


mkRat a.num a.den = a
a: Rat


a = a

Goals accomplished! ๐Ÿ™
theorem
mk_eq_mkRat: โˆ€ (num : Int) (den : Nat) (nz : den โ‰  0) (c : Nat.coprime (Int.natAbs num) den), mk' num den = mkRat num den
mk_eq_mkRat
(
num: ?m.6801
num
den: Nat
den
nz: ?m.6807
nz
c: ?m.6810
c
) : โŸจ
num: ?m.6801
num
,
den: ?m.6804
den
,
nz: ?m.6807
nz
,
c: ?m.6810
c
โŸฉ =
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
num: ?m.6801
num
den: ?m.6804
den
:=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

nz: den โ‰  0

c: Nat.coprime (Int.natAbs num) den


mk' num den = mkRat num den

Goals accomplished! ๐Ÿ™
@[simp] theorem
zero_mkRat: โˆ€ (n : Nat), mkRat 0 n = 0
zero_mkRat
(
n: Nat
n
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
0: ?m.6975
0
n: ?m.6970
n
=
0: ?m.6984
0
:=

Goals accomplished! ๐Ÿ™
n: Nat


mkRat 0 n = 0
n: Nat


(if h : n = 0 then 0 else 0) = 0
n: Nat


(if h : n = 0 then 0 else 0) = 0
n: Nat


mkRat 0 n = 0

Goals accomplished! ๐Ÿ™
@[simp] theorem
mkRat_zero: โˆ€ (n : Int), mkRat n 0 = 0
mkRat_zero
(
n: ?m.7382
n
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.7382
n
0: ?m.7387
0
=
0: ?m.7396
0
:=

Goals accomplished! ๐Ÿ™
n: Int


mkRat n 0 = 0

Goals accomplished! ๐Ÿ™
theorem
mkRat_eq_zero: โˆ€ {d : Nat} {n : Int}, d โ‰  0 โ†’ (mkRat n d = 0 โ†” n = 0)
mkRat_eq_zero
(
d0: d โ‰  0
d0
:
d: ?m.7564
d
โ‰ 
0: ?m.7589
0
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.7583
n
d: ?m.7564
d
=
0: ?m.7602
0
โ†”
n: ?m.7583
n
=
0: ?m.7622
0
:=

Goals accomplished! ๐Ÿ™
d: Nat

n: Int

d0: d โ‰  0


mkRat n d = 0 โ†” n = 0

Goals accomplished! ๐Ÿ™
theorem
mkRat_ne_zero: โˆ€ {d : Nat} {n : Int}, d โ‰  0 โ†’ (mkRat n d โ‰  0 โ†” n โ‰  0)
mkRat_ne_zero
(
d0: d โ‰  0
d0
:
d: ?m.7819
d
โ‰ 
0: ?m.7845
0
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.7839
n
d: ?m.7819
d
โ‰ 
0: ?m.7859
0
โ†”
n: ?m.7839
n
โ‰ 
0: ?m.7870
0
:=
not_congr: โˆ€ {a b : Prop}, (a โ†” b) โ†’ (ยฌa โ†” ยฌb)
not_congr
(
mkRat_eq_zero: โˆ€ {d : Nat} {n : Int}, d โ‰  0 โ†’ (mkRat n d = 0 โ†” n = 0)
mkRat_eq_zero
d0: d โ‰  0
d0
) theorem
mkRat_mul_left: โˆ€ {n : Int} {d a : Nat}, a โ‰  0 โ†’ mkRat (โ†‘a * n) (a * d) = mkRat n d
mkRat_mul_left
{
a: Nat
a
:
Nat: Type
Nat
} (
a0: a โ‰  0
a0
:
a: Nat
a
โ‰ 
0: ?m.7985
0
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
(โ†‘
a: Nat
a
*
n: ?m.7923
n
) (
a: Nat
a
*
d: ?m.7977
d
) =
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.7923
n
d: ?m.7977
d
:=

Goals accomplished! ๐Ÿ™
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: d = 0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (โ†‘a * n) (a * d) = mkRat n d

Goals accomplished! ๐Ÿ™
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = normalize n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = normalize (โ†‘a * n) (a * d)
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0

d0: ยฌd = 0


mkRat (โ†‘a * n) (a * d) = mkRat (โ†‘a * n) (a * d)

Goals accomplished! ๐Ÿ™
theorem
mkRat_mul_right: โˆ€ {n : Int} {d a : Nat}, a โ‰  0 โ†’ mkRat (n * โ†‘a) (d * a) = mkRat n d
mkRat_mul_right
{
a: Nat
a
:
Nat: Type
Nat
} (
a0: a โ‰  0
a0
:
a: Nat
a
โ‰ 
0: ?m.8381
0
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
(
n: ?m.8262
n
*
a: Nat
a
) (
d: ?m.8373
d
*
a: Nat
a
) =
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
n: ?m.8262
n
d: ?m.8373
d
:=

Goals accomplished! ๐Ÿ™
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat (โ†‘a * n) (a * d)
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat (โ†‘a * n) (a * d)
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat (โ†‘a * n) (a * d)
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat n d
n: Int

d, a: Nat

a0: a โ‰  0


e_num
n * โ†‘a = โ†‘a * n
n: Int

d, a: Nat

a0: a โ‰  0


e_den
d * a = a * d
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat (โ†‘a * n) (a * d)

Goals accomplished! ๐Ÿ™
n: Int

d, a: Nat

a0: a โ‰  0


mkRat (n * โ†‘a) (d * a) = mkRat (โ†‘a * n) (a * d)

Goals accomplished! ๐Ÿ™

Goals accomplished! ๐Ÿ™
theorem
mkRat_eq_iff: โˆ€ {dโ‚ dโ‚‚ : Nat} {nโ‚ nโ‚‚ : Int}, dโ‚ โ‰  0 โ†’ dโ‚‚ โ‰  0 โ†’ (mkRat nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚)
mkRat_eq_iff
(
zโ‚: dโ‚ โ‰  0
zโ‚
:
dโ‚: ?m.8746
dโ‚
โ‰ 
0: unknown metavariable '?_uniq.8805'
0
) (
zโ‚‚: dโ‚‚ โ‰  0
zโ‚‚
:
dโ‚‚: ?m.8766
dโ‚‚
โ‰ 
0: ?m.8852
0
) :
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
nโ‚: ?m.8799
nโ‚
dโ‚: ?m.8746
dโ‚
=
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
nโ‚‚: ?m.8832
nโ‚‚
dโ‚‚: ?m.8766
dโ‚‚
โ†”
nโ‚: ?m.8799
nโ‚
*
dโ‚‚: ?m.8766
dโ‚‚
=
nโ‚‚: ?m.8832
nโ‚‚
*
dโ‚: ?m.8746
dโ‚
:=

Goals accomplished! ๐Ÿ™
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mkRat nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mkRat nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mkRat nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


normalize nโ‚ dโ‚ = normalize nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


mkRat nโ‚ dโ‚ = mkRat nโ‚‚ dโ‚‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚
dโ‚, dโ‚‚: Nat

nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚ โ†” nโ‚ * โ†‘dโ‚‚ = nโ‚‚ * โ†‘dโ‚

Goals accomplished! ๐Ÿ™
@[simp] theorem
divInt_ofNat: โˆ€ (num : Int) (den : Nat), num /. โ†‘den = mkRat num den
divInt_ofNat
(
num: ?m.9108
num
den: ?m.9111
den
) :
num: ?m.9108
num
/. (
den: ?m.9111
den
:
Nat: Type
Nat
) =
mkRat: Int โ†’ Nat โ†’ Rat
mkRat
num: ?m.9108
num
den: ?m.9111
den
:=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat


num /. โ†‘den = mkRat num den

Goals accomplished! ๐Ÿ™
theorem
mk_eq_divInt: โˆ€ (num : Int) (den : Nat) (nz : den โ‰  0) (c : Nat.coprime (Int.natAbs num) den), mk' num den = num /. โ†‘den
mk_eq_divInt
(
num: ?m.9212
num
den: ?m.9215
den
nz: ?m.9218
nz
c: ?m.9221
c
) : โŸจ
num: ?m.9212
num
,
den: ?m.9215
den
,
nz: ?m.9218
nz
,
c: ?m.9221
c
โŸฉ =
num: ?m.9212
num
/. (
den: ?m.9215
den
:
Nat: Type
Nat
) :=

Goals accomplished! ๐Ÿ™
num: Int

den: Nat

nz: den โ‰  0

c: Nat.coprime (Int.natAbs num) den


mk' num den = num /. โ†‘den

Goals accomplished! ๐Ÿ™
theorem
divInt_self: โˆ€ (a : Rat), a.num /. โ†‘a.den = a
divInt_self
(
a: Rat
a
:
Rat: Type
Rat
) :
a: Rat
a
.
num: Rat โ†’ Int
num
/.
a: Rat
a
.
den: Rat โ†’ Nat
den
=
a: Rat
a
:=

Goals accomplished! ๐Ÿ™
a: Rat


a.num /. โ†‘a.den = a
a: Rat


a.num /. โ†‘a.den = a
a: Rat


mkRat a.num a.den = a
a: Rat


a.num /. โ†‘a.den = a
a: Rat


a = a

Goals accomplished! ๐Ÿ™
@[simp] theorem
zero_divInt: โˆ€ (n : Int), 0 /. n = 0
zero_divInt
(
n: ?m.9456
n
) :
0: ?m.9461
0
/.
n: ?m.9456
n
=
0: ?m.9470
0
:=

Goals accomplished! ๐Ÿ™
n: Int


0 /. n = 0
aโœ: Nat


ofNat
0 /. Int.ofNat aโœ = 0
aโœ: Nat


negSucc
0 /. Int.negSucc aโœ = 0
n: Int


0 /. n = 0
aโœ: Nat


ofNat
0 /. Int.ofNat aโœ = 0
aโœ: Nat


negSucc
0 /. Int.negSucc aโœ = 0
n: Int


0 /. n = 0

Goals accomplished! ๐Ÿ™
@[simp] theorem
divInt_zero: โˆ€ (n : Int), n /. 0 = 0
divInt_zero
(
n: Int
n
) :
n: ?m.9758
n
/.
0: ?m.9763
0
=
0: ?m.9772
0
:=
mkRat_zero: โˆ€ (n : Int), mkRat n 0 = 0
mkRat_zero
n: Int
n
theorem
neg_divInt_neg: โˆ€ (num den : Int), -num /. -den = num /. den
neg_divInt_neg
(
num: ?m.9818
num
den: ?m.9821
den
) : -
num: ?m.9818
num
/. -
den: ?m.9821
den
=
num: ?m.9818
num
/.
den: ?m.9821
den
:=

Goals accomplished! ๐Ÿ™
num, den: Int


-num /. -den = num /. den
num, den: Int


-num /. -den = num /. den
num, den: Int

n: Nat


-num /. -โ†‘(Nat.succ n) = num /. โ†‘(Nat.succ n)
num, den: Int


-num /. -den = num /. den

Goals accomplished! ๐Ÿ™
num, den: Int


-num /. -den = num /. den
num, den: Int


-num /. -0 = num /. 0
num, den: Int


-num /. -den = num /. den

Goals accomplished! ๐Ÿ™
num, den: Int


-num /. -den = num /. den
num, den: Int

n: Nat


num, den: Int


-num /. -den = num /. den

Goals accomplished! ๐Ÿ™
theorem
divInt_neg': โˆ€ (num den : Int), num /. -den = -num /. den
divInt_neg'
(
num: ?m.11657
num
den: ?m.11660
den
) :
num: ?m.11657
num
/. -
den: ?m.11660
den
= -
num: ?m.11657
num
/.
den: ?m.11660
den
:=

Goals accomplished! ๐Ÿ™
num, den: Int


num /. -den = -num /. den
num, den: Int


num /. -den = -num /. den
num, den: Int


-num /. - -den = -num /. den
num, den: Int


num /. -den = -num /. den
num, den: Int


-num /. den = -num /. den

Goals accomplished! ๐Ÿ™
theorem
divInt_eq_iff: โˆ€ {dโ‚ dโ‚‚ nโ‚ nโ‚‚ : Int}, dโ‚ โ‰  0 โ†’ dโ‚‚ โ‰  0 โ†’ (nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚)
divInt_eq_iff
(
zโ‚: dโ‚ โ‰  0
zโ‚
:
dโ‚: ?m.11710
dโ‚
โ‰ 
0: unknown metavariable '?_uniq.11736'
0
) (
zโ‚‚: dโ‚‚ โ‰  0
zโ‚‚
:
dโ‚‚: ?m.11730
dโ‚‚
โ‰ 
0: unknown metavariable '?_uniq.11750'
0
) :
nโ‚: ?m.11763
nโ‚
/.
dโ‚: ?m.11710
dโ‚
=
nโ‚‚: ?m.11796
nโ‚‚
/.
dโ‚‚: ?m.11730
dโ‚‚
โ†”
nโ‚: ?m.11763
nโ‚
*
dโ‚‚: ?m.11730
dโ‚‚
=
nโ‚‚: ?m.11796
nโ‚‚
*
dโ‚: ?m.11710
dโ‚
:=

Goals accomplished! ๐Ÿ™
dโ‚, dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚
dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚‚: dโ‚‚ โ‰  0

wโœ: Nat

zโ‚: โ†‘wโœ โ‰  0


intro.inl
nโ‚ /. โ†‘wโœ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * โ†‘wโœ
dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚‚: dโ‚‚ โ‰  0

wโœ: Nat

zโ‚: -โ†‘wโœ โ‰  0


intro.inr
nโ‚ /. -โ†‘wโœ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * -โ†‘wโœ
dโ‚, dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚
dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚‚: dโ‚‚ โ‰  0

wโœ: Nat

zโ‚: โ†‘wโœ โ‰  0


intro.inl
nโ‚ /. โ†‘wโœ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * โ†‘wโœ
dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚‚: dโ‚‚ โ‰  0

wโœ: Nat

zโ‚: -โ†‘wโœ โ‰  0


intro.inr
nโ‚ /. -โ†‘wโœ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * -โ†‘wโœ
dโ‚, dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: โ†‘wโœ โ‰  0


intro.inl.intro.inl
nโ‚ /. โ†‘wโœยน = nโ‚‚ /. โ†‘wโœ โ†” nโ‚ * โ†‘wโœ = nโ‚‚ * โ†‘wโœยน
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: -โ†‘wโœ โ‰  0


intro.inl.intro.inr
nโ‚ /. โ†‘wโœยน = nโ‚‚ /. -โ†‘wโœ โ†” nโ‚ * -โ†‘wโœ = nโ‚‚ * โ†‘wโœยน
dโ‚, dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: โ†‘wโœ โ‰  0


intro.inl.intro.inl
nโ‚ /. โ†‘wโœยน = nโ‚‚ /. โ†‘wโœ โ†” nโ‚ * โ†‘wโœ = nโ‚‚ * โ†‘wโœยน
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: -โ†‘wโœ โ‰  0


intro.inl.intro.inr
nโ‚ /. โ†‘wโœยน = nโ‚‚ /. -โ†‘wโœ โ†” nโ‚ * -โ†‘wโœ = nโ‚‚ * โ†‘wโœยน
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: -โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: โ†‘wโœ โ‰  0


intro.inr.intro.inl
nโ‚ /. -โ†‘wโœยน = nโ‚‚ /. โ†‘wโœ โ†” nโ‚ * โ†‘wโœ = nโ‚‚ * -โ†‘wโœยน
nโ‚, nโ‚‚: Int

wโœยน: Nat

zโ‚: -โ†‘wโœยน โ‰  0

wโœ: Nat

zโ‚‚: -โ†‘wโœ โ‰  0


intro.inr.intro.inr
nโ‚ /. -โ†‘wโœยน = nโ‚‚ /. -โ†‘wโœ โ†” nโ‚ * -โ†‘wโœ = nโ‚‚ * -โ†‘wโœยน
dโ‚, dโ‚‚, nโ‚, nโ‚‚: Int

zโ‚: dโ‚ โ‰  0

zโ‚‚: dโ‚‚ โ‰  0


nโ‚ /. dโ‚ = nโ‚‚ /. dโ‚‚ โ†” nโ‚ * dโ‚‚ = nโ‚‚ * dโ‚

Goals accomplished! ๐Ÿ™
theorem
divInt_mul_left: โˆ€ {n d a : Int}, a โ‰  0 โ†’ a * n /. (a * d) = n /. d
divInt_mul_left
{
a: Int
a
:
Int: Type
Int
} (
a0: a โ‰  0
a0
:
a: Int
a
โ‰ 
0: ?m.15110
0
) : (
a: Int
a
*
n: ?m.15051
n
) /. (
a: Int
a
*
d: ?m.15102
d
) =
n: ?m.15051
n
/.
d: ?m.15102
d
:=