Skip to content
Snippets Groups Projects
Commit 578dd89e authored by Felipe Cerqueira's avatar Felipe Cerqueira
Browse files

Prove decidable equality of JobIn

parent 7efdf29a
No related branches found
No related tags found
No related merge requests found
...@@ -46,13 +46,9 @@ Module ArrivalSequence. ...@@ -46,13 +46,9 @@ Module ArrivalSequence.
Definition job_arrival {arr_seq: arrival_sequence Job} (j: JobIn arr_seq) := Definition job_arrival {arr_seq: arrival_sequence Job} (j: JobIn arr_seq) :=
_arrival_time arr_seq j. _arrival_time arr_seq j.
(* Finally, we assume a decidable equality for JobIn, to make it compatible (* Finally, we define a decidable equality for JobIn, in order to make
with ssreflect. TODO: Is there a better way to do this? *) it compatible with ssreflect (see jobin_eqdec.v). *)
Definition jobin_eqdef (arr_seq: arrival_sequence Job) := Load jobin_eqdec.
(fun j1 j2: JobIn arr_seq => (JobIn_is_Job j1) == (JobIn_is_Job j2)).
Axiom eqn_jobin : forall arr_seq, Equality.axiom (jobin_eqdef arr_seq).
Canonical jobin_eqMixin arr_seq := EqMixin (eqn_jobin arr_seq).
Canonical jobin_eqType arr_seq := Eval hnf in EqType (JobIn arr_seq) (jobin_eqMixin arr_seq).
End JobInArrivalSequence. End JobInArrivalSequence.
......
(* The decidable equality for JobIn checks whether the Job
and the arrival times are the same. *)
Definition jobin_eqdef (arr_seq: arrival_sequence Job) :=
(fun j1 j2: JobIn arr_seq =>
(_job_in arr_seq j1 == _job_in arr_seq j2) &&
(_arrival_time arr_seq j1 == _arrival_time arr_seq j2)).
Lemma eqn_jobin : forall arr_seq, Equality.axiom (jobin_eqdef arr_seq).
Proof.
unfold Equality.axiom; intros arr_seq x y.
destruct (jobin_eqdef arr_seq x y) eqn:EQ.
{
apply ReflectT.
unfold jobin_eqdef in *.
move: EQ => /andP [/eqP EQjob /eqP EQarr].
destruct x, y; ins; subst.
f_equal; apply proof_irrelevance.
}
{
apply ReflectF.
unfold jobin_eqdef, not in *; intro BUG.
apply negbT in EQ; rewrite negb_and in EQ.
destruct x, y.
move: EQ => /orP [/negP DIFFjob | /negP DIFFarr].
by apply DIFFjob; inversion BUG; subst; apply/eqP.
by apply DIFFarr; inversion BUG; subst; apply/eqP.
}
Qed.
Canonical jobin_eqMixin arr_seq := EqMixin (eqn_jobin arr_seq).
Canonical jobin_eqType arr_seq := Eval hnf in EqType (JobIn arr_seq) (jobin_eqMixin arr_seq).
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment