Zulip Chat Archive

Stream: general

Topic: Use `configuration.has_lines.exists_unique_line`


Quinn Culver (Jan 14 2023 at 18:01):

How do I use configuration.has_lines.exists_unique_line to complete have hll₂ : l = l₂, from... below ? I tried a few things, most of them similar to have g: ∃! m : L, p₂ ∈ m ∧ p₃ ∈ m, apply configuration.has_lines.exists_unique_line p₂ p₃ hp₂p₃, which gives the error

type mismatch at application
  configuration.has_lines.exists_unique_line p₂
term
  p₂
has type
  P : Type u
but is expected to have type
  Type ? : Type (?+1)

And do I need the two lemmas distinct_lines and distinct_points? My gut says I'm likely reinventing the wheel.

Any other comments, criticisms, etc. about my proof so far would be most appreciated. Having fun learning Lean! :smile:

Here's teh code:

import combinatorics.configuration
open configuration.projective_plane
open classical

universe u

variables {P L : Type u} [has_mem P L] [configuration.projective_plane P L]

lemma distinct_lines {p : P} {l₁ l₂ : L}
(h₁: p  l₁) (h₂: p  l₂)  : l₁  l₂ :=
begin
  by_contradiction,
  subst_vars,
  contradiction,
end

lemma distinct_points {l : L} {p₁ p₂ : P}
(h₁: p₁  l) (h₂: p₂  l)  : p₁  p₂ :=
begin
  by_contradiction,
  subst_vars,
  contradiction,
end

lemma axiom_3_alternative:  (p₁ p₂ p₃ p₄ : P),  (l : L),
  ¬(p₁  l  p₂  l  p₃  l)
   ¬(p₁  l  p₂  l  p₄  l)
   ¬(p₁  l  p₃  l  p₄  l)
   ¬(p₂  l  p₃  l   p₄  l)
  :=
  begin
    have h: (p₁ p₂ p₃ : P) (l₁ l₂ l₃ : L),
      p₁  l₂  p₁  l₃  p₂  l₁  p₂  l₂
         p₂  l₃  p₃  l₁  p₃  l₂  p₃  l₃,
      from exists_config,

    rcases h with p₁, p₂, p₃, l₁, l₂, l₃, hr⟩,
    rcases hr with h₁₂, h₁₃, h₂₁, h₂₂, h₂₃, h₃₁, h₃₂, h₃₃⟩,

    have hl₃l₁: l₃  l₁,
      from  distinct_lines h₂₃ h₂₁,

    have hp₂p₃: p₂  p₃,
      from  (distinct_points h₂₃ h₃₃),

    let q := mk_point hl₃l₁,
    use [p₁, p₂, p₃, q],
    assume l:L,
    have hq: q  l₃  q  l₁, from mk_point_ax hl₃l₁,
    have h₁₂₃ : ¬(p₁  l  p₂  l  p₃  l), from
    begin
      by_contradiction,
      cases h with h₁l h_right,
      cases h_right with h₂l h₃l,
      have hll₂ : l = l₂, from
        begin
          have g: ∃! m : L, p₂  m  p₃  m, apply configuration.has_lines.exists_unique_line p₂ p₃ hp₂p₃
        end
    end,

    have h₁₂q : ¬(p₁  l  p₂  l  q  l), from
    begin
      sorry
    end,

    have h₁₃q : ¬(p₁  l  p₃  l  q  l), from
    begin
      sorry
    end,

    have h₂₃q : ¬(p₂  l  p₃  l  q  l), from
    begin
      sorry
    end,
    have h₁₂₃q :  ¬(p₁  l  p₂  l  p₃  l)   ¬(p₁  l  p₂  l  q l)
       ¬(p₁  l  p₃  l  q  l)  ¬(p₂  l  p₃  l  q  l),
      from  h₁₂₃, h₁₂q, h₁₃q, h₂₃q⟩⟩⟩,
    exact h₁₂₃q,
end

Junyan Xu (Jan 14 2023 at 20:24):

You are just missing some explicit arguments:

apply configuration.has_lines.exists_unique_line P L p₂ p₃ hp₂p₃

Some comments:
distinct_lines is a special case of docs#ne_of_mem_of_not_mem', and
distinct_points is a special case of docs#ne_of_mem_of_not_mem.
⟨h₁₂₃, ⟨h₁₂q, ⟨h₁₃q, h₂₃q⟩⟩⟩, can be written ⟨h₁₂₃, h₁₂q, h₁₃q, h₂₃q⟩,


Last updated: Dec 20 2023 at 11:08 UTC