equiv_debruijn: add more hints & simplify TEq_Symm proof
This commit is contained in:
parent
1d6fb9ab6d
commit
377f57e124
1 changed files with 7 additions and 25 deletions
|
@ -3,6 +3,8 @@ Require Import terms_debruijn.
|
||||||
Open Scope ladder_type_scope.
|
Open Scope ladder_type_scope.
|
||||||
Open Scope ladder_expr_scope.
|
Open Scope ladder_expr_scope.
|
||||||
|
|
||||||
|
Create HintDb type_eq_hints.
|
||||||
|
|
||||||
Reserved Notation "S '-->distribute-ladder' T" (at level 40).
|
Reserved Notation "S '-->distribute-ladder' T" (at level 40).
|
||||||
|
|
||||||
Inductive type_distribute_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
Inductive type_distribute_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
||||||
|
@ -38,6 +40,7 @@ Inductive type_distribute_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
||||||
|
|
||||||
where "S '-->distribute-ladder' T" := (type_distribute_ladder S T).
|
where "S '-->distribute-ladder' T" := (type_distribute_ladder S T).
|
||||||
|
|
||||||
|
Hint Constructors type_distribute_ladder : type_eq_hints.
|
||||||
|
|
||||||
Reserved Notation "S '-->condense-ladder' T" (at level 40).
|
Reserved Notation "S '-->condense-ladder' T" (at level 40).
|
||||||
Inductive type_condense_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
Inductive type_condense_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
||||||
|
@ -73,9 +76,6 @@ Inductive type_condense_ladder : type_DeBruijn -> type_DeBruijn -> Prop :=
|
||||||
|
|
||||||
where "S '-->condense-ladder' T" := (type_condense_ladder S T).
|
where "S '-->condense-ladder' T" := (type_condense_ladder S T).
|
||||||
|
|
||||||
Create HintDb type_eq_hints.
|
|
||||||
|
|
||||||
Hint Constructors type_distribute_ladder : type_eq_hints.
|
|
||||||
Hint Constructors type_condense_ladder : type_eq_hints.
|
Hint Constructors type_condense_ladder : type_eq_hints.
|
||||||
|
|
||||||
(** Inversion Lemma:
|
(** Inversion Lemma:
|
||||||
|
@ -104,6 +104,8 @@ Proof.
|
||||||
all: auto with type_eq_hints.
|
all: auto with type_eq_hints.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
|
Hint Resolve condense_inverse :type_eq_hints.
|
||||||
|
Hint Resolve distribute_inverse :type_eq_hints.
|
||||||
|
|
||||||
(** Define the equivalence relation as reflexive, transitive hull. $\label{coq:type-equiv}$ *)
|
(** Define the equivalence relation as reflexive, transitive hull. $\label{coq:type-equiv}$ *)
|
||||||
|
|
||||||
|
@ -147,7 +149,7 @@ Inductive type_eq : type_DeBruijn -> type_DeBruijn -> Prop :=
|
||||||
|
|
||||||
where "S '===' T" := (type_eq S T).
|
where "S '===' T" := (type_eq S T).
|
||||||
|
|
||||||
|
Hint Constructors type_eq : type_eq_hints.
|
||||||
|
|
||||||
(** Symmetry of === *)
|
(** Symmetry of === *)
|
||||||
Lemma TEq_Symm :
|
Lemma TEq_Symm :
|
||||||
|
@ -156,25 +158,5 @@ Lemma TEq_Symm :
|
||||||
Proof.
|
Proof.
|
||||||
intros.
|
intros.
|
||||||
induction H.
|
induction H.
|
||||||
|
all: eauto with *.
|
||||||
apply TEq_Refl.
|
|
||||||
|
|
||||||
apply TEq_Trans with (y:=y).
|
|
||||||
apply IHtype_eq2.
|
|
||||||
apply IHtype_eq1.
|
|
||||||
|
|
||||||
apply TEq_SubFun.
|
|
||||||
auto. auto.
|
|
||||||
apply TEq_SubMorph.
|
|
||||||
auto. auto.
|
|
||||||
apply TEq_LadderAssocRL.
|
|
||||||
apply TEq_LadderAssocLR.
|
|
||||||
|
|
||||||
apply TEq_Condense.
|
|
||||||
apply distribute_inverse.
|
|
||||||
apply H.
|
|
||||||
|
|
||||||
apply TEq_Distribute.
|
|
||||||
apply condense_inverse.
|
|
||||||
apply H.
|
|
||||||
Qed.
|
Qed.
|
||||||
|
|
Loading…
Reference in a new issue