blob: ebee4062c87114a1749f4d69bbffb51de1fbf317 [file] [edit]
example (x : α × β) : x = (x.1, x.2) :=
rfl -- Should work with eta for structures
example (x : Unit) : x = ⟨⟩ :=
rfl -- Should work with eta for structures
structure Equiv (α : Sort u) (β : Sort v) where
toFun : α → β
invFun : β → α
left_inv : ∀ x, invFun (toFun x) = x
right_inv : ∀ x, toFun (invFun x) = x
infix:50 "≃" => Equiv
def Equiv.symm (e : α ≃ β) : β ≃ α :=
{ toFun := e.invFun
invFun := e.toFun
left_inv := e.right_inv
right_inv := e.left_inv }
theorem Equiv.symm.symm (e : α ≃ β) : e.symm.symm = e :=
rfl -- Should work with eta for structures
structure Bla where
x : Nat
def Bla.toNat (b : Bla) : Nat := b.x
def Nat.toBla (x : Nat) : Bla := { x }
example (b : Bla) : b.toNat.toBla = b :=
rfl -- Should work with eta for structures
example (b : Bla) : b.toNat.toBla = b := by
cases b
rfl
example (x : Unit × α) : x = ((), x.2) := rfl
example (x : (_ : True ∨ False) ×' α) : x = ⟨Or.inl ⟨⟩, x.2⟩ := rfl
example (p : α × α → Prop) (h : ∀ x y, p (x, y)) : p z := h z.1 _
class TopologicalSpace (α : Type)
structure Homeomorph (α β : Type) [TopologicalSpace α] [TopologicalSpace β] extends Equiv α β where
continuousToFun : True
continuousInv : True
def Homeomorph.symm [TopologicalSpace α] [TopologicalSpace β] (f : Homeomorph α β) : Homeomorph β α where
toFun := f.invFun
invFun := f.toFun
left_inv := sorry
right_inv := sorry
continuousToFun := f.continuousInv
continuousInv := sorry
example [TopologicalSpace α] [TopologicalSpace β] (f : Homeomorph α β) :
f.symm.symm = f := rfl -- fails
def frob : Nat × Nat → Nat × Nat
| (x, y) => (x + y, 42)
example (x : Nat × Nat) : (frob x).2 = 42 := rfl
example (x y : Unit) : x = y := rfl
opaque f : Nat → Unit
opaque g : Nat → Unit
example (x y : Nat) : f x = f y := rfl
example (x y : Nat) : f x = g y := rfl