We will
prove SNo y ∧ 0 ≤ y ∧ x < y * y.
Let z be given.
Let z' be given.
Apply IHk1 z Hz to the current goal.
Assume H.
Apply H to the current goal.
Assume Hz1: SNo z.
Apply IHk1 z' Hz' to the current goal.
Assume H.
Apply H to the current goal.
Assume Hz'1: SNo z'.
We will
prove SNo y ∧ 0 ≤ y ∧ x < y * y.
We prove the intermediate
claim Lzz':
SNo (z * z').
An exact proof term for the current goal is SNo_mul_SNo z z' Hz1 Hz'1.
We prove the intermediate
claim Lxpzz':
SNo (x + z * z').
An
exact proof term for the current goal is
SNo_add_SNo x (z * z') Hx Lzz'.
We prove the intermediate
claim Lzpz':
SNo (z + z').
An exact proof term for the current goal is SNo_add_SNo z z' Hz1 Hz'1.
We prove the intermediate claim Ly: SNo y.
rewrite the current goal using Hyzz' (from left to right).
An
exact proof term for the current goal is
SNo_div_SNo (x + z * z') (z + z') Lxpzz' Lzpz'.
We prove the intermediate
claim Lxpzz'nonneg:
0 ≤ x + z * z'.
rewrite the current goal using add_SNo_0L 0 SNo_0 (from right to left).
Apply add_SNo_Le3 0 0 x (z * z') SNo_0 SNo_0 Hx Lzz' Hxnonneg to the current goal.
We will
prove 0 ≤ z * z'.
An exact proof term for the current goal is mul_SNo_nonneg_nonneg z z' Hz1 Hz'1 Hz2 Hz'2.
We prove the intermediate
claim Lynonneg:
0 ≤ y.
rewrite the current goal using Hyzz' (from left to right).
We will
prove 0 ≤ (x + z * z') :/: (z + z').
Apply SNoLeE 0 (x + z * z') SNo_0 Lxpzz' Lxpzz'nonneg to the current goal.
Apply SNoLtLe to the current goal.
Apply div_SNo_pos_pos (x + z * z') (z + z') Lxpzz' Lzpz' to the current goal.
We will
prove 0 < x + z * z'.
An exact proof term for the current goal is H1.
We will
prove 0 < z + z'.
An exact proof term for the current goal is Hzz'pos.
rewrite the current goal using H1 (from right to left).
We will
prove 0 ≤ 0 :/: (z + z').
rewrite the current goal using
div_SNo_0_num (z + z') Lzpz' (from left to right).
Apply SNoLe_ref to the current goal.
Apply and3I to the current goal.
An exact proof term for the current goal is Ly.
An exact proof term for the current goal is Lynonneg.
rewrite the current goal using Hyzz' (from left to right).
We will
prove x < ((x + z * z') :/: (z + z')) * ((x + z * z') :/: (z + z')).
rewrite the current goal using
mul_div_SNo_both (x + z * z') (z + z') (x + z * z') (z + z') Lxpzz' Lzpz' Lxpzz' Lzpz' (from left to right).
We will
prove x < ((x + z * z') * (x + z * z')) :/: ((z + z') * (z + z')).
Apply div_SNo_pos_LtR ((x + z * z') * (x + z * z')) ((z + z') * (z + z')) x (SNo_mul_SNo (x + z * z') (x + z * z') Lxpzz' Lxpzz') (SNo_mul_SNo (z + z') (z + z') Lzpz' Lzpz') Hx to the current goal.
We will
prove 0 < (z + z') * (z + z').
An
exact proof term for the current goal is
mul_SNo_pos_pos (z + z') (z + z') Lzpz' Lzpz' Hzz'pos Hzz'pos.
We will
prove x * ((z + z') * (z + z')) < ((x + z * z') * (x + z * z')).
rewrite the current goal using
SNo_foil x (z * z') x (z * z') Hx Lzz' (from left to right).
rewrite the current goal using SNo_foil z z' z z' Hz1 Hz'1 Hz1 Hz'1 (from left to right).
We will
prove x * (z * z + z * z' + z' * z + z' * z') < x * x + x * z * z' + (z * z') * x + (z * z') * z * z'.
rewrite the current goal using mul_SNo_com z' z Hz'1 Hz1 (from left to right).
rewrite the current goal using
add_SNo_rotate_4_1 (z * z') (z * z') (z' * z') (z * z) Lzz' Lzz' (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1) (from right to left).
We will
prove x * (z * z' + z * z' + z' * z' + z * z) < x * x + x * z * z' + (z * z') * x + (z * z') * z * z'.
rewrite the current goal using
mul_SNo_com (z * z') x Lzz' Hx (from left to right).
We will
prove x * (z * z' + z * z' + z' * z' + z * z) < x * x + x * z * z' + x * z * z' + (z * z') * z * z'.
We prove the intermediate
claim Lxzz':
SNo (x * z * z').
An
exact proof term for the current goal is
SNo_mul_SNo x (z * z') Hx Lzz'.
rewrite the current goal using
add_SNo_rotate_4_1 (x * z * z') (x * z * z') ((z * z') * z * z') (x * x) Lxzz' Lxzz' (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx) (from right to left).
We will
prove x * (z * z' + z * z' + z' * z' + z * z) < x * z * z' + x * z * z' + (z * z') * z * z' + x * x.
rewrite the current goal using
mul_SNo_distrL x (z * z') (z * z' + z' * z' + z * z) Hx Lzz' (SNo_add_SNo_3 (z * z') (z' * z') (z * z) Lzz' (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1)) (from left to right).
We will
prove x * z * z' + x * (z * z' + z' * z' + z * z) < x * z * z' + x * z * z' + (z * z') * z * z' + x * x.
rewrite the current goal using
mul_SNo_distrL x (z * z') (z' * z' + z * z) Hx Lzz' (SNo_add_SNo (z' * z') (z * z) (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1)) (from left to right).
We will
prove x * z * z' + x * z * z' + x * (z' * z' + z * z) < x * z * z' + x * z * z' + (z * z') * z * z' + x * x.
We prove the intermediate
claim Lxzz':
SNo (x * z * z').
An exact proof term for the current goal is SNo_mul_SNo_3 x z z' Hx Hz1 Hz'1.
Apply add_SNo_Lt2 (x * z * z') (x * z * z' + x * (z' * z' + z * z)) (x * z * z' + (z * z') * z * z' + x * x) Lxzz' (SNo_add_SNo (x * z * z') (x * (z' * z' + z * z)) Lxzz' (SNo_mul_SNo x (z' * z' + z * z) Hx (SNo_add_SNo (z' * z') (z * z) (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1)))) (SNo_add_SNo_3 (x * z * z') ((z * z') * z * z') (x * x) Lxzz' (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx)) to the current goal.
We will
prove x * z * z' + x * (z' * z' + z * z) < x * z * z' + (z * z') * z * z' + x * x.
Apply add_SNo_Lt2 (x * z * z') (x * (z' * z' + z * z)) ((z * z') * z * z' + x * x) Lxzz' (SNo_mul_SNo x (z' * z' + z * z) Hx (SNo_add_SNo (z' * z') (z * z) (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1))) (SNo_add_SNo ((z * z') * z * z') (x * x) (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx)) to the current goal.
We will
prove x * (z' * z' + z * z) < (z * z') * z * z' + x * x.
rewrite the current goal using
mul_SNo_distrL x (z' * z') (z * z) Hx (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_mul_SNo z z Hz1 Hz1) (from left to right).
We will
prove x * z' * z' + x * z * z < (z * z') * z * z' + x * x.
rewrite the current goal using
mul_SNo_com x (z * z) Hx (SNo_mul_SNo z z Hz1 Hz1) (from left to right).
We will
prove x * z' * z' + (z * z) * x < (z * z') * z * z' + x * x.
rewrite the current goal using
add_SNo_0L ((z * z') * z * z' + x * x) (SNo_add_SNo ((z * z') * z * z') (x * x) (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx)) (from right to left).
We will
prove x * z' * z' + (z * z) * x < 0 + (z * z') * z * z' + x * x.
Apply add_SNo_minus_Lt1 (x * z' * z' + (z * z) * x) ((z * z') * z * z' + x * x) 0 (SNo_add_SNo (x * z' * z') ((z * z) * x) (SNo_mul_SNo x (z' * z') Hx (SNo_mul_SNo z' z' Hz'1 Hz'1)) (SNo_mul_SNo (z * z) x (SNo_mul_SNo z z Hz1 Hz1) Hx)) (SNo_add_SNo ((z * z') * z * z') (x * x) (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx)) SNo_0 to the current goal.
We will
prove (x * z' * z' + (z * z) * x) + - ((z * z') * z * z' + x * x) < 0.
rewrite the current goal using
add_SNo_assoc (x * z' * z') ((z * z) * x) (- ((z * z') * z * z' + x * x)) (SNo_mul_SNo x (z' * z') Hx (SNo_mul_SNo z' z' Hz'1 Hz'1)) (SNo_mul_SNo (z * z) x (SNo_mul_SNo z z Hz1 Hz1) Hx) (SNo_minus_SNo ((z * z') * z * z' + x * x) (SNo_add_SNo ((z * z') * z * z') (x * x) (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx))) (from right to left).
rewrite the current goal using
minus_add_SNo_distr ((z * z') * z * z') (x * x) (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz') (SNo_mul_SNo x x Hx Hx) (from left to right).
We will
prove x * z' * z' + (z * z) * x + - (z * z') * z * z' + - x * x < 0.
rewrite the current goal using
add_SNo_rotate_3_1 ((z * z) * x) (- (z * z') * z * z') (- x * x) (SNo_mul_SNo (z * z) x (SNo_mul_SNo z z Hz1 Hz1) Hx) (SNo_minus_SNo ((z * z') * z * z') (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz')) (SNo_minus_SNo (x * x) (SNo_mul_SNo x x Hx Hx)) (from left to right).
We will
prove x * z' * z' + - x * x + (z * z) * x + - (z * z') * z * z' < 0.
rewrite the current goal using
add_SNo_com ((z * z) * x) (- (z * z') * z * z') (SNo_mul_SNo (z * z) x (SNo_mul_SNo z z Hz1 Hz1) Hx) (SNo_minus_SNo ((z * z') * z * z') (SNo_mul_SNo (z * z') (z * z') Lzz' Lzz')) (from left to right).
We will
prove x * z' * z' + - x * x + - (z * z') * z * z' + (z * z) * x < 0.
rewrite the current goal using
mul_SNo_assoc z z' (z * z') Hz1 Hz'1 Lzz' (from right to left).
We will
prove x * z' * z' + - x * x + - z * z' * z * z' + (z * z) * x < 0.
rewrite the current goal using mul_SNo_com_3_0_1 z' z z' Hz'1 Hz1 Hz'1 (from left to right).
We will
prove x * z' * z' + - x * x + - z * z * z' * z' + (z * z) * x < 0.
rewrite the current goal using
mul_SNo_assoc z z (z' * z') Hz1 Hz1 (SNo_mul_SNo z' z' Hz'1 Hz'1) (from left to right).
rewrite the current goal using
SNo_foil_mm x (z * z) (z' * z') x Hx (SNo_mul_SNo z z Hz1 Hz1) (SNo_mul_SNo z' z' Hz'1 Hz'1) Hx (from right to left).
We will
prove (x + - z * z) * (z' * z' + - x) < 0.
Apply mul_SNo_neg_pos (x + - z * z) (z' * z' + - x) (SNo_add_SNo x (- z * z) Hx (SNo_minus_SNo (z * z) (SNo_mul_SNo z z Hz1 Hz1))) (SNo_add_SNo (z' * z') (- x) (SNo_mul_SNo z' z' Hz'1 Hz'1) (SNo_minus_SNo x Hx)) to the current goal.
We will
prove x + - z * z < 0.
Apply add_SNo_minus_Lt1b x (z * z) 0 Hx (SNo_mul_SNo z z Hz1 Hz1) SNo_0 to the current goal.
We will
prove x < 0 + z * z.
rewrite the current goal using
add_SNo_0L (z * z) (SNo_mul_SNo z z Hz1 Hz1) (from left to right).
An exact proof term for the current goal is Hz3.
We will
prove 0 < z' * z' + - x.
An
exact proof term for the current goal is
SNoLt_minus_pos x (z' * z') Hx (SNo_mul_SNo z' z' Hz'1 Hz'1) Hz'3.
An exact proof term for the current goal is Hx.
We will
prove SNo (z * z').
An exact proof term for the current goal is Lzz'.