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 leconstructor; cbv; lia. Qed.PreOrder lePreOrderedMonoidLaws nat le Monoid_op_plus Monoid_unit_zeroconstructor; unfold transparent tcs; lia. Qed.PreOrderedMonoidLaws nat le Monoid_op_plus Monoid_unit_zeroPreOrderedMonoid nat leconstructor; typeclasses eauto. Qed.PreOrderedMonoid nat lePreOrderedMonoidPos nat lePreOrderedMonoidPos nat leforall m : nat, monoid_unit nat <= mlia. Qed.forall m : nat, 0 <= mPreOrderedMonoidLaws nat le Monoid_op_max Monoid_unit_maxconstructor; unfold transparent tcs; lia. Qed.PreOrderedMonoidLaws nat le Monoid_op_max Monoid_unit_maxPreOrderedMonoid nat leconstructor; typeclasses eauto. Qed.PreOrderedMonoid nat lePreOrderedMonoidPos nat lePreOrderedMonoidPos nat leforall m : nat, monoid_unit nat <= mlia. Qed.forall m : nat, 0 <= m