Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Generalizable VariablesA B C R V f l n m Vlt.Import Quoting.Instances.Sectioncontent.Context `{DecidablePaths C}.Context `(phi : C -> R) `{AlmostRingPreserving C R phi}
`{!AlmostRing C} `{!AlmostRing R}.
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt'
eval phi (Quoting.merge R l l')
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R)) -> n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt'
eval phi (Quoting.merge R l l')
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R)) -> n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: eval phi (Quoting.merge R l l')
(toPol
(Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: eval phi (Quoting.merge R l l')
(toPol
(Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
Quoting.eval R (Quoting.merge R l l')
(Quoting.expr_map inl (Quoting.eqquote_l R)) =
Quoting.eval R (Quoting.merge R l l')
(Quoting.eqquote_r R)
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: eval phi (Quoting.merge R l l')
(toPol
(Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
eval phi (Quoting.merge R l l')
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R))) =
Quoting.eval R (Quoting.merge R l l')
(Quoting.eqquote_r R)
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: eval phi (Quoting.merge R l l')
(toPol
(Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
eval phi (Quoting.merge R l l')
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
exact E.Qed.
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt'
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R)) =?
toPol (Quoting.eqquote_r R)) = true -> n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt'
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R)) =?
toPol (Quoting.eqquote_r R)) = true -> n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: (toPol
(Quoting.expr_map inl (Quoting.eqquote_l R)) =?
toPol (Quoting.eqquote_r R)) = true
n = m
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 l: V -> R n, m: R V': Type0 l': V' -> R Q: Quoting.EqQuote R l n m l' Vlt: Relation V H1: Trichotomy Vlt Vlt': Relation V' H2: Trichotomy Vlt' E: (toPol
(Quoting.expr_map inl (Quoting.eqquote_l R)) =?
toPol (Quoting.eqquote_r R)) = true
eval phi (Quoting.merge R l l')
(toPol (Quoting.expr_map inl (Quoting.eqquote_l R))) =
eval phi (Quoting.merge R l l')
(toPol (Quoting.eqquote_r R))
apply eval_eqb,E.Qed.
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R
eval phi vs (toPol a) = eval phi vs (toPol b) ->
Quoting.eval R vs a = Quoting.eval R vs b
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R
eval phi vs (toPol a) = eval phi vs (toPol b) ->
Quoting.eval R vs a = Quoting.eval R vs b
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R
Quoting.eval R vs a = Quoting.eval R vs b ->
Quoting.eval R vs a = Quoting.eval R vs b
trivial.Qed.
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R
(toPol a =? toPol b) = true ->
Quoting.eval R vs a = Quoting.eval R vs b
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R
(toPol a =? toPol b) = true ->
Quoting.eval R vs a = Quoting.eval R vs b
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R X: (toPol a =? toPol b) = true
Quoting.eval R vs a = Quoting.eval R vs b
C: Type H: DecidablePaths C R: Type phi: C -> R Aplus: Plus C Bplus: Plus R Amult: Mult C Bmult: Mult R Azero: Zero C Bzero: Zero R Aone: One C Bone: One R Aneg: AlmostNegate C Bneg: AlmostNegate R H0: AlmostRingPreserving phi AlmostRing0: AlmostRing C AlmostRing1: AlmostRing R V: Type0 Vlt: Relation V H1: Trichotomy Vlt a, b: Quoting.Expr V vs: V -> R X: (toPol a =? toPol b) = true
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A H: IsSemiCRing A
AlmostRing A
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A H: IsSemiCRing A
AlmostRing A
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A H: IsSemiCRing A
forallx : A, almost_negate x = almost_negate 1 * x
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A H: IsSemiCRing A x: A
almost_negate x = almost_negate 1 * x
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A H: IsSemiCRing A x: A
0 = 0 * x
symmetry;apply mult_0_l.Qed.
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A
AlmostRing A
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A
AlmostRing A
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A
forallx : A, almost_negate x = almost_negate 1 * x
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A x: A
almost_negate x = almost_negate 1 * x
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A x: A
- x = -1 * x
apply negate_mult_l.Qed.
A, B: Type Aplus: Plus A Bplus: Plus B Amult: Mult A Bmult: Mult B Azero: Zero A Bzero: Zero B Aone: One A Bone: One B f: A -> B H: IsSemiRingPreserving f
AlmostRingPreserving f
A, B: Type Aplus: Plus A Bplus: Plus B Amult: Mult A Bmult: Mult B Azero: Zero A Bzero: Zero B Aone: One A Bone: One B f: A -> B H: IsSemiRingPreserving f
AlmostRingPreserving f
A, B: Type Aplus: Plus A Bplus: Plus B Amult: Mult A Bmult: Mult B Azero: Zero A Bzero: Zero B Aone: One A Bone: One B f: A -> B H: IsSemiRingPreserving f
forallx : A,
f (almost_negate x) = almost_negate (f x)
A, B: Type Aplus: Plus A Bplus: Plus B Amult: Mult A Bmult: Mult B Azero: Zero A Bzero: Zero B Aone: One A Bone: One B f: A -> B H: IsSemiRingPreserving f
A -> f 0 = 0
A, B: Type Aplus: Plus A Bplus: Plus B Amult: Mult A Bmult: Mult B Azero: Zero A Bzero: Zero B Aone: One A Bone: One B f: A -> B H: IsSemiRingPreserving f
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate0: Negate B H0: IsCRing B f: A -> B IsSemiRingPreserving0: IsSemiRingPreserving f
AlmostRingPreserving f
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate0: Negate B H0: IsCRing B f: A -> B IsSemiRingPreserving0: IsSemiRingPreserving f
AlmostRingPreserving f
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate0: Negate B H0: IsCRing B f: A -> B IsSemiRingPreserving0: IsSemiRingPreserving f
forallx : A,
f (almost_negate x) = almost_negate (f x)
A: Type Aplus: Plus A Amult: Mult A Azero: Zero A Aone: One A Anegate: Negate A H: IsCRing A B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate0: Negate B H0: IsCRing B f: A -> B IsSemiRingPreserving0: IsSemiRingPreserving f
forallx : A, f (- x) = - f x
exact preserves_negate.Qed.EndVarSec.Arguments normalize_eq {C _ R} phi
{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _} _.Arguments by_quoting {C _ R} phi
{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _} _.Ltacring_with_nat :=
match goal with
|- @paths ?R _ _ =>
((pose proof (_ : IsSemiCRing R)) || fail"target equality not on a semiring");
apply (by_quoting (naturals_to_semiring nat R));
reflexivityend.Ltacring_with_integers Z :=
match goal with
|- @paths ?R _ _ =>
((pose proof (_ : IsCRing R)) || fail"target equality not on a ring");
apply (by_quoting (integers_to_ring Z R));
reflexivityend.Ltacring_with_self :=
match goal with
|- @paths ?R _ _ =>
((pose proof (_ : IsSemiCRing R)) || fail"target equality not on a ring");
apply (by_quoting (@id R));
reflexivityend.Ltacring_repl a b :=
letHrw := fresh"Hrw"inassert (Hrw : a = b);[ring_with_nat|rewrite Hrw;clear Hrw].Tactic Notation"ring_replace"constr(x) "with"constr(y) := ring_repl x y.