Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
From Tealeaves Require Import
  Classes.Monoid.

(** * Natural Numbers with Addition *)
(**********************************************************************)
#[global] Instance Monoid_op_plus: Monoid_op nat := plus.

#[global] Instance Monoid_unit_zero: Monoid_unit nat := 0.

#[global, program] Instance Monoid_Nat:
  @Monoid nat Monoid_op_plus Monoid_unit_zero.

Solve Obligations with (intros; unfold transparent tcs; lia).

(** * Natural Numbers with Maximum *)
(**********************************************************************)
#[local] Instance Monoid_op_max: Monoid_op nat := max.

#[local] Instance Monoid_unit_max: Monoid_unit nat := 0.

#[local, program] Instance Monoid_Nat_max:
  @Monoid nat Monoid_op_max Monoid_unit_max.

Solve Obligations with (intros; unfold transparent tcs; lia).


PreOrder le

PreOrder le
constructor; cbv; lia. Qed.

PreOrderedMonoidLaws nat le Monoid_op_plus Monoid_unit_zero

PreOrderedMonoidLaws nat le Monoid_op_plus Monoid_unit_zero
constructor; unfold transparent tcs; lia. Qed.

PreOrderedMonoid nat le

PreOrderedMonoid nat le
constructor; typeclasses eauto. Qed.

PreOrderedMonoidPos nat le

PreOrderedMonoidPos nat le

forall m : nat, monoid_unit nat <= m

forall m : nat, 0 <= m
lia. Qed.

PreOrderedMonoidLaws nat le Monoid_op_max Monoid_unit_max

PreOrderedMonoidLaws nat le Monoid_op_max Monoid_unit_max
constructor; unfold transparent tcs; lia. Qed.

PreOrderedMonoid nat le

PreOrderedMonoid nat le
constructor; typeclasses eauto. Qed.

PreOrderedMonoidPos nat le

PreOrderedMonoidPos nat le

forall m : nat, monoid_unit nat <= m

forall m : nat, 0 <= m
lia. Qed.