Library mathcomp.algebra.countalg
(* (c) Copyright 2006-2016 Microsoft Corporation and Inria.
Distributed under the terms of CeCILL-B. *)
From HB Require Import structures.
From mathcomp Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq choice.
From mathcomp Require Import fintype bigop ssralg.
Distributed under the terms of CeCILL-B. *)
From HB Require Import structures.
From mathcomp Require Import ssreflect ssrfun ssrbool eqtype ssrnat seq choice.
From mathcomp Require Import fintype bigop ssralg.
From mathcomp Require Import generic_quotient ring_quotient.
This file clones part of ssralg hierachy for countable types; it does not
cover the left module / algebra interfaces, providing only
countZmodType == countable zmodType interface.
countRingType == countable ringType interface.
countComRingType == countable comRingType interface.
countUnitRingType == countable unitRingType interface.
countComUnitRingType == countable comUnitRingType interface.
countIdomainType == countable idomainType interface.
countFieldType == countable fieldType interface.
countDecFieldType == countable decFieldType interface.
countClosedFieldType == countable closedFieldType interface.
The interface cloning syntax is extended to these structures
[countZmodType of M] == countZmodType structure for an M that has both
zmodType and countType structures.
... etc
This file provides constructions for both simple extension and algebraic
closure of countable fields.
Set Implicit Arguments.
Local Open Scope ring_scope.
Import GRing.Theory CodeSeq.
Module CountRing.
Import GRing.Theory.
#[short(type="countZmodType")]
HB.structure Definition Zmodule := {M of GRing.Zmodule M & Countable M}.
Module ZmoduleExports.
Notation "[ 'countZmodType' 'of' T ]" := (Zmodule.clone T%type _)
(at level 0, format "[ 'countZmodType' 'of' T ]") : form_scope.
End ZmoduleExports.
#[short(type="countRingType")]
HB.structure Definition Ring := {R of GRing.Ring R & Countable R}.
Module RingExports.
Notation "[ 'countRingType' 'of' T ]" :=
(Ring.clone T%type _) (* NB: was (do_pack pack T) *)
(at level 0, format "[ 'countRingType' 'of' T ]") : form_scope.
End RingExports.
#[short(type="countComRingType")]
HB.structure Definition ComRing := {R of GRing.ComRing R & Countable R}.
Module ComRingExports.
Notation "[ 'countComRingType' 'of' T ]" := (ComRing.clone T%type _)
(at level 0, format "[ 'countComRingType' 'of' T ]") : form_scope.
End ComRingExports.
#[short(type="countUnitRingType")]
HB.structure Definition UnitRing := {R of GRing.UnitRing R & Countable R}.
Module UnitRingExports.
Notation countUnitRingType := UnitRing.type.
Notation "[ 'countUnitRingType' 'of' T ]" := (UnitRing.clone T%type _)
(at level 0, format "[ 'countUnitRingType' 'of' T ]") : form_scope.
End UnitRingExports.
#[short(type="countComUnitRingType")]
HB.structure Definition ComUnitRing := {R of GRing.ComUnitRing R & Countable R}.
Module ComUnitRingExports.
Notation "[ 'countComUnitRingType' 'of' T ]" := (ComUnitRing.clone T%type _)
(at level 0, format "[ 'countComUnitRingType' 'of' T ]") : form_scope.
End ComUnitRingExports.
#[short(type="countIdomainType")]
HB.structure Definition IntegralDomain :=
{R of GRing.IntegralDomain R & Countable R}.
Module IntegralDomainExports.
Notation "[ 'countIdomainType' 'of' T ]" := (IntegralDomain.clone T%type _)
(at level 0, format "[ 'countIdomainType' 'of' T ]") : form_scope.
End IntegralDomainExports.
#[short(type="countFieldType")]
HB.structure Definition Field := {R of GRing.Field R & Countable R}.
Module FieldExports.
Notation "[ 'countFieldType' 'of' T ]" := (Field.clone T%type _) (*(do_pack pack T)*)
(at level 0, format "[ 'countFieldType' 'of' T ]") : form_scope.
End FieldExports.
#[short(type="countDecFieldType")]
HB.structure Definition DecidableField :=
{R of GRing.DecidableField R & Countable R}.
Module DecidableFieldExports.
Notation "[ 'countDecFieldType' 'of' T ]" := (DecidableField.clone T%type _)
(at level 0, format "[ 'countDecFieldType' 'of' T ]") : form_scope.
End DecidableFieldExports.
#[short(type="countClosedFieldType")]
HB.structure Definition ClosedField := {R of GRing.ClosedField R & Countable R}.
Module ClosedFieldExports.
Notation "[ 'countClosedFieldType' 'of' T ]" := (ClosedField.clone T%type _)
(at level 0, format "[ 'countClosedFieldType' 'of' T ]") : form_scope.
End ClosedFieldExports.
#[export]
HB.instance Definition _ (R : countZmodType) := Zmodule.on R^o.
#[export]
HB.instance Definition _ (R : countRingType) := Ring.on R^o.
End CountRing.
Import CountRing.