Rational hitting lists: evaluation #
Basic properties of the partial evaluation of rational formulas: values are unique, they are transported along ring homomorphisms, and they lift back along homomorphisms reflecting units.
Main results #
Cslib.Circuits.Rational.Formula.Eval.unique: a formula has at most one value.Cslib.Circuits.Rational.Formula.Eval.map: values are mapped by ring homomorphisms.Cslib.Circuits.Rational.Formula.Eval.lift: values lift along homomorphisms reflecting units.Cslib.Circuits.Rational.Formula.Eval.unit_of_division_lift: a nonzero value mapped out of a division ring is a unit.
References #
theorem Cslib.Circuits.Rational.Formula.Eval.lift {n : ℕ} {R : Type u_1} {S : Type u_2} [Ring R] [Ring S] (f : R →+* S) (hf : ∀ (x : R), IsUnit (f x) → IsUnit x) {c : ℚ →+* R} {X : Fin n → R} {h : Formula n} {a : S} (ha : Eval (f.comp c) (fun (i : Fin n) => f (X i)) h a) :
Defined evaluations lift through a homomorphism reflecting units. In particular this handles every inverse occurrence before considering the root.
theorem Cslib.Circuits.Rational.Formula.Eval.unit_of_division_lift {n : ℕ} {R : Type u_1} [Ring R] {D : Type u_3} [DivisionRing D] [Nontrivial R] (f : D →+* R) {c : ℚ →+* D} {X : Fin n → D} {h : Formula n} {a : R} (ha : Eval (f.comp c) (fun (i : Fin n) => f (X i)) h a) (ha0 : a ≠ 0) :
IsUnit a
Mapping a defined nonzero value out of a division ring makes it a unit. This is used after the partial-specialization domain proof, not instead of it.