-
Notifications
You must be signed in to change notification settings - Fork 25
test for step 0 of CoREACT #357
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
Draft
gares
wants to merge
10
commits into
master
Choose a base branch
from
CoREACT
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
Changes from all commits
Commits
Show all changes
10 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 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 hidden or 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 hidden or 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,61 @@ | ||||||||||||||||||||||||||||||||
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, | ||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here is the code for attribute declaraion hierarchy-builder/HB/common/utils.elpi Lines 26 to 40 in 3b54647
You can then use the get-option predicate to find the value of an attribute
|
||||||||||||||||||||||||||||||||
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. | ||||||||||||||||||||||||||||||||
*) | ||||||||||||||||||||||||||||||||
CohenCyril marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
#[wrapper] | ||||||||||||||||||||||||||||||||
HB.mixin Record hom_isMon T of Quiver T := | ||||||||||||||||||||||||||||||||
{ private : forall A B, isMon (@hom T A B) }. | ||||||||||||||||||||||||||||||||
CohenCyril marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
(* 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 | ||||||||||||||||||||||||||||||||
CohenCyril marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
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). | ||||||||||||||||||||||||||||||||
CohenCyril marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||
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. | ||||||||||||||||||||||||||||||||
*) | ||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
This file contains hidden or 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 hidden or 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.
Uh oh!
There was an error while loading. Please reload this page.