lean4-htt/tests/lean/hygienicIntro.lean
Leonardo de Moura 5a24cb5ef7 feat: add hygienicIntro option
@Kha `hygienicIntro` is true by default. `hygienicIntro == false` is
the Lean3 behavior. If we find `hygienicIntro` too inconvenient in
practice, we set the default to false.
2020-09-18 13:02:38 -07:00

47 lines
1.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

new_frontend
set_option hygienicIntro false in
theorem ex1 {a p q r : Prop} : p → (p → q) → (q → r) → r := by
intro _ h1 h2;
apply h2;
apply h1;
exact a_1 -- Bad practice, using name generated by `intro`.
theorem ex2 {a p q r : Prop} : p → (p → q) → (q → r) → r := by
intro _ h1 h2;
apply h2;
apply h1;
exact a_1 -- error "unknown identifier"
theorem ex3 {a p q r : Prop} : p → (p → q) → (q → r) → r := by
intro _ h1 h2;
apply h2;
apply h1;
assumption
example {p q : Prop} (h₁ : p → q) (h₂ : p q) : q := by
cases h₂;
{ apply h₁; exact h }; -- error "unknown identifier"
exact h
set_option hygienicIntro false in
example {p q : Prop} (h₁ : p → q) (h₂ : p q) : q := by
cases h₂;
{ apply h₁; exact h }; -- hygiene is disabled
exact h
-- Hygienic versions
example {p q : Prop} (h₁ : p → q) (h₂ : p q) : q := by
cases h₂ with
| inl h => apply h₁; exact h
| inr h => exact h
example {p q : Prop} (h₁ : p → q) (h₂ : p q) : q := by
cases h₂;
{ apply h₁; assumption };
assumption
example {p q : Prop} (h₁ : p → q) (h₂ : p q) : q := by
match h₂ with
| Or.inl _ => apply h₁; assumption
| Or.inr h => exact h