lean4-htt/tests/lean/run/guard_expr.lean
2024-02-29 04:12:52 +00:00

58 lines
1.4 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.

example (n : Nat) : Nat := by
guard_hyp n :ₛ Nat
let m : Nat := 1
guard_expr 1 =ₛ (by exact 1)
fail_if_success guard_expr 1 = (by exact 2)
guard_hyp m := 1
guard_hyp m : (fun x => x) Nat :=~ id 1
guard_target = Nat
have : 1 = 1 := by conv =>
guard_hyp m := 1
guard_expr Nat = m
fail_if_success guard_target = 1
lhs
guard_target = 1
exact 0
-- Now with a generic type to test that default instances work correctly
example [∀ n, OfNat α n] (n : α) : α := by
guard_hyp n
fail_if_success guard_hyp m
guard_hyp n :ₛ α
let q : α := 1
guard_expr (1 : α) =ₛ 1
fail_if_success guard_expr 1 =ₛ (2 : α)
fail_if_success guard_expr 1 =ₛ (by exact (2 : α))
guard_hyp q := 1
guard_hyp q : α := 1
guard_hyp q : (fun x => x) α :=~ id 1
guard_target = α
have : (1 : α) = 1 := by conv =>
guard_hyp q := 1
guard_expr α = q
fail_if_success guard_target = 1
lhs
guard_target = 1
exact 0
#guard_expr 1 = 1
#guard_expr 1 =ₛ 1
#guard_expr 2 = 1 + 1
section
variable {α : Type} [∀ n, OfNat α n]
#guard_expr (1 : α) = 1
end
#guard true
#guard 2 == 1 + 1
#guard 2 = 1 + 1
instance (p : Bool → Prop) [DecidablePred p] : Decidable (∀ b, p b) :=
if h : p false ∧ p true then
isTrue (by { intro b; cases h; cases b <;> assumption })
else
isFalse (by { intro h'; simp [h'] at h })
#guard ∀ (b : Bool), b = !!b