Contribution: PAutomata
Library PAutomata.Time
Require Export ZArith.
Parameter Time : Set.
Parameter T0 : Time.
Parameter T1 : Time.
Parameter Tplus : Time -> Time -> Time.
Parameter Tmult : Time -> Time -> Time.
Parameter Topp : Time -> Time.
Parameter Tlt : Time -> Time -> Prop.
Definition Tle (r1 r2 : Time) : Prop := Tlt r1 r2 \/ r1 = r2.
Definition Tge (r1 r2 : Time) : Prop := Tle r2 r1.
Definition Tgt (r1 r2 : Time) : Prop := Tlt r2 r1.
Hint Unfold Tle Tge Tgt: time.
Definition Tminus (r1 r2 : Time) : Time := Tplus r1 (Topp r2).
Axiom Tplus_sym : forall r1 r2 : Time, Tplus r1 r2 = Tplus r2 r1.
Axiom
Tplus_assoc :
forall r1 r2 r3 : Time, Tplus (Tplus r1 r2) r3 = Tplus r1 (Tplus r2 r3).
Axiom Tplus_Topp_r : forall r : Time, Tplus r (Topp r) = T0.
Hint Resolve Tplus_sym Tplus_Topp_r: time.
Axiom Tplus_T0_r : forall r : Time, Tplus r T0 = r.
Lemma Tplus_T0_l : forall r : Time, Tplus T0 r = r.
intro; rewrite Tplus_sym; apply Tplus_T0_r.
Qed.
Hint Resolve Tplus_T0_r Tplus_T0_l: time.
Axiom
total_order : forall r1 r2 : Time, {Tlt r1 r2} + {r1 = r2} + {Tlt r2 r1}.
Axiom Tlt_antisym : forall r1 r2 : Time, Tlt r1 r2 -> ~ Tlt r2 r1.
Axiom Tlt_trans : forall r1 r2 r3 : Time, Tlt r1 r2 -> Tlt r2 r3 -> Tlt r1 r3.
Axiom
Tlt_compatibility_l :
forall r r1 r2 : Time, Tlt r1 r2 -> Tlt (Tplus r r1) (Tplus r r2).
Axiom Tlt_T0_T1 : Tlt T0 T1.
Hint Resolve Tlt_T0_T1 Tlt_trans Tlt_compatibility_l Tlt_antisym: time.
Fixpoint INTime (n : nat) : Time :=
match n with
| O => T0
| S O => T1
| S n => Tplus (INTime n) T1
end.
Definition IZTime (z : Z) : Time :=
match z with
| Z0 => T0
| Zpos n => INTime (nat_of_P n)
| Zneg n => Topp (INTime (nat_of_P n))
end.
Axiom Tmult_sym : forall r1 r2 : Time, Tmult r1 r2 = Tmult r2 r1.
Axiom
Tmult_assoc :
forall r1 r2 r3 : Time, Tmult (Tmult r1 r2) r3 = Tmult r1 (Tmult r2 r3).
Hint Resolve Tmult_sym Tmult_assoc: time.
Axiom Tmult_T0_r : forall r : Time, Tmult r T0 = T0.
Lemma Tmult_T0_l : forall r : Time, Tmult T0 r = T0.
intro; rewrite Tmult_sym; apply Tmult_T0_r.
Qed.
Axiom Tmult_T1_r : forall r : Time, Tmult r T1 = r.
Lemma Tmult_T1_l : forall r : Time, Tmult T1 r = r.
intro; rewrite Tmult_sym; apply Tmult_T1_r.
Qed.
Hint Resolve Tmult_T0_r Tmult_T0_l: time.
