# Library structures

Require Import algebra.

# Natural Numbers

Inductive NatStruct : Type := mk_NatStruct :
forall R : Type,
forall o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall l : R -> R -> Prop,
commutative R p ->
associative R p ->
commutative R m ->
associative R m ->
identity_l R o m ->
distributes R p m ->
irreflexive R l ->
transitive R l ->
trichotomy R l ->
less_plus_2 R p l ->
less_mult_2 R m l ->
eq_plus_injective R p ->
plus_irreflexive R p ->
inductionaxiom R o p ->
NatStruct.

Inductive NatStruct' : Type := mk_NatStruct' :
forall R : Type,
forall o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall le : R -> R -> Prop,
commutative R p ->
associative R p ->
commutative R m ->
associative R m ->
identity_l R o m ->
distributes R p m ->
linear R le ->
transitive R le ->
antisymmetric R le ->
less_plus_2 R p le ->
less_mult_2 R m le ->
NaturalNumbers_minimal R o p m ->
NatStruct'.

# Integers

Inductive IntegerStruct : Type :=
mk_IntegerStruct :
forall R : Type,
forall z o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall n : R -> R,
forall le : R -> R -> Prop,
commutative R p ->
associative R p ->
identity_l R z p ->
inverse_l R z p n ->
commutative R m ->
associative R m ->
identity_l R o m ->
distributes R p m ->
linear R le ->
transitive R le ->
antisymmetric R le ->
less_plus_2 R p le ->
less_mult_2 R m le ->
Integer_minimal R z o p n ->
IntegerStruct.

# Positive Rational Numbers

Inductive PositiveRationalStruct : Type :=
mk_PositiveRationalStruct :
forall R : Type,
forall o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall r : R -> R,
forall l : R -> R -> Prop,
commutative R p ->
associative R p ->
commutative R m ->
associative R m ->
identity_l R o m ->
inverse_l R o m r ->
distributes R p m ->
trichotomy R l ->
transitive R l ->
irreflexive R l ->
less_plus_2 R p l ->
less_mult_2 R m l ->
dense R l ->
noendp_l R l ->
noendp_r R l ->
PositiveRational_minimal R o p m r ->
PositiveRationalStruct.

Inductive PositiveRationalStruct' : Type :=
mk_PositiveRationalStruct' :
forall R : Type,
forall o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall r : R -> R,
forall le : R -> R -> Prop,
commutative R p ->
associative R p ->
commutative R m ->
associative R m ->
identity_l R o m ->
inverse_l R o m r ->
distributes R p m ->
linear R le ->
transitive R le ->
antisymmetric R le ->
less_plus_2 R p le ->
less_mult_2 R m le ->
PositiveRational_minimal R o p m r ->
PositiveRationalStruct'.

# Rational Numbers

Inductive RationalStruct : Type :=
mk_RationalStruct :
forall R : Type,
forall z o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall n : R -> R,
forall r : R -> R,
forall le : R -> R -> Prop,
commutative R p ->
associative R p ->
identity_l R z p ->
inverse_l R z p n ->
commutative R m ->
associative R m ->
identity_l R o m ->
inverse_exception_l R z o m r ->
distributes R p m ->
linear R le ->
transitive R le ->
antisymmetric R le ->
less_plus_2 R p le ->
less_mult R z m le ->
Rational_minimal R z o p m n r ->
RationalStruct.

# Real Numbers

## Harrison's Axioms for the Reals

Axioms from Section 2.1 of John Harrison's _Theorem Proving with the Real Numbers_
Inductive RealStructJH : Type :=
mk_RealStructJH :
forall R : Type,
forall z o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall n : R -> R,
forall r : R -> R,
forall l : R -> R -> Prop,
zero_not_one R z o ->
commutative R p ->
associative R p ->
identity_l R z p ->
inverse_l R z p n ->
commutative R m ->
associative R m ->
identity_l R o m ->
inverse_exception_l R z o m r ->
distributes R p m ->
trichotomy R l ->
transitive R l ->
irreflexive R l ->
less_plus_1 R p l ->
less_mult_pos R o m l ->
HAsupremum R l ->
RealStructJH.

## Dieudonne's Axioms for the Reals - Page 16 Fondements de l'analyse moderne

Inductive RealStructJD : Type :=
mk_RealStructJD :
forall R : Type,
forall z o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall le : R -> R -> Prop,
commutative R p ->
associative R p ->
identity_l R z p ->
exist_inv_l R z p ->
commutative R m ->
associative R m ->
zero_not_one R z o ->
identity_l R o m ->
exist_inv_l_ex R z o m ->
distributes R p m ->
transitive R le ->
antisymmetric R le ->
linear R le ->
less_plus_1 R p le ->
less_mult_pos R o m le ->
JDarchimedean R z p le ->
JDnestedIntervals R le ->
RealStructJD.

## Axiom System A'

Section 61 of Alfred Tarski's _Introduction to Logic and to the Methodology of Deductive Sciences_ 1994 Edited by Jan Tarski.

Inductive RealStructTA' : Type :=
mk_RealStructTA' :
forall R : Type,
forall o : R,
forall p : R -> R -> R,
forall l : R -> R -> Prop,
trichotomy R l ->
asymmetric R l ->
dense R l ->
TAcompleteness R l ->
ac_twist R p ->
exist_solns_1 R p ->
less_plus R p l ->

one_less_two R o p l ->
RealStructTA'.

## Axiom System A''

Section 63 of Alfred Tarski's _Introduction to Logic and to the Methodology of Deductive Sciences_ 1994 Edited by Jan Tarski. This is said to be similar to Hilbert's 1900 axiomatization.

Inductive RealStructTA'' : Type :=
mk_RealStructTA'' :
forall R : Type,
forall z o : R,
forall p : R -> R -> R, forall m : R -> R -> R,
forall l : R -> R -> Prop,
trichotomy R l ->
asymmetric R l ->
transitive R l ->
TAcompleteness R l ->

commutative R p ->
associative R p ->
exist_solns_1 R p ->
less_plus_1 R p l ->

identity_r R z p ->

commutative R m ->
associative R m ->
exist_solns_2 R z m ->
less_mult R z m l ->
distributes R p m ->

identity_r R o m ->
zero_not_one R z o ->
RealStructTA''.