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]
Require Export
HoTT.Classes.interfaces.abstract_algebra.Require Import HoTT.Classes.theory.rings.ModuleSemiRings.ClassOperations
:= operations : sig (funT => Plus T * Mult T * Zero T * One T)%type.DefinitionBuildOperations (T : Type) `{Plus T} `{Mult T} `{Zero T} `{One T}
: Operations
:= exist _ T (plus,mult,zero,one).CoercionSR_carrier (s : Operations) : Type := s.1.#[export] InstanceSR_plus (s : Operations) : Plus s := fst (fst (fst s.2)).#[export] InstanceSR_mult (s : Operations) : Mult s := snd (fst (fst s.2)).#[export] InstanceSR_zero (s : Operations) : Zero s := snd (fst s.2).#[export] InstanceSR_one (s : Operations) : One s := snd s.2.Arguments SR_plus !_ / _ _.Arguments SR_mult !_ / _ _.Arguments SR_zero !_ /.Arguments SR_one !_ /.Sectioncontents.UniverseU V.Context `{Funext} `{Univalence}.Context (AB : Operations@{U V}).Context (f : A -> B) `{!IsEquiv f} `{!IsSemiRingPreserving f}.
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
A = B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
A = B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
{p : A.1 = B.1 &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T)%type) p A.2 =
B.2}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
{p : TA = TB &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T)%type) p
(plA, mlA, zA, uA) = (plB, mlB, zB, uB)}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
{p : TA = TB &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T)%type) p
(plus, mult, 0, 1) = (plus, mult, 0, 1)}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T)%type)
(path_universe f) (plus, mult, 0, 1) =
(plus, mult, 0, 1)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
(transport Plus (path_universe f) plus,
transport Mult (path_universe f) mult,
transport Zero (path_universe f) 0,
transport One (path_universe f) 1) =
(plus, mult, 0, 1)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
(transport (funA : Type => A -> A -> A)
(path_universe f) plus,
transport (funA : Type => A -> A -> A)
(path_universe f) mult,
transport idmap (path_universe f) 0,
transport idmap (path_universe f) 1) =
(plus, mult, 0, 1)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x + f^-1 y) = x + y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x * f^-1 y) = x * y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
f 0 = 0
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
f 1 = 1
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x + f^-1 y) = x + y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x) + f (f^-1 y) = x + y
apply ap011;apply eisretr.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x * f^-1 y) = x * y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x) * f (f^-1 y) = x * y
apply ap011;apply eisretr.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
f 0 = 0
exact preserves_0.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB f: TA -> TB IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
f 1 = 1
exact preserves_1.Qed.
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
forallP : Operations -> Type, P A -> P B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f
forallP : Operations -> Type, P A -> P B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f P: Operations -> Type
A = B
(* Coq pre 8.8 produces phantom universes, see GitHub Coq/Coq#1033. *)first [exact iso_same_semirings|exact iso_same_semirings@{V V}].Qed.Endcontents.EndSemiRings.ModuleRings.ClassOperations
:= operations : sig (funT => Plus T * Mult T * Zero T * One T * Negate T)%type.DefinitionBuildOperations (T : Type)
`{Plus T} `{Mult T} `{Zero T} `{One T} `{Negate T}
: Operations
:= exist _ T (plus,mult,zero,one,negate).CoercionR_carrier (s : Operations) : Type := s.1.#[export] InstanceR_plus (s : Operations) : Plus s := fst (fst (fst (fst s.2))).#[export] InstanceR_mult (s : Operations) : Mult s := snd (fst (fst (fst s.2))).#[export] InstanceR_zero (s : Operations) : Zero s := snd (fst (fst s.2)).#[export] InstanceR_one (s : Operations) : One s := snd (fst s.2).#[export] InstanceR_negate (s : Operations) : Negate s := snd s.2.Arguments R_plus !_ / _ _.Arguments R_mult !_ / _ _.Arguments R_zero !_ /.Arguments R_one !_ /.Arguments R_negate !_ / _.Sectioncontents.UniverseU V.Context `{Funext} `{Univalence}.Context (AB : Operations@{U V}).(* NB: we need to know they're rings for preserves_negate *)Context (f : A -> B) `{!IsEquiv f} `{!IsCRing A} `{!IsCRing B} `{!IsSemiRingPreserving f}.
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f
A = B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f
A = B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f
{p : A.1 = B.1 &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T * Negate T)%type)
p A.2 = B.2}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
{p : TA = TB &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T * Negate T)%type)
p (plA, mlA, zA, uA, nA) = (plB, mlB, zB, uB, nB)}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
{p : TA = TB &
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T * Negate T)%type)
p (plus, mult, 0, 1, negate) =
(plus, mult, 0, 1, negate)}
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
transport
(funT : Type =>
(Plus T * Mult T * Zero T * One T * Negate T)%type)
(path_universe f) (plus, mult, 0, 1, negate) =
(plus, mult, 0, 1, negate)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
(transport Plus (path_universe f) plus,
transport Mult (path_universe f) mult,
transport Zero (path_universe f) 0,
transport One (path_universe f) 1,
transport Negate (path_universe f) negate) =
(plus, mult, 0, 1, negate)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
(transport (funA : Type => A -> A -> A)
(path_universe f) plus,
transport (funA : Type => A -> A -> A)
(path_universe f) mult,
transport idmap (path_universe f) 0,
transport idmap (path_universe f) 1,
transport (funA : Type => A -> A) (path_universe f)
negate) = (plus, mult, 0, 1, negate)
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x + f^-1 y) = x + y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x * f^-1 y) = x * y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
f 0 = 0
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
f 1 = 1
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x: TB
f (- f^-1 x) = - x
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x + f^-1 y) = x + y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x) + f (f^-1 y) = x + y
apply ap011;apply eisretr.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x * f^-1 y) = x * y
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x, y: TB
f (f^-1 x) * f (f^-1 y) = x * y
apply ap011;apply eisretr.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
f 0 = 0
exact preserves_0.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f
f 1 = 1
exact preserves_1.
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x: TB
f (- f^-1 x) = - x
H: Funext H0: Univalence A, B: Operations TA: Type plA: Plus TA mlA: Mult TA zA: Zero TA uA: One TA nA: Negate TA TB: Type plB: Plus TB mlB: Mult TB zB: Zero TB uB: One TB nB: Negate TB f: TA -> TB IsEquiv0: IsEquiv f IsCRing0: IsCRing TA IsCRing1: IsCRing TB IsSemiRingPreserving0: IsSemiRingPreserving f x: TB
- f (f^-1 x) = - x
apply ap,eisretr.Qed.
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f
forallP : Operations -> Type, P A -> P B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f
forallP : Operations -> Type, P A -> P B
H: Funext H0: Univalence A, B: Operations f: A -> B IsEquiv0: IsEquiv f IsCRing0: IsCRing A IsCRing1: IsCRing B IsSemiRingPreserving0: IsSemiRingPreserving f P: Operations -> Type
A = B
(* Coq pre 8.8 produces phantom universes, see GitHub Coq/Coq#1033. *)first [exact iso_same_rings|exact iso_same_rings@{V V}].Qed.Endcontents.EndRings.