Zulip Chat Archive

Stream: new members

Topic: simple structural equality


Edward Ayers (Aug 08 2018 at 17:28):

How would I prove this?

structure mystr :=
    (A : )
    (B : bool)
    (p : A > 10)

def mystr_eq (x y : mystr) (A_eq : x.A = y.A) (B_eq : x.B = y.B) : x = y
:= by sorry

Patrick Massot (Aug 08 2018 at 17:35):

def mystr_eq (x y : mystr) (A_eq : x.A = y.A) (B_eq : x.B = y.B) : x = y
:= by cases x ; cases y ; cc

Edward Ayers (Aug 08 2018 at 17:36):

thanks

Mario Carneiro (Aug 08 2018 at 17:36):

congr?

Edward Ayers (Aug 08 2018 at 17:36):

next question: how to prove it without tactics? Just a proof term.

Patrick Massot (Aug 08 2018 at 17:36):

congr ; assumption instead of cc also works

Mario Carneiro (Aug 08 2018 at 17:36):

congr' too

Johan Commelin (Aug 08 2018 at 17:36):

It's longer though

Patrick Massot (Aug 08 2018 at 17:37):

but is much longer to type

Patrick Massot (Aug 08 2018 at 17:37):

still longer

Mario Carneiro (Aug 08 2018 at 17:37):

cc is longer to run

Johan Commelin (Aug 08 2018 at 17:37):

I suppose congr; cc works

Johan Commelin (Aug 08 2018 at 17:37):

Can't we have congra?

Edward Ayers (Aug 08 2018 at 17:37):

by congr ; assumption fails on congr for me

Mario Carneiro (Aug 08 2018 at 17:37):

congr'

Mario Carneiro (Aug 08 2018 at 17:38):

is congra

Mario Carneiro (Aug 08 2018 at 17:38):

you have to do cases first

Mario Carneiro (Aug 08 2018 at 17:40):

term proof:

theorem mystr_eq : ∀ (x y : mystr) (A_eq : x.A = y.A) (B_eq : x.B = y.B), x = y
| ⟨xA, xB, xp⟩ ⟨_, _, _⟩ rfl rfl := rfl

Kevin Buzzard (Aug 08 2018 at 17:45):

I was about to post that term proof but Mario just beat me to it. When I was a beginner I found those sorts of proofs miraculous; that's why I thought it was worth mentioning. The equation compiler is so clever.


Last updated: Dec 20 2023 at 11:08 UTC