rat_interp_p : rat EVAL_quote$varmap -> rat EVAL_ringNorm$polynom -> ratrat_polynom_normalize : rat EVAL_ringNorm$polynom -> rat EVAL_canonical$canonical_sumrat_polynom_simplify : rat EVAL_ringNorm$polynom -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_merge : rat EVAL_canonical$canonical_sum ->
rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_prod : rat EVAL_canonical$canonical_sum ->
rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_scalar : rat -> rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_scalar2 : EVAL_quote$index list -> rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_scalar3 : rat ->
EVAL_quote$index list -> rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_canonical_sum_simplify : rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_ics_aux : rat EVAL_quote$varmap -> rat -> rat EVAL_canonical$canonical_sum -> ratrat_r_interp_cs : rat EVAL_quote$varmap -> rat EVAL_canonical$canonical_sum -> ratrat_r_interp_m : rat EVAL_quote$varmap -> rat -> EVAL_quote$index list -> ratrat_r_interp_sp : rat EVAL_quote$varmap -> rat EVAL_canonical$spolynom -> ratrat_r_interp_vl : rat EVAL_quote$varmap -> EVAL_quote$index list -> ratrat_r_ivl_aux : rat EVAL_quote$varmap -> EVAL_quote$index -> EVAL_quote$index list -> ratrat_r_monom_insert : rat ->
EVAL_quote$index list -> rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_r_spolynom_normalize : rat EVAL_canonical$spolynom -> rat EVAL_canonical$canonical_sumrat_r_spolynom_simplify : rat EVAL_canonical$spolynom -> rat EVAL_canonical$canonical_sumrat_r_varlist_insert : EVAL_quote$index list -> rat EVAL_canonical$canonical_sum -> rat EVAL_canonical$canonical_sumrat_interp_p_def⊢ rat_interp_p = EVAL_ringNorm$interp_p (ring 0 1 $+ $* numeric_negate)
rat_polynom_normalize_def⊢ rat_polynom_normalize = EVAL_ringNorm$polynom_normalize (ring 0 1 $+ $* numeric_negate)
rat_polynom_simplify_def⊢ rat_polynom_simplify = EVAL_ringNorm$polynom_simplify (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_merge_def⊢ rat_r_canonical_sum_merge = EVAL_ringNorm$r_canonical_sum_merge (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_prod_def⊢ rat_r_canonical_sum_prod = EVAL_ringNorm$r_canonical_sum_prod (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_scalar2_def⊢ rat_r_canonical_sum_scalar2 = EVAL_ringNorm$r_canonical_sum_scalar2 (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_scalar3_def⊢ rat_r_canonical_sum_scalar3 = EVAL_ringNorm$r_canonical_sum_scalar3 (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_scalar_def⊢ rat_r_canonical_sum_scalar = EVAL_ringNorm$r_canonical_sum_scalar (ring 0 1 $+ $* numeric_negate)
rat_r_canonical_sum_simplify_def⊢ rat_r_canonical_sum_simplify = EVAL_ringNorm$r_canonical_sum_simplify (ring 0 1 $+ $* numeric_negate)
rat_r_ics_aux_def⊢ rat_r_ics_aux = EVAL_ringNorm$r_ics_aux (ring 0 1 $+ $* numeric_negate)
rat_r_interp_cs_def⊢ rat_r_interp_cs = EVAL_ringNorm$r_interp_cs (ring 0 1 $+ $* numeric_negate)
rat_r_interp_m_def⊢ rat_r_interp_m = EVAL_ringNorm$r_interp_m (ring 0 1 $+ $* numeric_negate)
rat_r_interp_sp_def⊢ rat_r_interp_sp = EVAL_ringNorm$r_interp_sp (ring 0 1 $+ $* numeric_negate)
rat_r_interp_vl_def⊢ rat_r_interp_vl = EVAL_ringNorm$r_interp_vl (ring 0 1 $+ $* numeric_negate)
rat_r_ivl_aux_def⊢ rat_r_ivl_aux = EVAL_ringNorm$r_ivl_aux (ring 0 1 $+ $* numeric_negate)
rat_r_monom_insert_def⊢ rat_r_monom_insert = EVAL_ringNorm$r_monom_insert (ring 0 1 $+ $* numeric_negate)
rat_r_spolynom_normalize_def⊢ rat_r_spolynom_normalize = EVAL_ringNorm$r_spolynom_normalize (ring 0 1 $+ $* numeric_negate)
rat_r_spolynom_simplify_def⊢ rat_r_spolynom_simplify = EVAL_ringNorm$r_spolynom_simplify (ring 0 1 $+ $* numeric_negate)
rat_r_varlist_insert_def⊢ rat_r_varlist_insert = EVAL_ringNorm$r_varlist_insert (ring 0 1 $+ $* numeric_negate)
⊢ is_ring (ring 0 1 $+ $* numeric_negate)
rat_ring_thms⊢ is_ring (ring 0 1 $+ $* numeric_negate) ∧
(∀vm p. rat_interp_p vm p = rat_r_interp_cs vm (rat_polynom_simplify p)) ∧
(((∀vm c. rat_interp_p vm (EVAL_ringNorm$Pconst c) = c) ∧
(∀vm i.
rat_interp_p vm (EVAL_ringNorm$Pvar i) = EVAL_quote$varmap_find i vm) ∧
(∀vm p1 p2.
rat_interp_p vm (EVAL_ringNorm$Pplus p1 p2) =
rat_interp_p vm p1 + rat_interp_p vm p2) ∧
(∀vm p1 p2.
rat_interp_p vm (EVAL_ringNorm$Pmult p1 p2) =
rat_interp_p vm p1 * rat_interp_p vm p2) ∧
∀vm p1. rat_interp_p vm (EVAL_ringNorm$Popp p1) = -rat_interp_p vm p1) ∧
(∀x v2 v1.
EVAL_quote$varmap_find EVAL_quote$End_idx
(EVAL_quote$Node_vm x v1 v2) =
x) ∧
(∀x v2 v1 i1.
EVAL_quote$varmap_find (EVAL_quote$Right_idx i1)
(EVAL_quote$Node_vm x v1 v2) =
EVAL_quote$varmap_find i1 v2) ∧
(∀x v2 v1 i1.
EVAL_quote$varmap_find (EVAL_quote$Left_idx i1)
(EVAL_quote$Node_vm x v1 v2) =
EVAL_quote$varmap_find i1 v1) ∧
∀i. EVAL_quote$varmap_find i EVAL_quote$Empty_vm = @x. T) ∧
((∀t2 t1 l2 l1 c2 c1.
rat_r_canonical_sum_merge (EVAL_canonical$Cons_monom c1 l1 t1)
(EVAL_canonical$Cons_monom c2 l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_monom c1 l1
(rat_r_canonical_sum_merge t1
(EVAL_canonical$Cons_monom c2 l2 t2)))
(EVAL_canonical$Cons_monom (c1 + c2) l1
(rat_r_canonical_sum_merge t1 t2))
(EVAL_canonical$Cons_monom c2 l2
(rat_r_canonical_sum_merge (EVAL_canonical$Cons_monom c1 l1 t1)
t2))) ∧
(∀t2 t1 l2 l1 c1.
rat_r_canonical_sum_merge (EVAL_canonical$Cons_monom c1 l1 t1)
(EVAL_canonical$Cons_varlist l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_monom c1 l1
(rat_r_canonical_sum_merge t1
(EVAL_canonical$Cons_varlist l2 t2)))
(EVAL_canonical$Cons_monom (c1 + 1) l1
(rat_r_canonical_sum_merge t1 t2))
(EVAL_canonical$Cons_varlist l2
(rat_r_canonical_sum_merge (EVAL_canonical$Cons_monom c1 l1 t1)
t2))) ∧
(∀t2 t1 l2 l1 c2.
rat_r_canonical_sum_merge (EVAL_canonical$Cons_varlist l1 t1)
(EVAL_canonical$Cons_monom c2 l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_varlist l1
(rat_r_canonical_sum_merge t1
(EVAL_canonical$Cons_monom c2 l2 t2)))
(EVAL_canonical$Cons_monom (1 + c2) l1
(rat_r_canonical_sum_merge t1 t2))
(EVAL_canonical$Cons_monom c2 l2
(rat_r_canonical_sum_merge (EVAL_canonical$Cons_varlist l1 t1)
t2))) ∧
(∀t2 t1 l2 l1.
rat_r_canonical_sum_merge (EVAL_canonical$Cons_varlist l1 t1)
(EVAL_canonical$Cons_varlist l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_varlist l1
(rat_r_canonical_sum_merge t1
(EVAL_canonical$Cons_varlist l2 t2)))
(EVAL_canonical$Cons_monom (1 + 1) l1
(rat_r_canonical_sum_merge t1 t2))
(EVAL_canonical$Cons_varlist l2
(rat_r_canonical_sum_merge (EVAL_canonical$Cons_varlist l1 t1)
t2))) ∧
(∀s1. rat_r_canonical_sum_merge s1 EVAL_canonical$Nil_monom = s1) ∧
(∀v6 v5 v4.
rat_r_canonical_sum_merge EVAL_canonical$Nil_monom
(EVAL_canonical$Cons_monom v4 v5 v6) =
EVAL_canonical$Cons_monom v4 v5 v6) ∧
∀v8 v7.
rat_r_canonical_sum_merge EVAL_canonical$Nil_monom
(EVAL_canonical$Cons_varlist v7 v8) =
EVAL_canonical$Cons_varlist v7 v8) ∧
((∀t2 l2 l1 c2 c1.
rat_r_monom_insert c1 l1 (EVAL_canonical$Cons_monom c2 l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_monom c1 l1
(EVAL_canonical$Cons_monom c2 l2 t2))
(EVAL_canonical$Cons_monom (c1 + c2) l1 t2)
(EVAL_canonical$Cons_monom c2 l2 (rat_r_monom_insert c1 l1 t2))) ∧
(∀t2 l2 l1 c1.
rat_r_monom_insert c1 l1 (EVAL_canonical$Cons_varlist l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_monom c1 l1
(EVAL_canonical$Cons_varlist l2 t2))
(EVAL_canonical$Cons_monom (c1 + 1) l1 t2)
(EVAL_canonical$Cons_varlist l2 (rat_r_monom_insert c1 l1 t2))) ∧
∀l1 c1.
rat_r_monom_insert c1 l1 EVAL_canonical$Nil_monom =
EVAL_canonical$Cons_monom c1 l1 EVAL_canonical$Nil_monom) ∧
((∀t2 l2 l1 c2.
rat_r_varlist_insert l1 (EVAL_canonical$Cons_monom c2 l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_varlist l1
(EVAL_canonical$Cons_monom c2 l2 t2))
(EVAL_canonical$Cons_monom (1 + c2) l1 t2)
(EVAL_canonical$Cons_monom c2 l2 (rat_r_varlist_insert l1 t2))) ∧
(∀t2 l2 l1.
rat_r_varlist_insert l1 (EVAL_canonical$Cons_varlist l2 t2) =
ternaryComparisons$ordering_CASE
(ternaryComparisons$list_compare EVAL_quote$index_compare l1 l2)
(EVAL_canonical$Cons_varlist l1 (EVAL_canonical$Cons_varlist l2 t2))
(EVAL_canonical$Cons_monom (1 + 1) l1 t2)
(EVAL_canonical$Cons_varlist l2 (rat_r_varlist_insert l1 t2))) ∧
∀l1.
rat_r_varlist_insert l1 EVAL_canonical$Nil_monom =
EVAL_canonical$Cons_varlist l1 EVAL_canonical$Nil_monom) ∧
((∀c0 c l t.
rat_r_canonical_sum_scalar c0 (EVAL_canonical$Cons_monom c l t) =
EVAL_canonical$Cons_monom (c0 * c) l
(rat_r_canonical_sum_scalar c0 t)) ∧
(∀c0 l t.
rat_r_canonical_sum_scalar c0 (EVAL_canonical$Cons_varlist l t) =
EVAL_canonical$Cons_monom c0 l (rat_r_canonical_sum_scalar c0 t)) ∧
∀c0.
rat_r_canonical_sum_scalar c0 EVAL_canonical$Nil_monom =
EVAL_canonical$Nil_monom) ∧
((∀l0 c l t.
rat_r_canonical_sum_scalar2 l0 (EVAL_canonical$Cons_monom c l t) =
rat_r_monom_insert c
(ternaryComparisons$list_merge EVAL_quote$index_lt l0 l)
(rat_r_canonical_sum_scalar2 l0 t)) ∧
(∀l0 l t.
rat_r_canonical_sum_scalar2 l0 (EVAL_canonical$Cons_varlist l t) =
rat_r_varlist_insert
(ternaryComparisons$list_merge EVAL_quote$index_lt l0 l)
(rat_r_canonical_sum_scalar2 l0 t)) ∧
∀l0.
rat_r_canonical_sum_scalar2 l0 EVAL_canonical$Nil_monom =
EVAL_canonical$Nil_monom) ∧
((∀c0 l0 c l t.
rat_r_canonical_sum_scalar3 c0 l0 (EVAL_canonical$Cons_monom c l t) =
rat_r_monom_insert (c0 * c)
(ternaryComparisons$list_merge EVAL_quote$index_lt l0 l)
(rat_r_canonical_sum_scalar3 c0 l0 t)) ∧
(∀c0 l0 l t.
rat_r_canonical_sum_scalar3 c0 l0 (EVAL_canonical$Cons_varlist l t) =
rat_r_monom_insert c0
(ternaryComparisons$list_merge EVAL_quote$index_lt l0 l)
(rat_r_canonical_sum_scalar3 c0 l0 t)) ∧
∀c0 l0.
rat_r_canonical_sum_scalar3 c0 l0 EVAL_canonical$Nil_monom =
EVAL_canonical$Nil_monom) ∧
((∀c1 l1 t1 s2.
rat_r_canonical_sum_prod (EVAL_canonical$Cons_monom c1 l1 t1) s2 =
rat_r_canonical_sum_merge (rat_r_canonical_sum_scalar3 c1 l1 s2)
(rat_r_canonical_sum_prod t1 s2)) ∧
(∀l1 t1 s2.
rat_r_canonical_sum_prod (EVAL_canonical$Cons_varlist l1 t1) s2 =
rat_r_canonical_sum_merge (rat_r_canonical_sum_scalar2 l1 s2)
(rat_r_canonical_sum_prod t1 s2)) ∧
∀s2.
rat_r_canonical_sum_prod EVAL_canonical$Nil_monom s2 =
EVAL_canonical$Nil_monom) ∧
((∀c l t.
rat_r_canonical_sum_simplify (EVAL_canonical$Cons_monom c l t) =
if c = 0 then rat_r_canonical_sum_simplify t
else if c = 1 then
EVAL_canonical$Cons_varlist l (rat_r_canonical_sum_simplify t)
else EVAL_canonical$Cons_monom c l (rat_r_canonical_sum_simplify t)) ∧
(∀l t.
rat_r_canonical_sum_simplify (EVAL_canonical$Cons_varlist l t) =
EVAL_canonical$Cons_varlist l (rat_r_canonical_sum_simplify t)) ∧
rat_r_canonical_sum_simplify EVAL_canonical$Nil_monom =
EVAL_canonical$Nil_monom) ∧
((∀vm x. rat_r_ivl_aux vm x [] = EVAL_quote$varmap_find x vm) ∧
∀vm x x' t'.
rat_r_ivl_aux vm x (x'::t') =
EVAL_quote$varmap_find x vm * rat_r_ivl_aux vm x' t') ∧
((∀vm. rat_r_interp_vl vm [] = 1) ∧
∀vm x t. rat_r_interp_vl vm (x::t) = rat_r_ivl_aux vm x t) ∧
((∀vm c. rat_r_interp_m vm c [] = c) ∧
∀vm c x t. rat_r_interp_m vm c (x::t) = c * rat_r_ivl_aux vm x t) ∧
((∀vm a. rat_r_ics_aux vm a EVAL_canonical$Nil_monom = a) ∧
(∀vm a l t.
rat_r_ics_aux vm a (EVAL_canonical$Cons_varlist l t) =
a + rat_r_ics_aux vm (rat_r_interp_vl vm l) t) ∧
∀vm a c l t.
rat_r_ics_aux vm a (EVAL_canonical$Cons_monom c l t) =
a + rat_r_ics_aux vm (rat_r_interp_m vm c l) t) ∧
((∀vm. rat_r_interp_cs vm EVAL_canonical$Nil_monom = 0) ∧
(∀vm l t.
rat_r_interp_cs vm (EVAL_canonical$Cons_varlist l t) =
rat_r_ics_aux vm (rat_r_interp_vl vm l) t) ∧
∀vm c l t.
rat_r_interp_cs vm (EVAL_canonical$Cons_monom c l t) =
rat_r_ics_aux vm (rat_r_interp_m vm c l) t) ∧
((∀i. rat_polynom_normalize (EVAL_ringNorm$Pvar i) =
EVAL_canonical$Cons_varlist [i] EVAL_canonical$Nil_monom) ∧
(∀c. rat_polynom_normalize (EVAL_ringNorm$Pconst c) =
EVAL_canonical$Cons_monom c [] EVAL_canonical$Nil_monom) ∧
(∀pl pr.
rat_polynom_normalize (EVAL_ringNorm$Pplus pl pr) =
rat_r_canonical_sum_merge (rat_polynom_normalize pl)
(rat_polynom_normalize pr)) ∧
(∀pl pr.
rat_polynom_normalize (EVAL_ringNorm$Pmult pl pr) =
rat_r_canonical_sum_prod (rat_polynom_normalize pl)
(rat_polynom_normalize pr)) ∧
∀p. rat_polynom_normalize (EVAL_ringNorm$Popp p) =
rat_r_canonical_sum_scalar3 (-1) [] (rat_polynom_normalize p)) ∧
∀x. rat_polynom_simplify x =
rat_r_canonical_sum_simplify (rat_polynom_normalize x)