Zulip Chat Archive

Stream: general

Topic: quotient typeclass resolution


Kenny Lau (Apr 17 2018 at 05:05):

here is a working example:

import group_theory.coset

universes u v

variables (G : Type u) [group G] (X S : Type v)

class group_action : Type (max u v) :=
(fn : G  X  X)
(one :  x, fn 1 x = x)
(mul :  g h x, fn (g * h) x = fn g (fn h x))

variable [group_action G X]
variables (g h : G) (x y : X)

infixr `  `:100 := group_action.fn -- \ci

variables {G X g h x y}

@[simp] lemma one_act : (1:G)  x = x :=
group_action.one G x

lemma mul_act : (g * h)  x = g  h  x :=
group_action.mul g h x

lemma act_act : g  h  x = (g * h)  x :=
eq.symm $ group_action.mul g h x

lemma inv_act (H : g  x = y) : g⁻¹  y = x :=
by rw  H; simp [act_act]

variables (G X g h x y)

def stab : set G :=
{ g | g  x = x }

@[simp] lemma mem_stab_iff : g  stab G X x  g  x = x := iff.rfl

instance stab.is_subgroup : is_subgroup (stab G X x) :=
{ mul_mem := λ g1 g2 hg1 hg2, by simp at hg1 hg2; simp [mul_act, hg1, hg2],
  one_mem := by simp,
  inv_mem := λ g hg, inv_act hg }

example (L : left_cosets (stab G X x)) : false :=
quotient.induction_on L _

Kenny Lau (Apr 17 2018 at 05:05):

working but not minimalized

Kenny Lau (Apr 17 2018 at 05:05):

the error is on the last line

Kenny Lau (Apr 17 2018 at 05:05):

I cannot use quotient.induction_on because apparently Lean doesn't know that left_cosets (stab G X x) is a quotient

Kenny Lau (Apr 17 2018 at 05:07):

error message:

[class_instances]  class-instance resolution trace
[class_instances] (0) ?x_0 : setoid G := @left_rel ?x_1 ?x_2 ?x_3 ?x_4
[class_instances] (1) ?x_2 : group G := _inst_1
[class_instances] (1) ?x_4 : @is_subgroup G _inst_1 _inst_1 ?x_3 := @stab.is_subgroup ?x_5 ?x_6 ?x_7 ?x_8 ?x_9
[class_instances] (2) ?x_6 : group G := _inst_1
[class_instances] (2) ?x_8 : @group_action G _inst_1 ?x_7 := _inst_2
[class_instances] trying next solution, current solution has metavars
@left_rel G _inst_1 (@stab G _inst_1 X _inst_2 ?x_9) _
[...]

Kenny Lau (Apr 17 2018 at 05:07):

what is this supposed to mean

Kenny Lau (Apr 17 2018 at 05:08):

I think the x messed up everything

Kenny Lau (Apr 17 2018 at 05:08):

How do i solve this problem?

Mario Carneiro (Apr 17 2018 at 05:51):

left_rel is a bad instance, because it depends on s which is not in the output. I made it a def and used local instance for the proofs in that file. With this modification, you have to write

example (L : left_cosets (stab G X x)) : false :=
by letI := left_rel (stab G X x); exact
quotient.induction_on L _

but then it works


Last updated: Dec 20 2023 at 11:08 UTC