fact: Record FGroup (A: Set) (op: A -> A -> A): Set := mkGroup {s : (list A); unique_s: ulist s; internal: forall a b, In a s -> In b s -> In (op a b) s; assoc: forall a b c, In a s -> In b s -> In c s -> op a (op b c) = op (op a b) c; e: A; e_in_s: In e s; e_is_zero_l: forall a, In a s -> op e a = a; e_is_zero_r: forall a, In a s -> op a e = a; i: A -> A; i_internal: forall a, In a s -> In (i a) s; i_is_inverse_l: forall a, (In a s) -> op (i a) a = e; i_is_inverse_r: forall a, (In a s) -> op a (i a) = e }.
imports: List UList Tactic ZArith