Zulip Chat Archive

Stream: new members

Topic: How to reduce the compilation time of this line?


chenjulang (Feb 21 2024 at 10:46):

Check the line "<;> apply And.intro;apply Eq.refl;exact Prod.mk_eq_zero.mp rfl".
To apply the same tactics on 18 Goals, this line costs over minutes,
Any ideas how to speed it up ?

lemma ft_valid
  : x : RubiksSuperType,
  FaceTurn x  x  ValidCube
  :=
    by
      intro x hx
      cases hx with
      | _ =>
        -- method 1:
        -- simp [ValidCube, U, D, R, L, F, B, U2, D2, R2, L2, F2, B2, U', D', R', L', F', B']
        -- repeat' apply And.intro
        -- all_goals apply Eq.refl

        -- method 2:
        simp only [ValidCube, U, D, R, L, F, B, U2, D2, R2, L2, F2, B2, U', D', R', L', F', B']
        <;> apply And.intro;apply Eq.refl;exact Prod.mk_eq_zero.mp rfl
        done

chenjulang (Feb 21 2024 at 10:46):

The 18 Goals:

18 goals
case U
 ({ permute := cyclePieces [0, 1, 2, 3], orient := 0 }, { permute := cyclePieces [0, 1, 2, 3], orient := 0 }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case D
 ({ permute := cyclePieces [4, 5, 6, 7], orient := 0 }, { permute := cyclePieces [4, 5, 6, 7], orient := 0 }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case R
 ({ permute := cyclePieces [1, 6, 5, 2], orient := Orient 8 3 [(1, 1), (6, 2), (5, 1), (2, 2)] },
    { permute := cyclePieces [1, 9, 5, 10], orient := 0 }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case L
 ({ permute := cyclePieces [0, 3, 4, 7], orient := Orient 8 3 [(0, 2), (3, 1), (4, 2), (7, 1)] },
    { permute := cyclePieces [3, 11, 7, 8], orient := 0 }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case F
 ({ permute := cyclePieces [2, 5, 4, 3], orient := Orient 8 3 [(2, 1), (5, 2), (4, 1), (3, 2)] },
    { permute := cyclePieces [2, 10, 4, 11], orient := Orient 12 2 [(2, 1), (10, 1), (4, 1), (11, 1)] }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case B
 ({ permute := cyclePieces [0, 7, 6, 1], orient := Orient 8 3 [(0, 1), (7, 2), (6, 1), (1, 2)] },
    { permute := cyclePieces [0, 8, 6, 9], orient := Orient 12 2 [(0, 1), (8, 1), (6, 1), (9, 1)] }) 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case U2
 ({ permute := cyclePieces [0, 1, 2, 3], orient := 0 }, { permute := cyclePieces [0, 1, 2, 3], orient := 0 }) ^ 2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case D2
 ({ permute := cyclePieces [4, 5, 6, 7], orient := 0 }, { permute := cyclePieces [4, 5, 6, 7], orient := 0 }) ^ 2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case R2
 ({ permute := cyclePieces [1, 6, 5, 2], orient := Orient 8 3 [(1, 1), (6, 2), (5, 1), (2, 2)] },
      { permute := cyclePieces [1, 9, 5, 10], orient := 0 }) ^
    2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case L2
 ({ permute := cyclePieces [0, 3, 4, 7], orient := Orient 8 3 [(0, 2), (3, 1), (4, 2), (7, 1)] },
      { permute := cyclePieces [3, 11, 7, 8], orient := 0 }) ^
    2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case F2
 ({ permute := cyclePieces [2, 5, 4, 3], orient := Orient 8 3 [(2, 1), (5, 2), (4, 1), (3, 2)] },
      { permute := cyclePieces [2, 10, 4, 11], orient := Orient 12 2 [(2, 1), (10, 1), (4, 1), (11, 1)] }) ^
    2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case B2
 ({ permute := cyclePieces [0, 7, 6, 1], orient := Orient 8 3 [(0, 1), (7, 2), (6, 1), (1, 2)] },
      { permute := cyclePieces [0, 8, 6, 9], orient := Orient 12 2 [(0, 1), (8, 1), (6, 1), (9, 1)] }) ^
    2 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case U'
 ({ permute := cyclePieces [0, 1, 2, 3], orient := 0 }, { permute := cyclePieces [0, 1, 2, 3], orient := 0 })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case D'
 ({ permute := cyclePieces [4, 5, 6, 7], orient := 0 }, { permute := cyclePieces [4, 5, 6, 7], orient := 0 })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case R'
 ({ permute := cyclePieces [1, 6, 5, 2], orient := Orient 8 3 [(1, 1), (6, 2), (5, 1), (2, 2)] },
      { permute := cyclePieces [1, 9, 5, 10], orient := 0 })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case L'
 ({ permute := cyclePieces [0, 3, 4, 7], orient := Orient 8 3 [(0, 2), (3, 1), (4, 2), (7, 1)] },
      { permute := cyclePieces [3, 11, 7, 8], orient := 0 })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case F'
 ({ permute := cyclePieces [2, 5, 4, 3], orient := Orient 8 3 [(2, 1), (5, 2), (4, 1), (3, 2)] },
      { permute := cyclePieces [2, 10, 4, 11], orient := Orient 12 2 [(2, 1), (10, 1), (4, 1), (11, 1)] })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}
case B'
 ({ permute := cyclePieces [0, 7, 6, 1], orient := Orient 8 3 [(0, 1), (7, 2), (6, 1), (1, 2)] },
      { permute := cyclePieces [0, 8, 6, 9], orient := Orient 12 2 [(0, 1), (8, 1), (6, 1), (9, 1)] })⁻¹ 
  {c |
    sign c.1.permute = sign c.2.permute 
      Finset.sum {0, 1, 2, 3, 4, 5, 6, 7} c.1.orient = 0 
        Finset.sum {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} c.2.orient = 0}

Last updated: May 02 2025 at 03:31 UTC