LEAN写経 応用情報数理学特論 第06回

千葉大学 萩原先生の 応用情報数理学特論 第06回 の演習をLean4で写経してみる.

演習06-01

-- 目標1.(variable of type) → Prop
-- 目標2.Nat
variable (U : Type)
variable (u : U)
variable (A : U → Prop)

-- A は U から Prop への関数なので A u は Prop である.
#check A u

-- B は Prop から Prop への関数
variable (B : Prop → Prop)
#check B (A u)

variable (C : Nat → Prop)
#check C 0
#check C 1

演習06-02

-- 目標1.∀
variable (U : Nat → Prop) -- Nat は ℕ 

example (n : Nat) : U n → U n :=
  fun h => h
-- この書き方では n が自然数であることが仮定(コロンの左側)になっている.

example : ∀ n : Nat, U n → U n := by
  intro (n : Nat) -- intro n だけでもよい
  intro (h : U n) -- intro h だけでもよい
  exact h
-- n をコロンの右側に移動している.

example : ∀ a : Nat, U a → U a := by
  intro (b : Nat)
  intro (h : U b)
  exact h

演習06-03

-- 目標1.∀に慣れる
variable (U : Type)
variable (P Q : U → Prop)

example : ∀ x : U, P x → (P x → Q x) → Q x := by
  intro (a : U)
  intro (h : P a)
  intro (f : P a → Q a)
  exact f h

example : (∀ x : U, P x) → (∀ y : U, P y → Q y) → (∀ z : U, Q z) := by
  intro (h₁ : ∀ x : U, P x)
  intro (h₂ : ∀ y : U, P y → Q y)
  intro (z : U)
  have Pz : P z := h₁ z
  have PzQz : P z → Q z := h₂ z
  exact PzQz Pz

演習06-04

-- 目標1.∃
-- 目標2.Exists.intro
-- 目標3.Exists.elim
variable (U : Type)
variable (P : U → Prop)

#check Exists.intro -- 任意の a に P a が成り立つことを仮定して,∃ x, P x を導く
example : ∀ a : U, P a → ∃ x : U, P x := by
  intro (a : U)
  intro (h : P a)
  apply Exists.intro a h

#check Exists.elim
example : (∃ u, ¬ P u) → (∀ x, P x) → False := by
  intro (h₁ : ∃ u, ¬ P u)
  intro (h₂ : ∀ x, P x)
  apply Exists.elim h₁ -- h₁ の ∃ を消す.
  intro (a : U)
  intro (nPa : ¬ P a)
  have Pa : P a := h₂ a
  apply False.elim (nPa Pa) -- contradiction でもよい

Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *