2013-12-01 1 views
1

에 대해서 ***의 차이점은 무엇이며 A * 1 and A ** mat 1`은 무엇입니까?이사벨 : A * 1과 A ** 매트 1의 차이점

예 :

가 이사벨에
lemma myexample: 
    fixes A :: "('a::comm_ring_1)^'n∷finite^'n∷finite" 
    shows "(A * 1 = A) ∧ (A ** (mat 1) = A)" 
by (metis comm_semiring_1_class.normalizing_semiring_rules(12) matrix_mul_rid) 

답변

1

행렬 단순히 벡터의 벡터로 정의되므로, 매트릭스에 * 벡터들로부터 계승되어, 벡터에 * 단지 componentwise 승산이다. 따라서 (A*B) $ i $ j = A $ i $ j * B $ i $ j입니다. 즉, *은 행렬의 항목 별 곱셈입니다. 이것이 실제로 어디서나 유용할지 여부는 모르겠습니다. 나는 그렇게 생각하지 않습니다. 아마 벡터의 벡터로 행렬을 정의하는 아티팩트 일 겁니다. 행렬에 대한 적절한 typedef를 작성하고 행렬 곱셈을 사용하여 행렬 곱셈을 정의하는 것이 더 좋았을 수 있습니다. 그러나 더 많은 작업과 많은 양의 코드가 필요했기 때문에 그 이유가 있었어야합니다. .

**적절한 행렬 곱셈입니다. mat x은 대각선에 x이 있고 그 밖의 모든 부분에 0이있는 매트릭스이므로 물론 mat 1은 단위 행렬이며 A ** mat 1 = A입니다.

그러나 매트릭스 1은 다시 벡터 정의의 아티팩트입니다. n 차원 벡터 1은 단순히 n 구성 요소를 갖는 벡터로 정의되며, 모두는 1입니다. 결과적으로 행렬 1은 항목이 모두 1이고, 물론 인 행렬입니다. 이것은 어떤 식 으로든 나에게 유용하지 않은 것 같습니다.

+0

이사벨 (Isabelle)의'*'유형은 두 인수가 모두 같은 유형이어야합니다. 이것은 행렬 곱셈에'*'를 사용하는 것이 _square_ 행렬에서만 작동한다는 것을 의미합니다. '('a,'n) squarematrix'와 같은 타입을 갖는 것이 유용 할 수 있지만, 아직 아무도 그러한 라이브러리를 제공하지 못했습니다. –

+0

벡터에 대한 점으로 된 곱셈, 숫자 등의 정의가 수학적으로 비표준이고 거의 쓸모 없다는데 동의합니다. 이것이 내가이 클래스 인스턴스화를 결코 벡터 타입이 정의 된'Finite_Cartesian_Product.thy'로 마이 그 레이션하지 않은 이유입니다. 이러한 인스턴스화를 선택적 가져 오기로 더 분할하는 것이 좋습니다. –