File: funclass.v

package info (click to toggle)
coq-hierarchy-builder 1.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,988 kB
  • sloc: makefile: 109
file content (57 lines) | stat: -rw-r--r-- 1,527 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
From HB Require Import structures.

HB.mixin Record has_assoc T (F : T -> T -> T) := {
  assoc : forall x y z : T , F x (F y z) = F (F x y) z;
}.
HB.structure Definition Magma T := { F of has_assoc T F }.

HB.mixin Record has_neutral T (F : T -> T -> T) := {
  id : T;
  idl : forall x : T , F id x = x;
  idr : forall x : T , F x id = x;
}.
HB.structure Definition Monoid T := { F of Magma T F & has_neutral T F }.

About id.

Require Import Arith ssreflect.

HB.instance Definition x1 := has_assoc.Build nat plus Nat.add_assoc.

Lemma plus_O_r x : x + 0 = x. Proof. by rewrite -plus_n_O. Qed.
HB.instance Definition x2 := has_neutral.Build nat plus 0 plus_O_n plus_O_r.

Check Monoid.on plus.

Lemma test x : x + 0 = x.
Proof. by rewrite idr. Qed.

HB.factory Record MOT T (F : T -> T -> T) := {
  assoc : forall x y z : T , F x (F y z) = F (F x y) z;
  id : T;
  idl : forall x : T , F id x = x;
  commid : forall x : T , F x id = F id x;
}.

HB.builders Context T F of MOT T F.

HB.instance Definition x3 := has_assoc.Build T F assoc.

Lemma myidr x : F x id = x.
Proof. by rewrite commid idl. Qed.

HB.instance Definition x4 := has_neutral.Build T F id idl myidr.

HB.end.

HB.instance Definition x5 :=
  MOT.Build nat mult Nat.mul_assoc 1 Nat.mul_1_l (fun x => Nat.mul_comm x 1).

Check Monoid.on mult.

HB.mixin Record silly (T1 : Type) (F : Monoid.type T1) (T : Type) := { xx : T }.
HB.structure Definition wp T (F : Monoid.type T) := { A of silly T F A }.

#[skip="8.11"]
HB.check (forall w : wp.type _ mult, w = w).