Zulip Chat Archive
Stream: new members
Topic: prop2
BANGJI HU (Oct 24 2024 at 10:21):
import Mathlib.Tactic
variable (P Q : Prop)
theorem q1 : (P→¬ ¬Q) ↔¬¬ (P↔Q) := by
 rw [@not_not]
 simp only [not_not]
 constructor
BANGJI HU (Oct 24 2024 at 10:22):
simp only [not_not] lead to contradiction ?or may be the theorem just false
Ruben Van de Velde (Oct 24 2024 at 10:35):
It is clearly false:
import Mathlib.Tactic
variable (P Q : Prop)
theorem q1 : (P→¬ ¬Q) ↔¬¬ (P↔Q) := by
  simp
  sorry
example : False := by
  have := q1 False True
  simpa
BANGJI HU (Oct 24 2024 at 10:55):
here is my complete code
import Mathlib.Tactic
set_option linter.unusedVariables false
variable (P Q : Prop)
theorem q1 (P Q : Prop) : (P → ¬¬Q) ↔ ¬¬(P → Q) := by
  apply Iff.intro
  · intro h
    by_contra h'
    apply h'
    intro p
    by_contra q'
    apply h p
    assumption
  · intro h p q'
    by_contra h'
    apply h
    intro p'
    by_contra q''
    apply h'
    exact h fun a => q' (p' p)
BANGJI HU (Oct 24 2024 at 12:18):
and i try to turn to lean3
variables (P Q : Prop)
theorem q1 : (P → ¬¬Q) ↔ ¬¬(P → Q) :=
begin
  constructor,
  { assume h,
    assume h',
    apply h',
    assume p,
    assume q',
    apply h,
    exact p,
    exact q' },
  { assume h,
    assume p,
    assume q',
    apply h,
    have pq : P → Q,
    { assume p',
      apply q',
      exact p' p },
    exact pq }
end
BANGJI HU (Oct 24 2024 at 12:19):
but Assuming the target of the goal is a Pi or a let, assume h : t unifies th [...]
Last updated: May 02 2025 at 03:31 UTC