Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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. Module SemiRings. Class Operations := operations : sig (fun T => Plus T * Mult T * Zero T * One T)%type. Definition BuildOperations (T : Type) `{Plus T} `{Mult T} `{Zero T} `{One T} : Operations := exist _ T (plus,mult,zero,one). Coercion SR_carrier (s : Operations) : Type := s.1. Global Instance SR_plus (s : Operations) : Plus s := fst (fst (fst s.2)). Global Instance SR_mult (s : Operations) : Mult s := snd (fst (fst s.2)). Global Instance SR_zero (s : Operations) : Zero s := snd (fst s.2). Global Instance SR_one (s : Operations) : One s := snd s.2. Arguments SR_plus !_ / _ _. Arguments SR_mult !_ / _ _. Arguments SR_zero !_ /. Arguments SR_one !_ /. Section contents. Universe U V. Context `{Funext} `{Univalence}. Context (A B : 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 (fun T : 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 (fun T : 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 (fun T : 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 (fun T : 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 (fun A : Type => A -> A -> A) (path_universe f) plus, transport (fun A : 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
apply 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
apply preserves_1. Qed.
H: Funext
H0: Univalence
A, B: Operations
f: A -> B
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f

forall P : Operations -> Type, P A -> P B
H: Funext
H0: Univalence
A, B: Operations
f: A -> B
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f

forall P : 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. End contents. End SemiRings. Module Rings. Class Operations := operations : sig (fun T => Plus T * Mult T * Zero T * One T * Negate T)%type. Definition BuildOperations (T : Type) `{Plus T} `{Mult T} `{Zero T} `{One T} `{Negate T} : Operations := exist _ T (plus,mult,zero,one,negate). Coercion R_carrier (s : Operations) : Type := s.1. Global Instance R_plus (s : Operations) : Plus s := fst (fst (fst (fst s.2))). Global Instance R_mult (s : Operations) : Mult s := snd (fst (fst (fst s.2))). Global Instance R_zero (s : Operations) : Zero s := snd (fst (fst s.2)). Global Instance R_one (s : Operations) : One s := snd (fst s.2). Global Instance R_negate (s : Operations) : Negate s := snd s.2. Arguments R_plus !_ / _ _. Arguments R_mult !_ / _ _. Arguments R_zero !_ /. Arguments R_one !_ /. Arguments R_negate !_ / _. Section contents. Universe U V. Context `{Funext} `{Univalence}. Context (A B : 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 (fun T : 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 (fun T : 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 (fun T : 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 (fun T : 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 (fun A : Type => A -> A -> A) (path_universe f) plus, transport (fun A : Type => A -> A -> A) (path_universe f) mult, transport idmap (path_universe f) 0, transport idmap (path_universe f) 1, transport (fun A : 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
apply 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
apply 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

forall P : 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

forall P : 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. End contents. End Rings.