Zulip Chat Archive

Stream: lean4

Topic: How can I finish cases r here?


MarcusArelius (Dec 19 2023 at 10:13):

The case atom n has been done. But I Really do not know how to solve the case impl since the substitution p here is in Nat. Here is my code. The picture shows the problem.

inductive form : Type
| atom : Nat  form
| impl : form  form  form
| neg : form  form
| id : form  form  form

notation "#" n => form.atom n
notation p "⇒" q => form.impl p q
notation "~" p => form.neg p
notation p "≡" q => form.id p q
``````
inductive proof : form  Type
| ax1 :  p q, proof (p  (q  p))
| ax2 :  p q r, proof ((p  (q  r))  ((p  q)  (p  r)))
| ax3 :  p, proof (~~p  p)
| ax4 :  p, proof (p  ~~p)
| ax5 :  p q, proof ((~ p  ~ q)  (q  p))
| ax6 :  p, proof (p  p)
| ax7 :  p q r, proof (((#p)  q)  (r  r [p  q ] ))
-- p is a Nat
| mp :  p q, proof p  proof (p  q)  proof q


inductive tV : Type
| one : tV
| two : tV
| three : tV

structure model :=
  (interpretation : Nat  tV)
@[simp]
def tV.neg : tV  tV
  | tV.one => tV.two
  | _ => tV.one
@[simp]
def tV.impl : tV  tV  tV
  | tV.one, tV.two => tV.two
  | tV.one, tV.three => tV.two
  | _, _ => tV.one
@[simp]
def tV.id : tV  tV  tV
  | tV.one, tV.one => tV.one
  | tV.two, tV.two => tV.one
  | tV.three, tV.three => tV.one
  | _, _ => tV.three

def tV.form.substitution2 (src : tV) (_ : Nat) (_ : tV) : tV :=
  match src with
  | tV.one => tV.one
  | tV.two => tV.two
  | tV.three => tV.three
def sublemma (p q :tV):
  tV.impl (tV.id p q) (tV.impl p q) = tV.one
  := by cases p; cases q; repeat rfl; repeat cases q; repeat rfl

def reflemma (n: tV): tV.impl n n = tV.one
  := by cases n; repeat rfl

def idlemma (p :tV):
  tV.impl p tV.one = tV.one:= by cases p; repeat rfl

def subsublemma (p q n:tV):
  tV.impl (tV.id p q) (tV.impl n n) = tV.one
  :=
  by rw [reflemma]
     rw [idlemma]
theorem ax7_valid :  p q r, model.valid (((#p)  q)  (r  r [p  q ] )) :=
by
intro p q r m
cases r with
| atom n => cases em ((#n) = # p) with
  | inl h => rw [h]
             have h1 : (#p)[pq]=q := by simp
             rw [h1]
             apply sublemma
  | inr h => have h2 : ¬(p=n):= by intro h1; rw [h1] at h; apply h; apply rfl
             have h3 : (#n)[pq]=#n := by simp; simp [h2]
             rw [h3]
             apply subsublemma

| impl p q => cases em ((pq) = p) with

| neg p =>  sorry
| id p q =>  sorry

Impl-cases-1.png
impl-cases-2.png


Last updated: Dec 20 2023 at 11:08 UTC