aboutsummaryrefslogtreecommitdiff
path: root/src/Compilers/Named/ContextProperties.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compilers/Named/ContextProperties.v')
-rw-r--r--src/Compilers/Named/ContextProperties.v181
1 files changed, 0 insertions, 181 deletions
diff --git a/src/Compilers/Named/ContextProperties.v b/src/Compilers/Named/ContextProperties.v
deleted file mode 100644
index 782fc9a54..000000000
--- a/src/Compilers/Named/ContextProperties.v
+++ /dev/null
@@ -1,181 +0,0 @@
-Require Import Crypto.Compilers.Syntax.
-Require Import Crypto.Compilers.Named.Context.
-Require Import Crypto.Compilers.Named.ContextDefinitions.
-Require Import Crypto.Compilers.Named.ContextProperties.Tactics.
-Require Import Crypto.Util.Decidable.
-Require Import Crypto.Util.Tactics.BreakMatch.
-
-Section with_context.
- Context {base_type_code}
- (base_type_code_dec : DecidableRel (@eq base_type_code))
- {Name}
- (Name_dec : DecidableRel (@eq Name))
- {var} (Context : @Context base_type_code Name var)
- (ContextOk : ContextOk Context).
-
- Local Notation find_Name := (@find_Name base_type_code Name Name_dec).
- Local Notation find_Name_and_val := (@find_Name_and_val base_type_code Name base_type_code_dec Name_dec).
-
- Lemma lookupb_eq_cast
- : forall (ctx : Context) n t t' (pf : t = t'),
- lookupb t' ctx n = option_map (fun v => eq_rect _ var v _ pf) (lookupb t ctx n).
- Proof.
- intros; subst; edestruct lookupb; reflexivity.
- Defined.
- Lemma lookupb_extendb_eq
- : forall (ctx : Context) n t t' (pf : t = t') v,
- lookupb t' (extendb ctx n (t:=t) v) n = Some (eq_rect _ var v _ pf).
- Proof.
- intros; subst; apply lookupb_extendb_same; assumption.
- Defined.
-
- Lemma lookupb_extendb_full (ctx : Context) n n' t t' v
- : lookupb t' (extendb ctx n (t:=t) v) n'
- = match dec (n = n'), dec (t = t') with
- | left _, left pf
- => Some (eq_rect _ var v _ pf)
- | left _, _
- => None
- | right _, _
- => lookupb t' ctx n'
- end.
- Proof using ContextOk.
- break_innermost_match; subst; simpl.
- { apply lookupb_extendb_same; assumption. }
- { apply lookupb_extendb_wrong_type; assumption. }
- { apply lookupb_extendb_different; assumption. }
- Qed.
-
- Lemma lookupb_extend (ctx : Context)
- T N t n v
- : lookupb t (extend ctx N (t:=T) v) n
- = find_Name_and_val t n N v (lookupb t ctx n).
- Proof using ContextOk. revert ctx; induction T; t. Qed.
-
- Lemma lookupb_remove (ctx : Context)
- T N t n
- : lookupb t (remove ctx N) n
- = match @find_Name n T N with
- | Some _ => None
- | None => lookupb t ctx n
- end.
- Proof using ContextOk. revert ctx; induction T; t. Qed.
-
- Lemma lookupb_remove_not_in (ctx : Context)
- T N t n
- (H : @find_Name n T N = None)
- : lookupb t (remove ctx N) n = lookupb t ctx n.
- Proof using ContextOk. rewrite lookupb_remove, H; reflexivity. Qed.
-
- Lemma lookupb_remove_in (ctx : Context)
- T N t n
- (H : @find_Name n T N <> None)
- : lookupb t (remove ctx N) n = None.
- Proof using ContextOk. rewrite lookupb_remove; break_match; congruence. Qed.
-
- Lemma find_Name_and_val_Some_None
- {var' var''}
- {t n T N}
- {x : interp_flat_type var' T}
- {y : interp_flat_type var'' T}
- {default default' v}
- (H0 : @find_Name_and_val var' t n T N x default = Some v)
- (H1 : @find_Name_and_val var'' t n T N y default' = None)
- : default = Some v /\ default' = None.
- Proof using Type.
- revert dependent default; revert dependent default'; induction T; t.
- Qed.
-
- Lemma find_Name_and_val_default_to_None
- {var'}
- {t n T N}
- {x : interp_flat_type var' T}
- {default}
- (H : @find_Name n T N <> None)
- : @find_Name_and_val var' t n T N x default
- = @find_Name_and_val var' t n T N x None.
- Proof using Type. revert default; induction T; t. Qed.
- Hint Rewrite @find_Name_and_val_default_to_None using congruence : ctx_db.
-
- Lemma find_Name_and_val_different
- {var'}
- {t n T N}
- {x : interp_flat_type var' T}
- {default}
- (H : @find_Name n T N = None)
- : @find_Name_and_val var' t n T N x default = default.
- Proof using Type. revert default; induction T; t. Qed.
- Hint Rewrite @find_Name_and_val_different using assumption : ctx_db.
-
- Lemma find_Name_and_val_wrong_type_iff
- {var'}
- {t t' n T N}
- {x : interp_flat_type var' T}
- {default}
- (H : @find_Name n T N = Some t')
- : t <> t'
- <-> @find_Name_and_val var' t n T N x default = None.
- Proof using Type. split; revert default; induction T; t. Qed.
- Lemma find_Name_and_val_wrong_type
- {var'}
- {t t' n T N}
- {x : interp_flat_type var' T}
- {default}
- (H : @find_Name n T N = Some t')
- (Ht : t <> t')
- : @find_Name_and_val var' t n T N x default = None.
- Proof using Type. eapply find_Name_and_val_wrong_type_iff; eassumption. Qed.
- Hint Rewrite @find_Name_and_val_wrong_type using congruence : ctx_db.
-
- Lemma find_Name_find_Name_and_val_wrong {var' n t' T V N}
- : find_Name n N = Some t'
- -> @find_Name_and_val var' t' n T N V None = None
- -> False.
- Proof using Type. induction T; t. Qed.
-
- Lemma find_Name_and_val_None_iff
- {var'}
- {t n T N}
- {x : interp_flat_type var' T}
- {default}
- : (@find_Name n T N <> Some t
- /\ (@find_Name n T N <> None \/ default = None))
- <-> @find_Name_and_val var' t n T N x default = None.
- Proof using Type.
- destruct (@find_Name n T N) eqn:?; unfold not; t;
- try solve [ eapply find_Name_and_val_wrong_type; [ eassumption | congruence ]
- | eapply find_Name_find_Name_and_val_wrong; eassumption
- | left; congruence ].
- Qed.
-
- Lemma find_Name_and_val_split
- {var' t n T N V default}
- : @find_Name_and_val var' t n T N V default
- = match @find_Name n T N with
- | Some t' => if dec (t = t')
- then @find_Name_and_val var' t n T N V None
- else None
- | None => default
- end.
- Proof using Type.
- t; erewrite find_Name_and_val_wrong_type by solve [ eassumption | congruence ]; reflexivity.
- Qed.
- Lemma find_Name_and_val_find_Name_Some
- {var' t n T N V v}
- (H : @find_Name_and_val var' t n T N V None = Some v)
- : @find_Name n T N = Some t.
- Proof using Type.
- rewrite find_Name_and_val_split in H; break_match_hyps; subst; congruence.
- Qed.
-End with_context.
-
-Ltac find_Name_and_val_default_to_None_step :=
- match goal with
- | [ H : context[find_Name_and_val ?tdec ?ndec _ _ _ _ ?default] |- _ ]
- => lazymatch default with None => fail | _ => idtac end;
- rewrite (find_Name_and_val_split tdec ndec (default:=default)) in H
- | [ |- context[find_Name_and_val ?tdec ?ndec _ _ _ _ ?default] ]
- => lazymatch default with None => fail | _ => idtac end;
- rewrite (find_Name_and_val_split tdec ndec (default:=default))
- end.
-Ltac find_Name_and_val_default_to_None := repeat find_Name_and_val_default_to_None_step.