-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
wrapper mixin step0 #370
Draft
ptorrx
wants to merge
64
commits into
math-comp:master
Choose a base branch
from
ptorrx:wrapper
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
wrapper mixin step0 #370
Changes from 16 commits
Commits
Show all changes
64 commits
Select commit
Hold shift + click to select a range
6f1dee6
test for step 0 of CoREACT
gares 1ceb6ea
update
gares f6c1970
more
gares 17d6561
more
gares d2bc00f
Update tests/monoid_enriched_cat.v
CohenCyril 6726472
Update tests/monoid_enriched_cat.v
CohenCyril 0821793
Update tests/monoid_enriched_cat.v
CohenCyril 234e3f5
Update tests/monoid_enriched_cat.v
CohenCyril 92e1f68
Update tests/monoid_enriched_cat.v
CohenCyril b7f3789
Update tests/monoid_enriched_cat.v
CohenCyril 80e17f2
added enriched_cat.v
ptorrx 314c6b9
copied Cyril's monoid_enriched_cat.v to enriched_cat.v
ptorrx 67526eb
added monoid_enriched_cat.v as the original pull request by Cyril, in…
ptorrx a3bcee5
add enriched_cat to _CoqProject
ptorrx f472ce6
changes to enriched_cat.v
ptorrx b3ba8c1
changes related to monoid_enriched_cat.v and wrappers in various file…
ptorrx 9f0bde5
change to enriched_cat.v
ptorrx 056f6e0
minor changes
ptorrx b78c77c
added Elpi code in monoid_enriched_cat.v
ptorrx 0d0e9b7
changes in monoid_enriched_cat.v
ptorrx b6b8278
added improved version of extraction predicates in monoid_enriched_cat.v
ptorrx 145aa0d
minor changes in monoid_enriched_cat.v
ptorrx 8d0310e
moved Elpi code from monoid_enriched_cat.v to factory.v. monoid-enric…
ptorrx 0b2b79f
minor changes in monoid_enriched_cat.v
ptorrx 7fbd129
added instance in monoid_enriched_cat.v
ptorrx 5ded009
added some tests to monoid_enriched_cat.v
ptorrx 2ea2be6
pseudo-code to add new instances for each wrapper mixin
CohenCyril 2fccea4
added some comment
ptorrx 1ffc93d
tentative changes in structure.elpi (reexport-wrapper-as-instance is …
ptorrx d9c7980
changes in structure.elpi and monoid_enriched_cat.v - compiles
ptorrx 7158c54
added comments in structure.elpi
ptorrx 7ec530a
changes in structure.elpi, to prepare the derivation of the wrapper i…
ptorrx 7e83bd9
added comments in structure.elpi
ptorrx 40eef02
tentative changes to structure.elpi
ptorrx a26cf4b
changes in structure.elpi - mainly comments
ptorrx 09b0222
changes in structure.elpi - mainly comments
ptorrx e5f56a1
main changes in instance.elpi
ptorrx 36dc631
added commments in instance.elpi
ptorrx b46a369
minor changes in monoid_enriched_cat.v (wrapper instance definition n…
ptorrx d93a11d
Update tests/monoid_enriched_cat.v
ptorrx e4c3732
added summary of today's discussion at the bottom of instance.elpi
ptorrx 8c30d1a
Merge remote-tracking branch 'origin/wrapper' into wrapper
ptorrx 911ede1
setup nix
CohenCyril 4e47908
blind attempt
CohenCyril 3d0961c
minor changes to comments in instance.elpi
ptorrx 314dadc
added debug printouts
ptorrx 5f18ee4
revised comments and printouts, minor change in structure.elpi to nam…
ptorrx ce51cc4
Switched to tentive version of add-all-mixins with extra parameter. B…
ptorrx 641d35d
gone back to old add-all-mixins (without std.forall), revised comment…
ptorrx 6bdfd59
gone back to old add-all-mixins (without std.forall), revised comment…
ptorrx 790ca44
added predicates to handle cumulative output over forall, avoiding du…
ptorrx f0975bb
added redirect-instances (instances.elpi), in progress
ptorrx 73e614b
instance.elpi, redirect-instances - in progress (section problem)
ptorrx ab87dd8
instance.elpi, redirect-instances - in progress (section problem)
ptorrx 11baf58
instance.elpi: redirect-instances in progress, still need to add call…
ptorrx 8e22bb3
instance.elpi: redirect-instances in progress, added call to declare-…
ptorrx 3dbe65e
instance.elpi: redirect-instances in progress, added call to declare-…
ptorrx e7361bf
more comments in instance.elpi, added lemma in enriched_cat.v and fac…
ptorrx 9d80cdf
enriched_cat.v: minor changes
ptorrx 7835883
enriched_cat.v: minor changes
ptorrx f8da435
test commit, minor changes
ptorrx 2338a1f
adding examples in cmon_enriched_cat.v
ptorrx 7907b7f
updated cmonoid_enriched_cat.v with new examples; some problems
ptorrx ce88b3d
updated cmon_enriched_cat.v - now the file contains three examples; c…
ptorrx File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
(* testing enriched categories *) | ||
|
||
From HB Require Import structures. | ||
From Coq Require Import ssreflect ssrfun. | ||
|
||
HB.mixin Record isQuiver (Obj: Type) : Type := { hom : Obj -> Obj -> Type }. | ||
|
||
HB.structure Definition Quiver : Type := { Obj of isQuiver Obj }. | ||
|
||
HB.mixin Record isMon (A: Type) : Type := { | ||
zero : A; | ||
add : A -> A -> A; | ||
addrA : associative add; | ||
add0r : left_id zero add; | ||
addr0 : right_id zero add; | ||
}. | ||
|
||
HB.structure | ||
Definition Monoid : Type := { A of isMon A }. | ||
|
||
(* original wrapper *) | ||
HB.mixin Record hom_isMon T of Quiver T := | ||
{ private : forall A B, isMon (@hom T A B) }. | ||
|
||
(* just an abbreviation with a parameter for homset *) | ||
Definition hom_isMon_ty {T} (H: T -> T -> Type) (A B: T) : | ||
Type := isMon (H A B). | ||
|
||
(* write two versions of Monoid_enriched_quiver: one using hom_isMon | ||
(a mixin, hence a record), the other one using hom_isMon_ty as naked | ||
field type. The former corresponds to the wrapped version, the latter | ||
to the intuitive, wrapper-less version. Now the latter should agree | ||
with the former... (broadly corresponding to 2?) *) | ||
|
||
(* alternative wrapper definition *) | ||
HB.mixin Record hom_isMon1 T of Quiver T := | ||
{ private : forall A B, hom_isMon_ty (@hom (Quiver.clone T _)) A B }. | ||
|
||
(* abbreviation with parameters for homset and monoid *) | ||
Definition hom_isM_ty {T} (H: T -> T -> Type) (M: Type -> Type) (A B: T) : | ||
Type := M (H A B). | ||
|
||
(* three parameter relation *) | ||
Definition wrapper_spec {T} (H: T -> T -> Type) (M HM: Type -> Type) : | ||
Prop := HM T = forall A B, hom_isM_ty H M A B. | ||
|
||
(* one more wrapper definition (no real change) *) | ||
HB.mixin Record hom_isMon2 T of Quiver T := | ||
{ private : forall A B, hom_isM_ty (@hom (Quiver.clone T _)) | ||
(fun X => isMon X) | ||
A B }. | ||
|
||
(* trying parametric definition however doesn't work *) | ||
Fail HB.mixin Record hom_isM2 T (M: Type -> Type) of Quiver T := | ||
{ private : forall (A B: T), @hom_isM_ty T (@hom (Quiver.clone T _)) | ||
M | ||
A B }. | ||
|
||
(* structure based on one of the wrappers *) | ||
HB.structure Definition Monoid_enriched_quiver := | ||
{ Obj of isQuiver Obj & hom_isMon2 Obj }. | ||
|
||
(******************) | ||
|
||
(* unique projection from the wrapper *) | ||
HB.instance Definition _ (T : Monoid_enriched_quiver.type) (A B : T) : | ||
isMon (@hom T A B) := @private T A B. | ||
|
||
(* quiver instance (simply typed functions between two types) *) | ||
HB.instance Definition funQ := isQuiver.Build Type (fun A B => A -> B). | ||
|
||
(* prove that for every two types the quiver is a monoid *) | ||
Lemma funQ_isMonF (A B: Type) : isMon (A -> B). | ||
Admitted. | ||
|
||
(* use the lemma to instantiate isMon *) | ||
HB.instance Definition funQ_isMon (A B: Type) : isMon (A -> B) := | ||
funQ_isMonF A B. | ||
|
||
(* use the generic isMon instance to instantiate 'private' *) | ||
HB.instance Definition funQ_hom_isMon := | ||
hom_isMon2.Build Type (fun A B => funQ_isMon A B). | ||
|
||
(* HB.instance Definition _ := Monoid_enriched_quiver.Build ... *) | ||
|
||
(********************) | ||
|
||
(* without HB *) | ||
Record isQuiverS (Obj: Type) : Type := { homS : Obj -> Obj -> Type }. | ||
|
||
(* structure without wrapper and out of HB, trivially type-checks *) | ||
Structure Monoid_enriched_quiverN := { | ||
ObjN: Type; | ||
iQ: isQuiverS ObjN; | ||
hsM: forall A B, hom_isM_ty (homS ObjN iQ) | ||
(fun X => isMon X) A B }. | ||
|
||
(* but mixing with HB doesn't work *) | ||
Fail Record Monoid_enriched_quiverN1 := { | ||
ObjN: Type; | ||
iQ: isQuiver ObjN; | ||
hsM: forall A B, hom_isM_ty (@hom iQ) | ||
(fun X => isMon X) A B }. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
From HB Require Import structures. | ||
From Coq Require Import ssreflect ssrfun. | ||
|
||
HB.mixin Record isQuiver Obj := { hom : Obj -> Obj -> Type }. | ||
|
||
HB.structure Definition Quiver := { Obj of isQuiver Obj }. | ||
|
||
HB.mixin Record isMon A := { | ||
zero : A; | ||
add : A -> A -> A; | ||
addrA : associative add; | ||
add0r : left_id zero add; | ||
addr0 : right_id zero add; | ||
}. | ||
|
||
HB.structure | ||
Definition Monoid := { A of isMon A }. | ||
|
||
Fail HB.structure | ||
Definition Monoid_enriched_quiver := | ||
{ Obj of isQuiver Obj & | ||
(forall A B : Obj, isMon (@hom (Quiver.clone Obj _) A B)) }. | ||
|
||
|
||
(* Step 0: define a wrapper predicate in coq-elpi *) | ||
(* 5 lines of documentation + 1 line of elpi code in structure.v | ||
`pred wrapper-mixin o:mixinname, o:gref, o:mixinname` | ||
*) | ||
(* Step 1: add a wrapper attribute to declare wrappers, | ||
they should index: | ||
- the wrapped mixin (`isMon`) | ||
- the wrapper mixin (`hom_isMon`) | ||
- the new subject (`hom`) | ||
This attribute will add an entry in the `wrapper-mixin` database. | ||
As an addition substep, we should check that the wrapper has | ||
exactly one field, which is the wrapped mixin. | ||
*) | ||
|
||
(* added wrapper attribute in coq-builtin.elpi. | ||
added pred wrapper-mixin in structures.v. | ||
added conditional rule for wrapper-mixin in factory.elpi. | ||
tentative use of factory-alias->gref, but the parameters | ||
aren't right yet -- see HB.structure.html. | ||
*) | ||
#[wrapper] | ||
HB.mixin Record hom_isMon T of Quiver T := | ||
{ private : forall A B, isMon (@hom T A B) }. | ||
|
||
Elpi Print HB.structure. | ||
|
||
stop. | ||
|
||
(* Step 2: at structure declaration, export the main and only projection | ||
of each declared wrapper as an instance of the wrapped structure on | ||
its subject *) | ||
HB.structure | ||
Definition Monoid_enriched_quiver := | ||
{ Obj of isQuiver Obj & hom_isMon Obj }. | ||
|
||
HB.instance Definition _ (T : Monoid_enriched_quiver.type) (A B : T) : isMon (@hom T A B) := | ||
@private T A B. | ||
|
||
(* each instance of isMon should be tried as an instance of hom_isMon *) | ||
|
||
(* Step 3: for each instance of a wrapped mixin on a subject known | ||
to be wrapped, automatically produce an instance of the wrapper mixin too. *) | ||
HB.instance Definition _ := isQuiver.Build Type (fun A B => A -> B). | ||
Fail HB.instance Definition homTypeMon (A B : Quiver.type) := isMon.Build (hom A B) (* ... *). | ||
(* This last command should create a `Monoid_enriched_quiver`, in order to do so it should | ||
automatically instanciate the wrapper `hom_isMon`: | ||
HB.instance Definition _ := hom_isMon.Build Type homTypeMon. | ||
*) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
From HB Require Import structures. | ||
|
||
HB.mixin Record isMonLaw T (e : T) (op : T -> T -> T) := { | ||
opmA : forall a b c, op (op a b) c = op a (op b c); | ||
op1m : forall x, op e x = x; | ||
opm1 : forall x, op x e = x; | ||
}. | ||
|
||
HB.structure Definition MonLaw T e := { op of isMonLaw T e op }. | ||
|
||
HB.mixin Record isPreMonoid T := { | ||
zero : T; | ||
add : T -> T -> T; | ||
}. | ||
HB.structure Definition PreMonoid := { T of isPreMonoid T }. | ||
|
||
HB.structure Definition Monoid := | ||
{ T of isPreMonoid T & isMonLaw T zero add }. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
From HB Require Import structures. | ||
|
||
HB.mixin Record isMonLaw T (e : T) (op : T -> T -> T) := { | ||
opmA : forall a b c, op (op a b) c = op a (op b c); | ||
op1m : forall x, op e x = x; | ||
opm1 : forall x, op x e = x; | ||
}. | ||
|
||
HB.structure Definition MonLaw T e := { op of isMonLaw T e op }. | ||
|
||
HB.mixin Record isPreMonoid T := { | ||
zero : T; | ||
add : T -> T -> T; | ||
}. | ||
HB.structure Definition PreMonoid := { T of isPreMonoid T }. | ||
|
||
HB.structure Definition Monoid := | ||
{ T of isPreMonoid T & | ||
isMonLaw T (@zero (PreMonoid.clone T _)) (@add (PreMonoid.clone T _)) }. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This fails because
hom
expects aQuiver.type
not aisQuiver
. You can try to useHB.pack
here.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/math-comp/hierarchy-builder/blob/master/structures.v#L455-L485