Let x, y and z be given.
Assume Hx Hy Hz.
We prove the intermediate
claim Lxdy:
SNo (x :/: y).
An
exact proof term for the current goal is
SNo_div_SNo x y Hx Hy.
We prove the intermediate
claim Lxdydz:
SNo ((x :/: y) :/: z).
An
exact proof term for the current goal is
SNo_div_SNo (x :/: y) z Lxdy Hz.
We prove the intermediate
claim Lxy:
SNo (x * y).
An
exact proof term for the current goal is
SNo_mul_SNo x y Hx Hy.
We prove the intermediate
claim Lyz:
SNo (y * z).
An
exact proof term for the current goal is
SNo_mul_SNo y z Hy Hz.
We prove the intermediate
claim Lxdyz:
SNo (x :/: (y * z)).
An
exact proof term for the current goal is
SNo_div_SNo x (y * z) Hx Lyz.
Apply xm (y = 0) to the current goal.
rewrite the current goal using Hy0 (from left to right).
rewrite the current goal using
mul_SNo_zeroL z Hz (from left to right).
Apply xm (z = 0) to the current goal.
rewrite the current goal using Hz0 (from left to right).
rewrite the current goal using
mul_SNo_zeroR y Hy (from left to right).
We prove the intermediate
claim Lyz0:
y * z ≠ 0.
Apply Hz0 to the current goal.
We will
prove y * z = y * 0.
rewrite the current goal using
mul_SNo_zeroR y Hy (from left to right).
An exact proof term for the current goal is H1.
rewrite the current goal using
mul_div_SNo_invR x y Hx Hy Hy0 (from left to right).
We will
prove x = y * z * (x :/: (y * z)).
rewrite the current goal using
mul_SNo_assoc y z (x :/: (y * z)) Hy Hz Lxdyz (from left to right).
Use symmetry.
∎