Zulip Chat Archive

Stream: new members

Topic: propext


Daniel Fabian (Aug 17 2019 at 09:42):

Good morning, I'm working my way through the tutorial and I've stumbled across something I don't get.
In chapter 11.2, you are encouraged to prove a certain theorem without propext, or more specifically, to prove that it's equivalent to the axiom.

Here's the proof:

  theorem thm₃ : ((a ↔ b) → p a → p b) ↔ ((a ↔ b) → a = b) :=
  begin
    apply iff.intro,
    intros h hab,
    rw [hab],
    intros ax h hpa,
    from ax h ▸ hpa
  end

I'm fairly confident, I don't use propext anywhere (it's being added as an assumption in of the two iff branches. But

  #print axioms thm₃

claims I'm using propext. And when I drill down into it, it looks like using substitution is what causes the message.

Any explanation?

Joe (Aug 17 2019 at 09:53):

You can prove propext directly using rewrite, so I guess rw must assume propext.

theorem propext' : (a  b)  a = b := λh, by rw h

Joe (Aug 17 2019 at 09:53):

Also the theorem you want to prove should be

theorem thm₃ : ( (p : Prop  Prop), (a  b)  p a  p b)  ((a  b)  a = b) :=

Joe (Aug 17 2019 at 09:57):

theorem thm₃ : ( {p : Prop  Prop}, (a  b)  p a  p b)  ((a  b)  a = b) :=
iff.intro
  (λh hab, h hab rfl)
  (λh p hab ha, (h hab)  ha)

Daniel Fabian (Aug 17 2019 at 09:58):

well, I have a variable p : Prop -> Prop

Mario Carneiro (Aug 17 2019 at 09:59):

the version you stated isn't true

Mario Carneiro (Aug 17 2019 at 09:59):

if p is always true then the LHS is trivial

Mario Carneiro (Aug 17 2019 at 10:00):

it is important that the quantifier appear on the LHS as in Joe's version

Daniel Fabian (Aug 17 2019 at 10:01):

this is the full code:

section
  variables a b c d e : Prop
  variable p : Prop → Prop

  theorem thm₁ (h : a ↔ b) : (c ∧ a ∧ d → e) ↔ (c ∧ b ∧ d → e) :=
  propext h ▸ iff.refl _

  theorem thm₂ (h : a ↔ b) (h₁ : p a) : p b :=
  propext h ▸ h₁

  theorem thm₃ : ((a ↔ b) → p a → p b) ↔ ((a ↔ b) → a = b) :=

  begin
    apply iff.intro,
    intros h hab,
    rw [hab],
    intros ax h hpa,
    from ax h ▸ hpa
  end

  #print axioms thm₃
end

Daniel Fabian (Aug 17 2019 at 10:02):

from what I understand about the syntax, p from the section is passed as an argument to thm_3, correct?

Mario Carneiro (Aug 17 2019 at 10:02):

it is

Mario Carneiro (Aug 17 2019 at 10:02):

but it is quantified at the top level, rather than on the LHS of the iff only

Daniel Fabian (Aug 17 2019 at 10:03):

i see

Daniel Fabian (Aug 17 2019 at 10:04):

i'm re-trying the proof with that different quantification, now

Daniel Fabian (Aug 17 2019 at 10:23):

thanks, got it working!


Last updated: Dec 20 2023 at 11:08 UTC